Skip to content
Snippets Groups Projects

Release

Merged jan.bednarik requested to merge test into master
37 files
+ 1599
152
Compare changes
  • Side-by-side
  • Inline
Files
37
+ 11
13
import json
import json
import logging
import logging
from datetime import timedelta
from datetime import timedelta
 
from functools import partial
import arrow
import arrow
from django.core.serializers.json import DjangoJSONEncoder
from django.core.serializers.json import DjangoJSONEncoder
from django.core.validators import URLValidator, ValidationError
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 django.utils.timezone import now
from icalevents import icalevents
from icalevents import icalevents
from .parser import process_event_list
from .parser import process_event_list
 
from .tasks import update_calendar_source
logger = logging.getLogger(__name__)
logger = logging.getLogger(__name__)
@@ -81,7 +83,10 @@ class CalendarMixin(models.Model):
@@ -81,7 +83,10 @@ class CalendarMixin(models.Model):
"""
"""
calendar_url = models.URLField(
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 = models.ForeignKey(
Calendar, null=True, blank=True, on_delete=models.PROTECT
Calendar, null=True, blank=True, on_delete=models.PROTECT
@@ -125,23 +130,16 @@ class CalendarMixin(models.Model):
@@ -125,23 +130,16 @@ class CalendarMixin(models.Model):
def save(self, *args, **kwargs):
def save(self, *args, **kwargs):
# create or update related Calendar
# create or update related Calendar
if self.calendar_url:
if self.calendar_url:
if self.calendar:
if not self.calendar or self.calendar.url != self.calendar_url:
if self.calendar.url != self.calendar_url:
self.calendar.url = self.calendar_url
self.calendar.save()
else:
calendar = Calendar.objects.filter(url=self.calendar_url).first()
calendar = Calendar.objects.filter(url=self.calendar_url).first()
if calendar:
if calendar:
self.calendar = calendar
self.calendar = calendar
else:
else:
self.calendar = Calendar.objects.create(url=self.calendar_url)
self.calendar = Calendar.objects.create(url=self.calendar_url)
try:
transaction.on_commit(
self.calendar.update_source()
partial(update_calendar_source.delay, self.calendar.id)
except:
)
logger.error(
"Calendar update failed for %s", self.calendar.url, exc_info=True
)
# delete related Calendar when URL is cleared
# delete related Calendar when URL is cleared
if not self.calendar_url and self.calendar:
if not self.calendar_url and self.calendar:
Loading