diff --git a/calendar_utils/management/commands/update_callendars.py b/calendar_utils/management/commands/update_callendars.py index 912faaf88948d2607b742c156ecb67bbe2bc3cf8..d1c51b56670280b919d5779555ea884d46eb6acf 100644 --- a/calendar_utils/management/commands/update_callendars.py +++ b/calendar_utils/management/commands/update_callendars.py @@ -11,11 +11,15 @@ class Command(BaseCommand): def handle(self, *args, **options): self.stdout.write("Removing orphaned calendars...") for cal in Calendar.objects.filter( + districtcalendarpage=None, districtcenterpage=None, districthomepage=None, + districtpersonpage=None, elections2021calendarpage=None, + mainpersonpage=None, senatcampaignhomepage=None, uniwebhomepage=None, + uniwebcalendarpage=None, ): try: self.stdout.write(f"- {cal.id} | {cal.url}") diff --git a/calendar_utils/models.py b/calendar_utils/models.py index efed763d62d70fc789a55ec336612a87afd0342f..871ac5838a5dabad2694da6d7f7b99c2091adfad 100644 --- a/calendar_utils/models.py +++ b/calendar_utils/models.py @@ -1,14 +1,13 @@ import json import logging -from datetime import date, timedelta -from pathlib import Path +from datetime import timedelta import arrow from django.core.serializers.json import DjangoJSONEncoder from django.core.validators import URLValidator, ValidationError from django.db import models +from django.utils.timezone import now from icalevents import icalevents -from wagtail.admin.panels import FieldPanel from .parser import process_event_list @@ -69,8 +68,8 @@ class Calendar(models.Model): def update_source(self): event_list = icalevents.events( url=self.url, - start=date.today() - timedelta(days=30), - end=date.today() + timedelta(days=60), + start=now() - timedelta(days=30), + end=now() + timedelta(days=60), ) self.handle_event_list(event_list) @@ -131,7 +130,7 @@ class CalendarMixin(models.Model): self.calendar.url = self.calendar_url self.calendar.save() else: - self.calendar = Calendar.objects.create(url=self.calendar_url) + self.calendar, _ = Calendar.objects.get_or_create(url=self.calendar_url) try: self.calendar.update_source() diff --git a/calendar_utils/parser.py b/calendar_utils/parser.py index d5795aa0908a81d4f39ac78e7ceaf2109c2e043b..7698207bbfdaea29382b105efd733f3070d065ad 100644 --- a/calendar_utils/parser.py +++ b/calendar_utils/parser.py @@ -5,6 +5,7 @@ from zoneinfo import ZoneInfo import arrow import bleach from django.conf import settings +from django.utils.timezone import is_naive if TYPE_CHECKING: from icalevents.icalparser import Event @@ -49,12 +50,7 @@ def set_event_duration(event: "Event") -> "Event": def set_event_timezone(event: "Event") -> "Event": """Sets default project timezone for event if missing.""" - if ( - not event.start.tzinfo - or not event.start.tzinfo.utcoffset(event.start) - or not event.end.tzinfo - or not event.end.tzinfo.utcoffset(event.end) - ): + if is_naive(event.start) or is_naive(event.end): event.start = event.start.replace(tzinfo=ZoneInfo(settings.TIME_ZONE)) event.end = event.end.replace(tzinfo=ZoneInfo(settings.TIME_ZONE)) return event diff --git a/tests/calendar_utils/conftest.py b/tests/calendar_utils/conftest.py index 1aea614630b9fab206a7f52970cf82a8854075d0..f8241f1b8abb29a2324ca82afa15ac457b8053de 100644 --- a/tests/calendar_utils/conftest.py +++ b/tests/calendar_utils/conftest.py @@ -21,6 +21,7 @@ def sample_response(): event.all_day = event_dict["all_day"] event.description = event_dict["description"] event.location = event_dict["location"] + event.url = event_dict["url"] event_list.append(event) return event_list diff --git a/tests/calendar_utils/samples/future_events.json b/tests/calendar_utils/samples/future_events.json index e2197bdf909985065f75294f99e287c08522a613..bf4547be3e9da0809ebe66827ee0d5f7ea46bdac 100644 --- a/tests/calendar_utils/samples/future_events.json +++ b/tests/calendar_utils/samples/future_events.json @@ -5,7 +5,8 @@ "all_day": false, "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)", "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-05-19T17:00:00+02:00", @@ -13,7 +14,8 @@ "all_day": false, "summary": "Proch\u00e1zka s architekty - Vize s\u00eddli\u0161t\u011b \u010e\u00e1blice", "description": "Kr\u00e1sn\u00e9 Kobylisy por\u00e1daji tak\u00e9 proch\u00e1zku po s\u00eddlisti D\u00e1blice, na niz architekti a urbanist\u00e9 predstav\u00ed moznou budouci podobu ieho neizaj\u00edmav\u00e8 sich mist. Akci zakonc\u00ed pr\u00e1telsk\u00e9 posezen\u00ed v pivovaru Cobolis. Bud'te u toho!", - "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika" + "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-23T16:00:00+02:00", @@ -21,7 +23,8 @@ "all_day": false, "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)", "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-05-24T18:00:00+02:00", @@ -29,7 +32,8 @@ "all_day": false, "summary": "Beseda o budouc\u00ed podob\u011b s\u00eddli\u0161t\u011b \u010e\u00e1blice", "description": "Spolek Kr\u00e1sn\u00e9 Kobylisy a M\u00a2 Praha 8 v\u00e1s prostrednictvim radn\u00edho Tom\u00e1Se Hrebika zvou na besedu v Kulturn\u00edm dom\u00e8 L\u00e1dvi.\nCek\u00e1 s\u00eddlist\u00e9 promysleny rozvoj, nebo prom\u00e9na v betonovou dZungli? Jak\u00e9 se tvori pl\u00e1ny na ochranu s\u00eddlist\u00e9 pred nez\u00e1douci\nvystavbou? Pozv\u00e1n\u00ed prijali odborn\u00edci a architekturu a urbanistiku, z\u00e1stupci M\u00e8stsk\u00e9 c\u00e1sti Praha 8 a Magistr\u00e1tu hlavn\u00edho m\u00e8sta Prahy.", - "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika" + "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-27T09:30:00+02:00", @@ -37,7 +41,8 @@ "all_day": false, "summary": "Anthropoid80 - Rekonstrukce atent\u00e1tu", "description": "", - "location": "Pam\u00e1tn\u00edk Operace Anthropoid\nV Hole\u0161ovi\u010dk\u00e1ch, 182 00 Praha, \u010cesk\u00e1 republika" + "location": "Pam\u00e1tn\u00edk Operace Anthropoid\nV Hole\u0161ovi\u010dk\u00e1ch, 182 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-27T14:00:00+02:00", @@ -45,7 +50,8 @@ "all_day": false, "summary": "Anthropoid80", "description": "", - "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika" + "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-28T11:00:00+02:00", @@ -53,7 +59,8 @@ "all_day": false, "summary": "Anthropoid80", "description": "", - "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika" + "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-06-02T18:00:00+02:00", @@ -61,7 +68,8 @@ "all_day": false, "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f", "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec. <br><br>", - "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko" + "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko", + "url": "" }, { "start": "2022-06-06T17:00:00+02:00", @@ -69,7 +77,8 @@ "all_day": false, "summary": "P8 - KDP (Komise pro dopravu)", "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-06-20T16:00:00+02:00", @@ -77,7 +86,8 @@ "all_day": false, "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)", "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-06-22T14:00:00+02:00", @@ -85,7 +95,8 @@ "all_day": false, "summary": "Zastupitelstvo M\u010c Praha 8", "description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html", - "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika" + "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-07-07T18:00:00+02:00", @@ -93,6 +104,7 @@ "all_day": false, "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f", "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec. <br><br>", - "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko" + "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko", + "url": "" } ] diff --git a/tests/calendar_utils/samples/past_events.json b/tests/calendar_utils/samples/past_events.json index 9e5ca0ebaba17739c9ae0da841f48044764aeaf6..76c8f3ac9a767af5628b2692e64d47cdcc9226e5 100644 --- a/tests/calendar_utils/samples/past_events.json +++ b/tests/calendar_utils/samples/past_events.json @@ -5,7 +5,8 @@ "all_day": false, "summary": "P8: Sch\u016fzka MS", "description": "V\u00edce informac\u00ed na: \nhttps://forum.pirati.cz/viewtopic.php?p=807442#p807442", - "location": "Rezidence ROSA\nSt\u0159elni\u010dn\u00e1 1680/8, 182 00 Praha, \u010cesk\u00e1 republika" + "location": "Rezidence ROSA\nSt\u0159elni\u010dn\u00e1 1680/8, 182 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-09T17:00:00+02:00", @@ -13,7 +14,8 @@ "all_day": false, "summary": "P8 - KDP (Komise pro dopravu)", "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-05-09T00:00:00+02:00", @@ -21,7 +23,8 @@ "all_day": true, "summary": "Volba 13.\u201320. pozice - MS Praha 8 (1. kolo)", "description": "", - "location": "" + "location": "", + "url": "" }, { "start": "2022-05-06T14:00:00+02:00", @@ -29,7 +32,8 @@ "all_day": false, "summary": "Pietn\u00ed akt", "description": "https://www.facebook.com/csol.cz/posts/4955450444502712.", - "location": "Kobylisk\u00e1 st\u0159elnice\nBojasova 13, 182 00 Praha, \u010cesk\u00e1 republika" + "location": "Kobylisk\u00e1 st\u0159elnice\nBojasova 13, 182 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-05T18:00:00+02:00", @@ -37,7 +41,8 @@ "all_day": false, "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f", "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec. <br><br>", - "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko" + "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko", + "url": "" }, { "start": "2022-05-04T16:00:00+02:00", @@ -45,7 +50,8 @@ "all_day": false, "summary": "P8 - KKV\u010c (Komise pro kulturu a voln\u00fd \u010das)", "description": "Sch\u016fze b\u00fdvaj\u00ed: Libe\u0148sk\u00fd z\u00e1mek, m\u00edstnost \u010d. 2, v dob\u011b pandemie online<br><br>kontaktn\u00ed osoba: <a href=\"https://praha8.pirati.cz/lide/martin-stanek/\">Martin Stan\u011bk</a>\u00a0-\u00a0<a href=\"mailto:Martin.Stanek@pirati.cz\">Martin.Stanek@pirati.cz</a>\u00a0- 775058555<br><br><a href=\"https://www.praha8.cz/Komise-pro-kulturu-a-volny-cas-2018-2022.html\">Str\u00e1nka komise na webu m\u011bstsk\u00e9 \u010d\u00e1sti</a><br><br><a href=\"https://forum.pirati.cz/viewtopic.php?f=943&t=46454\">Z\u00e1pisy a jmenn\u00e9 hlasov\u00e1n\u00ed na f\u00f3ru</a>", - "location": "Libe\u0148sk\u00fd z\u00e1mek, 180 00 Prague-Prague 8, Czechia" + "location": "Libe\u0148sk\u00fd z\u00e1mek, 180 00 Prague-Prague 8, Czechia", + "url": "" }, { "start": "2022-04-27T14:00:00+02:00", @@ -53,7 +59,8 @@ "all_day": false, "summary": "Zastupitelstvo M\u010c Praha 8", "description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html", - "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika" + "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-04-25T00:00:00+02:00", @@ -61,7 +68,8 @@ "all_day": true, "summary": "Volba m\u00edstop\u0159edsed\u016f MS Praha 8 (1. kolo)", "description": "", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-21T00:00:00+02:00", @@ -69,7 +77,8 @@ "all_day": true, "summary": "Volba 7.\u201312. pozice - MS Praha 8 (2. kolo)", "description": "", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-20T19:00:00+02:00", @@ -77,7 +86,8 @@ "all_day": false, "summary": "P8 - Sch\u016fze ZK", "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k michal.novak@pirati.cz (mailto:michal.novak@pirati.cz)", - "location": "JITSI" + "location": "JITSI", + "url": "" }, { "start": "2022-04-20T18:00:00+02:00", @@ -85,7 +95,8 @@ "all_day": false, "summary": "Sch\u016fzka k volb\u00e1m (KS Praha)", "description": "", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-19T16:00:00+02:00", @@ -93,7 +104,8 @@ "all_day": false, "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)", "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-19T00:00:00+02:00", @@ -101,7 +113,8 @@ "all_day": true, "summary": "Volba 7.\u201312. pozice - MS Praha 8 (1. kolo)", "description": "", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-18T16:00:00+02:00", @@ -109,7 +122,8 @@ "all_day": false, "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)", "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-18T00:00:00+02:00", @@ -117,6 +131,7 @@ "all_day": true, "summary": "Volba p\u0159edsedy MS Praha 8 (1. kolo)", "description": "", - "location": "" + "location": "", + "url": "" } ] diff --git a/tests/calendar_utils/samples/response.json b/tests/calendar_utils/samples/response.json index ec375e012c838a691366138aabd651f76540ef13..3a5c4188a6acbd91aa28de2ef7cc86a658ab9ffd 100644 --- a/tests/calendar_utils/samples/response.json +++ b/tests/calendar_utils/samples/response.json @@ -5,7 +5,8 @@ "all_day": false, "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f", "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec. <br><br>", - "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko" + "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko", + "url": "" }, { "start": "2022-06-22T14:00:00+02:00", @@ -13,7 +14,8 @@ "all_day": false, "summary": "Zastupitelstvo M\u010c Praha 8", "description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html", - "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika" + "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-06-20T16:00:00+02:00", @@ -21,7 +23,8 @@ "all_day": false, "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)", "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-06-06T17:00:00+02:00", @@ -29,7 +32,8 @@ "all_day": false, "summary": "P8 - KDP (Komise pro dopravu)", "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-06-02T18:00:00+02:00", @@ -37,7 +41,8 @@ "all_day": false, "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f", "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec. <br><br>", - "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko" + "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko", + "url": "" }, { "start": "2022-05-28T11:00:00+02:00", @@ -45,7 +50,8 @@ "all_day": false, "summary": "Anthropoid80", "description": "", - "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika" + "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-27T14:00:00+02:00", @@ -53,7 +59,8 @@ "all_day": false, "summary": "Anthropoid80", "description": "", - "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika" + "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-27T09:30:00+02:00", @@ -61,7 +68,8 @@ "all_day": false, "summary": "Anthropoid80 - Rekonstrukce atent\u00e1tu", "description": "", - "location": "Pam\u00e1tn\u00edk Operace Anthropoid\nV Hole\u0161ovi\u010dk\u00e1ch, 182 00 Praha, \u010cesk\u00e1 republika" + "location": "Pam\u00e1tn\u00edk Operace Anthropoid\nV Hole\u0161ovi\u010dk\u00e1ch, 182 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-24T18:00:00+02:00", @@ -69,7 +77,8 @@ "all_day": false, "summary": "Beseda o budouc\u00ed podob\u011b s\u00eddli\u0161t\u011b \u010e\u00e1blice", "description": "Spolek Kr\u00e1sn\u00e9 Kobylisy a M\u00a2 Praha 8 v\u00e1s prostrednictvim radn\u00edho Tom\u00e1Se Hrebika zvou na besedu v Kulturn\u00edm dom\u00e8 L\u00e1dvi.\nCek\u00e1 s\u00eddlist\u00e9 promysleny rozvoj, nebo prom\u00e9na v betonovou dZungli? Jak\u00e9 se tvori pl\u00e1ny na ochranu s\u00eddlist\u00e9 pred nez\u00e1douci\nvystavbou? Pozv\u00e1n\u00ed prijali odborn\u00edci a architekturu a urbanistiku, z\u00e1stupci M\u00e8stsk\u00e9 c\u00e1sti Praha 8 a Magistr\u00e1tu hlavn\u00edho m\u00e8sta Prahy.", - "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika" + "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-23T16:00:00+02:00", @@ -77,7 +86,8 @@ "all_day": false, "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)", "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-05-19T17:00:00+02:00", @@ -85,7 +95,8 @@ "all_day": false, "summary": "Proch\u00e1zka s architekty - Vize s\u00eddli\u0161t\u011b \u010e\u00e1blice", "description": "Kr\u00e1sn\u00e9 Kobylisy por\u00e1daji tak\u00e9 proch\u00e1zku po s\u00eddlisti D\u00e1blice, na niz architekti a urbanist\u00e9 predstav\u00ed moznou budouci podobu ieho neizaj\u00edmav\u00e8 sich mist. Akci zakonc\u00ed pr\u00e1telsk\u00e9 posezen\u00ed v pivovaru Cobolis. Bud'te u toho!", - "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika" + "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-16T16:00:00+02:00", @@ -93,7 +104,8 @@ "all_day": false, "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)", "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-05-09T18:00:00+02:00", @@ -101,7 +113,8 @@ "all_day": false, "summary": "P8: Sch\u016fzka MS", "description": "V\u00edce informac\u00ed na: \nhttps://forum.pirati.cz/viewtopic.php?p=807442#p807442", - "location": "Rezidence ROSA\nSt\u0159elni\u010dn\u00e1 1680/8, 182 00 Praha, \u010cesk\u00e1 republika" + "location": "Rezidence ROSA\nSt\u0159elni\u010dn\u00e1 1680/8, 182 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-09T17:00:00+02:00", @@ -109,7 +122,8 @@ "all_day": false, "summary": "P8 - KDP (Komise pro dopravu)", "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-05-09T00:00:00+02:00", @@ -117,7 +131,8 @@ "all_day": true, "summary": "Volba 13.\u201320. pozice - MS Praha 8 (1. kolo)", "description": "", - "location": "" + "location": "", + "url": "" }, { "start": "2022-05-06T14:00:00+02:00", @@ -125,7 +140,8 @@ "all_day": false, "summary": "Pietn\u00ed akt", "description": "https://www.facebook.com/csol.cz/posts/4955450444502712.", - "location": "Kobylisk\u00e1 st\u0159elnice\nBojasova 13, 182 00 Praha, \u010cesk\u00e1 republika" + "location": "Kobylisk\u00e1 st\u0159elnice\nBojasova 13, 182 00 Praha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-05-05T18:00:00+02:00", @@ -133,7 +149,8 @@ "all_day": false, "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f", "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec. <br><br>", - "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko" + "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko", + "url": "" }, { "start": "2022-05-04T16:00:00+02:00", @@ -141,7 +158,8 @@ "all_day": false, "summary": "P8 - KKV\u010c (Komise pro kulturu a voln\u00fd \u010das)", "description": "Sch\u016fze b\u00fdvaj\u00ed: Libe\u0148sk\u00fd z\u00e1mek, m\u00edstnost \u010d. 2, v dob\u011b pandemie online<br><br>kontaktn\u00ed osoba: <a href=\"https://praha8.pirati.cz/lide/martin-stanek/\">Martin Stan\u011bk</a>\u00a0-\u00a0<a href=\"mailto:Martin.Stanek@pirati.cz\">Martin.Stanek@pirati.cz</a>\u00a0- 775058555<br><br><a href=\"https://www.praha8.cz/Komise-pro-kulturu-a-volny-cas-2018-2022.html\">Str\u00e1nka komise na webu m\u011bstsk\u00e9 \u010d\u00e1sti</a><br><br><a href=\"https://forum.pirati.cz/viewtopic.php?f=943&t=46454\">Z\u00e1pisy a jmenn\u00e9 hlasov\u00e1n\u00ed na f\u00f3ru</a>", - "location": "Libe\u0148sk\u00fd z\u00e1mek, 180 00 Prague-Prague 8, Czechia" + "location": "Libe\u0148sk\u00fd z\u00e1mek, 180 00 Prague-Prague 8, Czechia", + "url": "" }, { "start": "2022-04-27T14:00:00+02:00", @@ -149,7 +167,8 @@ "all_day": false, "summary": "Zastupitelstvo M\u010c Praha 8", "description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html", - "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika" + "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika", + "url": "" }, { "start": "2022-04-25T00:00:00+02:00", @@ -157,7 +176,8 @@ "all_day": true, "summary": "Volba m\u00edstop\u0159edsed\u016f MS Praha 8 (1. kolo)", "description": "", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-21T00:00:00+02:00", @@ -165,7 +185,8 @@ "all_day": true, "summary": "Volba 7.\u201312. pozice - MS Praha 8 (2. kolo)", "description": "", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-20T19:00:00+02:00", @@ -173,7 +194,8 @@ "all_day": false, "summary": "P8 - Sch\u016fze ZK", "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k michal.novak@pirati.cz (mailto:michal.novak@pirati.cz)", - "location": "JITSI" + "location": "JITSI", + "url": "" }, { "start": "2022-04-20T18:00:00+02:00", @@ -181,7 +203,8 @@ "all_day": false, "summary": "Sch\u016fzka k volb\u00e1m (KS Praha)", "description": "", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-19T16:00:00+02:00", @@ -189,7 +212,8 @@ "all_day": false, "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)", "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-19T00:00:00+02:00", @@ -197,7 +221,8 @@ "all_day": true, "summary": "Volba 7.\u201312. pozice - MS Praha 8 (1. kolo)", "description": "", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-18T16:00:00+02:00", @@ -205,7 +230,8 @@ "all_day": false, "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)", "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>", - "location": "" + "location": "", + "url": "" }, { "start": "2022-04-18T00:00:00+02:00", @@ -213,6 +239,7 @@ "all_day": true, "summary": "Volba p\u0159edsedy MS Praha 8 (1. kolo)", "description": "", - "location": "" + "location": "", + "url": "" } ] diff --git a/tests/calendar_utils/test_parser.py b/tests/calendar_utils/test_parser.py index c34fdbedc6d37ef6b367f89ebb3cb1d05af47ccb..b4f9a0743f86cd39dc8a54ff4ea9aeda500b76b5 100644 --- a/tests/calendar_utils/test_parser.py +++ b/tests/calendar_utils/test_parser.py @@ -18,7 +18,7 @@ def test_split_events(sample_response, sample_future_events, sample_past_events) @pytest.mark.freeze_time("2022-05-13") -def test_split_dist_list(sample_events, sample_future_events, sample_past_events): +def test_split_dict_list(sample_events, sample_future_events, sample_past_events): past_events, future_events = split_event_dict_list(sample_events) assert sample_past_events == past_events assert sample_future_events == future_events