Skip to content

Commit 3515791

Browse files
Merge branch 'development' into starred-google-calander-fix
2 parents 179037b + 1ff4afa commit 3515791

File tree

5 files changed

+84
-13
lines changed

5 files changed

+84
-13
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import logging
2+
from argparse import ArgumentParser
3+
from urllib.parse import urljoin, urlparse
4+
5+
import requests
6+
from django.conf import settings
7+
from django.core.management.base import BaseCommand, CommandError
8+
9+
from pretalx.event.models import Event
10+
11+
12+
# The name of the Video container
13+
VIDEO_CONTAINER_NAME = 'eventyay-video'
14+
logger = logging.getLogger(__name__)
15+
16+
17+
def replace_hostname(url: str) -> str:
18+
'''
19+
Replace the hostname of the URL with the name of the Video container.
20+
'''
21+
parsed_url = urlparse(url)
22+
parsed_url = parsed_url._replace(netloc=VIDEO_CONTAINER_NAME, scheme='http')
23+
return parsed_url.geturl()
24+
25+
26+
def push_to_video_site(event: Event):
27+
url = urljoin(event.venueless_settings.url, 'schedule_update')
28+
logger.info('Saved video API URL: %s', url)
29+
# In development with Docker, we use fake domain, so the URL can not reach the video site,
30+
# we need to replace the hostname.
31+
url = replace_hostname(url)
32+
# I haven't found the page to retrieve this token.
33+
# In development, I get it from ShortToken model in Video container.
34+
token = event.venueless_settings.token
35+
logger.info('To push schedule to rewritten video API URL instead: %s', url)
36+
post_data = {
37+
'domain': event.custom_domain or settings.SITE_URL,
38+
'event': event.slug,
39+
}
40+
logger.info('With post data: %s', post_data)
41+
logger.info('Authenticated with token: %s', token)
42+
response = requests.post(
43+
url,
44+
json=post_data,
45+
headers={
46+
'Authorization': f'Bearer {token}',
47+
},
48+
)
49+
if not response.ok:
50+
logger.error('Failed to push schedule to video site: %s', response.text)
51+
raise CommandError(f'Failed to push schedule to video site: {response.text}')
52+
logger.info('Response: %s', response.content)
53+
logger.info('Schedule pushed to video site successfully.')
54+
55+
56+
class Command(BaseCommand):
57+
'''
58+
Inform the video site that the schedule has been updated.
59+
'''
60+
def add_arguments(self, parser: ArgumentParser):
61+
parser.add_argument('event_slug', type=str)
62+
63+
def handle(self, event_slug: str, **options):
64+
event = Event.objects.get(slug=event_slug)
65+
push_to_video_site(event)
66+

src/pretalx/agenda/templates/agenda/schedule.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
</a>
2525
<hr>
2626
{% for exporter in exporters %}
27-
<a class="dropdown-item" href="{{ exporter.urls.base }}" role="menuitem" tabindex="-1">
27+
<a class="dropdown-item" href="{{ exporter.urls.base }}" role="menuitem" tabindex="-1" target="_blank">
2828
{% if exporter.icon|slice:":3" == "fa-" %}
2929
<span class="fa {{ exporter.icon }} export-icon"></span>
3030
{% else %}

src/pretalx/agenda/views/schedule.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,14 +126,10 @@ def get_context_data(self, **kwargs):
126126

127127
def get_exporter(self, public=True):
128128
url = resolve(self.request.path_info)
129-
130-
calendar_exports = ["export.google-calendar", "export.my-google-calendar", "export.other-calendar", "export.my-other-calendar"]
131129
if url.url_name in ["export", "export-tokenized"]:
132130
exporter = url.kwargs.get("name") or unquote(
133131
self.request.GET.get("exporter")
134132
)
135-
elif url.url_name in calendar_exports:
136-
exporter = url.url_name.replace("export.", "")
137133
else:
138134
exporter = url.url_name
139135

@@ -387,7 +383,7 @@ def get(self, request, *args, **kwargs):
387383
if token_status is True:
388384
token = existing_token
389385
generate_new_token = False
390-
386+
391387
# Generate new token if needed
392388
if generate_new_token:
393389
token = self.generate_ics_token(request.user.id)

src/pretalx/schedule/signals.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,22 +81,31 @@ def register_my_json_exporter(sender, **kwargs):
8181

8282
return MyFrabJsonExporter
8383

84+
8485
@receiver(register_data_exporters, dispatch_uid="exporter_builtin_google_calendar")
8586
def register_google_calendar_exporter(sender, **kwargs):
8687
from .exporters import GoogleCalendarExporter
88+
8789
return GoogleCalendarExporter
8890

89-
@receiver(register_my_data_exporters, dispatch_uid="exporter_builtin_my_google_calendar")
90-
def register_my_google_calendar_exporter(sender, **kwargs):
91-
from .exporters import MyGoogleCalendarExporter
92-
return MyGoogleCalendarExporter
9391

9492
@receiver(register_data_exporters, dispatch_uid="exporter_builtin_webcal")
9593
def register_webcal_exporter(sender, **kwargs):
9694
from .exporters import WebcalExporter
95+
9796
return WebcalExporter
9897

98+
99+
@receiver(register_my_data_exporters, dispatch_uid="exporter_builtin_my_google_calendar")
100+
def register_my_google_calendar_exporter(sender, **kwargs):
101+
from .exporters import MyGoogleCalendarExporter
102+
103+
return MyGoogleCalendarExporter
104+
105+
99106
@receiver(register_my_data_exporters, dispatch_uid="exporter_builtin_my_webcal")
100107
def register_my_webcal_exporter(sender, **kwargs):
101108
from .exporters import MyWebcalExporter
102-
return MyWebcalExporter
109+
110+
return MyWebcalExporter
111+

src/pretalx/settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ def merge_csp(*options, config=None):
229229
"disable_existing_loggers": False,
230230
"formatters": {
231231
"default": {
232-
"format": "%(levelname)s %(asctime)s %(name)s %(module)s %(message)s"
232+
"format": "%(levelname)s %(asctime)s %(module)s %(message)s"
233233
}
234234
},
235235
"handlers": {
@@ -279,7 +279,7 @@ def merge_csp(*options, config=None):
279279
# We deliberately want to collect DEBUG logs for our app from production,
280280
# because some bugs are only exposed in production environment.
281281
"level": "DEBUG",
282-
"propagate": True,
282+
"propagate": False,
283283
},
284284
},
285285
}

0 commit comments

Comments
 (0)