Skip to content
Snippets Groups Projects
Commit b325a17d authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch '15-cache-ical-data' into 'master'

Resolve "Cache iCal data"

Closes #15

See merge request !55
parents e9188376 1ae01359
No related branches found
No related tags found
1 merge request!55Resolve "Cache iCal data"
Pipeline #18116 passed
Pipeline: AlekSIS

#18118

    import datetime
    import logging
    from django.contrib import messages
    from django.db import models
    from django.db.models.signals import post_delete
    from django.dispatch import receiver
    ......@@ -11,6 +13,8 @@ from aleksis.core.models import DashboardWidget
    from .util.event_feed import get_current_events_with_cal
    logger = logging.getLogger(__name__)
    class RSSFeedWidget(DashboardWidget):
    template = "dashboardfeeds/rss.html"
    ......@@ -82,10 +86,16 @@ class ICalFeedWidget(DashboardWidget):
    events_count = models.IntegerField(verbose_name=_("Number of displayed events"), default=5)
    def get_context(self, request):
    events, errors = get_current_events_with_cal(self.url, self.events_count, request)
    if errors:
    try:
    events = get_current_events_with_cal(self.url, self.events_count)
    except Exception as e:
    events = []
    logger.error(str(e))
    self.broken = True
    self.save()
    if request:
    messages.error(request, _("There was an error getting your calendar."))
    feed = {
    "base_url": self.base_url,
    "feed_events": events,
    ......
    import logging
    from datetime import timedelta
    from typing import Optional, Tuple
    from django.contrib import messages
    from django.http import HttpRequest
    from django.utils import formats, timezone
    from django.utils.translation import gettext_lazy as _
    import requests
    from cache_memoize import cache_memoize
    from ics import Calendar
    logger = logging.getLogger(__name__)
    def get_current_events(calendar: Calendar, limit: int = 5) -> list:
    """Get upcoming events from a calendar (ICS) object.
    ......@@ -75,27 +68,13 @@ def get_current_events(calendar: Calendar, limit: int = 5) -> list:
    return events
    @cache_memoize(300)
    def get_current_events_with_cal(
    calendar_url: str, limit: int = 5, request: Optional[HttpRequest] = None
    ) -> Tuple[list, list]:
    @cache_memoize(3600)
    def get_current_events_with_cal(calendar_url: str, limit: int = 5) -> list:
    """Get current events.
    Download an iCalendar file from an URL, parse using the ICS library
    and return a limited number of events.
    """
    try:
    content = requests.get(calendar_url, timeout=3)
    except requests.RequestException as e:
    logger.error(str(e))
    return [], [str(e)]
    try:
    calendar: Calendar = Calendar(content.text)
    except Exception as e:
    logger.error(str(e))
    if request:
    messages.error(request, _("There was an error getting your calendar"))
    return [], [str(e)]
    return get_current_events(calendar, limit), []
    content = requests.get(calendar_url, timeout=3)
    calendar: Calendar = Calendar(content.text)
    return get_current_events(calendar, limit)
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment