mirror of
https://github.com/lucaspalomodevelop/eventcally.git
synced 2026-03-13 00:07:22 +00:00
Merge pull request #401 from eventcally/issues/400
Bugfix iCalendar Recurrency Rule #400
This commit is contained in:
commit
d544557bdd
@ -5,6 +5,7 @@ import icalendar
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from flask import url_for
|
||||
from flask_babelex import format_date, format_time, gettext
|
||||
from icalendar.prop import vDDDLists
|
||||
from sqlalchemy import and_, case, func, or_
|
||||
from sqlalchemy.orm import aliased, contains_eager, defaultload, joinedload, lazyload
|
||||
from sqlalchemy.sql import extract
|
||||
@ -530,9 +531,23 @@ def populate_ical_event_with_datish(
|
||||
ical_event.add("dtstart", start)
|
||||
|
||||
if recurrence_rule:
|
||||
ical_event.add(
|
||||
"rrule", icalendar.vRecur.from_ical(recurrence_rule.replace("RRULE:", ""))
|
||||
)
|
||||
recc_lines = recurrence_rule.splitlines()
|
||||
|
||||
for recc_line in recc_lines:
|
||||
recc_line_parts = recc_line.split(":", 1)
|
||||
|
||||
if len(recc_line_parts) != 2: # pragma: no cover
|
||||
continue
|
||||
|
||||
recc_key, recc_value = recc_line_parts
|
||||
recc_key_lower = recc_key.lower()
|
||||
|
||||
if recc_key_lower == "rrule":
|
||||
ical_event.add("rrule", icalendar.vRecur.from_ical(recc_value))
|
||||
elif recc_key_lower == "exdate":
|
||||
ical_event.add("exdate", vDDDLists.from_ical(recc_value))
|
||||
elif recc_key_lower == "rdate":
|
||||
ical_event.add("rdate", vDDDLists.from_ical(recc_value))
|
||||
|
||||
if datish.end and datish.end > datish.start:
|
||||
end = datish.end.astimezone(berlin_tz)
|
||||
@ -576,8 +591,11 @@ def create_ical_events_for_event(event: Event) -> list: # list[icalendar.Event]
|
||||
result = list()
|
||||
|
||||
for date_definition in event.date_definitions:
|
||||
ical_event = create_ical_event_for_date_definition(date_definition)
|
||||
result.append(ical_event)
|
||||
try:
|
||||
ical_event = create_ical_event_for_date_definition(date_definition)
|
||||
result.append(ical_event)
|
||||
except Exception as e: # pragma: no cover
|
||||
app.logger.exception(e)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ const OrganizerRead = {
|
||||
</div>
|
||||
|
||||
<b-list-group class="mt-4">
|
||||
<b-list-group-item :href="'/eventdates?organizer_id=' + organizer.organization.id">
|
||||
<b-list-group-item :href="'/eventdates?organizer_id=' + organizer.id">
|
||||
<i class="fa fa-fw fa-list"></i>
|
||||
{{ $t("shared.models.event.listName") }}
|
||||
</b-list-group-item>
|
||||
|
||||
@ -273,7 +273,10 @@ def test_get_events_fulltext(
|
||||
|
||||
def test_create_ical_events_for_event(client, app, db, utils, seeder):
|
||||
user_id, admin_unit_id = seeder.setup_base()
|
||||
event_id = seeder.create_event(admin_unit_id)
|
||||
event_id = seeder.create_event(
|
||||
admin_unit_id,
|
||||
recurrence_rule="RRULE:FREQ=DAILY;COUNT=10\nEXDATE:20300102T000000,20300104T000000\nRDATE:20300103T000000,20300105T000000",
|
||||
)
|
||||
|
||||
with app.app_context():
|
||||
from project.models import Event, EventStatus, Location
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user