1+ from __future__ import annotations
2+
3+ from typing import Self
4+
15import graphene
26from django .conf import settings
37from django .http import HttpRequest
@@ -22,6 +26,8 @@ class ProgramLinkType(graphene.Enum):
2226 FEEDBACK = "FEEDBACK"
2327 CALENDAR = "CALENDAR"
2428 OTHER = "OTHER"
29+ GUIDE_V2_LIGHT = "GUIDE_V2_LIGHT"
30+ GUIDE_V2_EMBEDDED = "GUIDE_V2_EMBEDDED"
2531
2632
2733# This is an interim solution until Program V2 has an editing UI.
@@ -31,11 +37,13 @@ class ProgramLinkType(graphene.Enum):
3137 ProgramLinkType .RESERVATION : "Reserve seats" ,
3238 ProgramLinkType .TICKETS : "Buy tickets" ,
3339 ProgramLinkType .RECORDING : "Watch recording" ,
34- ProgramLinkType .MATERIAL : "Katso esitysmateriaalit " ,
40+ ProgramLinkType .MATERIAL : "View presentation materials " ,
3541 ProgramLinkType .REMOTE : "Participate remotely" ,
3642 ProgramLinkType .FEEDBACK : "Give feedback" ,
3743 ProgramLinkType .OTHER : "Link" ,
3844 ProgramLinkType .CALENDAR : "Add to calendar" ,
45+ ProgramLinkType .GUIDE_V2_LIGHT : "This program in Kompassi" ,
46+ ProgramLinkType .GUIDE_V2_EMBEDDED : "This program at the event website" ,
3947 },
4048 fi = {
4149 ProgramLinkType .SIGNUP : "Ilmoittaudu" ,
@@ -47,6 +55,8 @@ class ProgramLinkType(graphene.Enum):
4755 ProgramLinkType .FEEDBACK : "Anna palautetta" ,
4856 ProgramLinkType .OTHER : "Linkki" ,
4957 ProgramLinkType .CALENDAR : "Lisää kalenteriin" ,
58+ ProgramLinkType .GUIDE_V2_LIGHT : "Tämä ohjelma Kompassissa" ,
59+ ProgramLinkType .GUIDE_V2_EMBEDDED : "Tämä ohjelma tapahtuman web-sivuilla" ,
5060 },
5161 sv = {
5262 ProgramLinkType .SIGNUP : "Anmäl dig" ,
@@ -58,6 +68,8 @@ class ProgramLinkType(graphene.Enum):
5868 ProgramLinkType .FEEDBACK : "Ge feedback" ,
5969 ProgramLinkType .OTHER : "Länk" ,
6070 ProgramLinkType .CALENDAR : "Lägg till i kalendern" ,
71+ ProgramLinkType .GUIDE_V2_LIGHT : "Detta program i programguiden" ,
72+ ProgramLinkType .GUIDE_V2_EMBEDDED : "Detta program på evenemangets webbsida" ,
6173 },
6274)
6375
@@ -75,11 +87,21 @@ def from_program(
7587 link_type : ProgramLinkType ,
7688 language : str = DEFAULT_LANGUAGE ,
7789 include_expired : bool = False ,
78- ):
90+ ) -> Self | None :
7991 """
8092 TODO should this be pushed into the Program model?
8193 TODO should this be cached? (probably not, as some links are time-sensitive)
94+
95+ params:
96+ event - performance optimization to avoid O(n) queries
8297 """
98+ event = program .event
99+ meta = event .program_v2_event_meta
100+
101+ if meta is None :
102+ # This should not happen, but appease the type checker
103+ return None
104+
83105 link_type_str = link_type .value # type: ignore[attr-defined]
84106 title_specifier = ""
85107 link_annotation = f"internal:links:{ link_type_str .lower ()} "
@@ -106,13 +128,17 @@ def from_program(
106128 href = (
107129 program .annotations .get (
108130 link_annotation ,
109- settings .KOMPASSI_V2_BASE_URL
110- + f"/events/{ program .event .slug } /programs/{ program .slug } /feedback" ,
131+ settings .KOMPASSI_V2_BASE_URL + f"/events/{ event .slug } /programs/{ program .slug } /feedback" ,
111132 )
112133 if program .is_accepting_feedback
113134 else ""
114135 )
115-
136+ case ProgramLinkType .GUIDE_V2_LIGHT :
137+ href = settings .KOMPASSI_V2_BASE_URL + f"/{ event .slug } /programs/{ program .slug } "
138+ case ProgramLinkType .GUIDE_V2_EMBEDDED :
139+ href = program .annotations .get (link_annotation , "" )
140+ if not href and meta .guide_v2_embedded_url :
141+ href = meta .guide_v2_embedded_url + "#prog:" + program .slug
116142 case _:
117143 href = program .annotations .get (link_annotation , "" )
118144
0 commit comments