Skip to content
Snippets Groups Projects
Commit e538d2be authored by jan.bednarik's avatar jan.bednarik
Browse files

calendar utils: Update calendars in background task

parent c064ddbf
No related branches found
No related tags found
2 merge requests!816Release,!813calendar utils: Update calendars in background task
Pipeline #14283 passed
import json
import logging
from datetime import timedelta
from functools import partial
import arrow
from django.core.serializers.json import DjangoJSONEncoder
from django.core.validators import URLValidator, ValidationError
from django.db import models
from django.db import models, transaction
from django.utils.timezone import now
from icalevents import icalevents
from .parser import process_event_list
from .tasks import update_calendar_source
logger = logging.getLogger(__name__)
......@@ -81,7 +83,10 @@ class CalendarMixin(models.Model):
"""
calendar_url = models.URLField(
"URL kalendáře ve formátu iCal", blank=True, null=True
"URL kalendáře ve formátu iCal",
blank=True,
null=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
)
calendar = models.ForeignKey(
Calendar, null=True, blank=True, on_delete=models.PROTECT
......@@ -136,12 +141,9 @@ class CalendarMixin(models.Model):
else:
self.calendar = Calendar.objects.create(url=self.calendar_url)
try:
self.calendar.update_source()
except:
logger.error(
"Calendar update failed for %s", self.calendar.url, exc_info=True
)
transaction.on_commit(
partial(update_calendar_source.delay, self.calendar.id)
)
# delete related Calendar when URL is cleared
if not self.calendar_url and self.calendar:
......
from celery import shared_task
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
@shared_task
def update_calendar_source(calendar_id):
from .models import Calendar # noqa circular import
cal = Calendar.objects.get(id=calendar_id)
cal.update_source()
# Generated by Django 4.1.10 on 2023-08-23 10:39
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("district", "0122_remove_districthomepage_shared_tags"),
]
operations = [
migrations.AlterField(
model_name="districtcalendarpage",
name="calendar_url",
field=models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
migrations.AlterField(
model_name="districtcenterpage",
name="calendar_url",
field=models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
migrations.AlterField(
model_name="districthomepage",
name="calendar_url",
field=models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
migrations.AlterField(
model_name="districtpersonpage",
name="calendar_url",
field=models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
]
# Generated by Django 4.1.10 on 2023-08-23 10:39
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("elections2021", "0054_elections2021articlepage_shared_from_and_more"),
]
operations = [
migrations.AlterField(
model_name="elections2021calendarpage",
name="calendar_url",
field=models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
]
# Generated by Django 4.1.10 on 2023-08-23 10:39
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("main", "0061_remove_mainhomepage_shared_tags"),
]
operations = [
migrations.AlterField(
model_name="mainpersonpage",
name="calendar_url",
field=models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
]
# Generated by Django 4.1.10 on 2023-08-23 10:39
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("senat_campaign", "0012_merge_20230502_1854"),
]
operations = [
migrations.AlterField(
model_name="senatcampaignhomepage",
name="calendar_url",
field=models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
]
# Generated by Django 4.1.10 on 2023-08-23 10:39
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("uniweb", "0048_merge_20230816_1107"),
]
operations = [
migrations.AlterField(
model_name="uniwebcalendarpage",
name="calendar_url",
field=models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
migrations.AlterField(
model_name="uniwebhomepage",
name="calendar_url",
field=models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment