feat: Aligns to existing schema

This commit is contained in:
Vincent Mahnke 2026-01-04 13:53:50 +01:00
commit e25ebd2086
Signed by: ViMaSter
GPG key ID: 6D787326BA7D6469

View file

@ -240,25 +240,20 @@ class CongressScheduleJSONView(views.APIView):
subs = SubEvent.objects.filter(event=ev).order_by('date_from') subs = SubEvent.objects.filter(event=ev).order_by('date_from')
schedule = { schedule = {
"generator": {"name": "pretix-congressschedule", "version": __version__}, "generator": {"name": "voc/schedule/hackertours", "version": __version__},
"url": None,
"version": f"{ev.slug}-v1", "version": f"{ev.slug}-v1",
"conference": { "conference": {
"title": (ev.name.localize(ev.settings.locale) if hasattr(ev.name, 'localize') else str(ev.name)) or str(ev.slug),
"acronym": f"{organizer}_{event}".lower(), "acronym": f"{organizer}_{event}".lower(),
"title": (ev.name.localize(ev.settings.locale) if hasattr(ev.name, 'localize') else str(ev.name)) or str(ev.slug),
"start": None, "start": None,
"end": None, "end": None,
"days": None, "daysCount": None,
"time_zone_name": None, "timeslot_duration": "00:15",
"time_zone_name": "Europe/Berlin",
}, },
"days": [] "days": []
} }
try:
schedule["url"] = request.build_absolute_uri()
except Exception:
pass
all_starts = [se.date_from for se in subs if se.date_from] all_starts = [se.date_from for se in subs if se.date_from]
all_ends = [se.date_to for se in subs if se.date_to] all_ends = [se.date_to for se in subs if se.date_to]
if all_starts: if all_starts:
@ -339,17 +334,15 @@ class CongressScheduleJSONView(views.APIView):
day_obj = { day_obj = {
"index": day_index, "index": day_index,
"date": day_date.isoformat() if day_date else None, "date": day_date.isoformat() if day_date else None,
"start": day_start, "day_start": day_start,
"end": day_end, "day_end": day_end,
"rooms": [] "rooms": []
} }
day_obj["rooms"] = {}
for room_name, events_in_room in sorted(rooms.items(), key=lambda x: x[0].lower()): for room_name, events_in_room in sorted(rooms.items(), key=lambda x: x[0].lower()):
room_obj = { room_events = []
"name": room_name,
"guid": str(uuid.uuid5(uuid.NAMESPACE_DNS, f"room:{organizer}:{event}:{room_name}")),
"events": []
}
for se in sorted(events_in_room, key=lambda s: s.date_from or 0): for se in sorted(events_in_room, key=lambda s: s.date_from or 0):
dur_txt = '00:00' dur_txt = '00:00'
@ -372,21 +365,29 @@ class CongressScheduleJSONView(views.APIView):
ev_obj = { ev_obj = {
"id": se.pk, "id": se.pk,
"guid": str(uuid.uuid5(uuid.NAMESPACE_DNS, f"subevent:{ev.pk}:{se.pk}")), "guid": str(uuid.uuid5(uuid.NAMESPACE_DNS, f"subevent:{ev.pk}:{se.pk}")),
"room": room_name,
"title": title,
"subtitle": "",
"type": "subevent",
"date": se.date_from.isoformat() if se.date_from else None, "date": se.date_from.isoformat() if se.date_from else None,
"start": se.date_from.strftime('%H:%M') if se.date_from else None, "start": se.date_from.strftime('%H:%M') if se.date_from else None,
"duration": dur_txt, "duration": dur_txt,
"abstract": "", "room": room_name,
"slug": f"{base}-{second}", "slug": f"{base}-{second}",
"track": slugify(room_name) or "general", "url": "TODO",
"language": str(lang or "deen"), "title": title,
"subtitle": "",
"track": "Hackertours",
"type": "Tour",
"language": str(lang or "de, en"),
"abstract": se.description.localize(ev.settings.locale) if hasattr(se.description, 'localize') else str(se.description) or "",
"persons": [],
"links": [
{
"url": "TODO",
"title": "TODO",
}
],
} }
room_obj["events"].append(ev_obj) room_events.append(ev_obj)
day_obj["rooms"].append(room_obj) day_obj["rooms"][room_name] = room_events
schedule["days"].append(day_obj) schedule["days"].append(day_obj)
@ -395,7 +396,6 @@ class CongressScheduleJSONView(views.APIView):
content_type='application/json; charset=utf-8' content_type='application/json; charset=utf-8'
) )
class HackertoursMarkdownView(views.APIView): class HackertoursMarkdownView(views.APIView):
def get(self, request, organizer, event, *args, **kwargs): def get(self, request, organizer, event, *args, **kwargs):
try: try: