From 95ae3c51cf05425baf739919af9938608f62ad64 Mon Sep 17 00:00:00 2001 From: Dirk Engling Date: Tue, 4 Nov 2025 15:38:25 +0000 Subject: Add support for the new pretalx API --- halfnarp2.py | 47 ++++++++++++++++++++++++----------------------- scripts/gen_css_tables.py | 2 +- static/fullnarp.html | 28 ++++++++++++++-------------- static/fullnarp.js | 4 ++-- 4 files changed, 41 insertions(+), 40 deletions(-) diff --git a/halfnarp2.py b/halfnarp2.py index 0cc3906..5ac9405 100755 --- a/halfnarp2.py +++ b/halfnarp2.py @@ -121,14 +121,14 @@ def get_preferences(public_uid): def filter_keys_halfnarp(session): abstract_html = markdown.markdown(session["abstract"], enable_attributes=False) abstract_clean_html = Sanitizer().sanitize(abstract_html) - slot = session["slot"] + slot = next(iter(session["slots"]), {}) return { "title": session.get("title", "!!! NO TITLE !!!"), "duration": 60 * session.get("duration", 40), "event_id": session["code"], "language": session.get("content_locale", "de"), - "track_id": session["track_id"], + "track_id": session["track"], "speaker_names": ", ".join( [speaker.get("name", "unnamed") for speaker in session.get("speakers", {})] ), @@ -141,7 +141,7 @@ def filter_keys_halfnarp(session): def filter_keys_fullnarp(session, speakers): abstract_html = markdown.markdown(session["abstract"], enable_attributes=False) abstract_clean_html = Sanitizer().sanitize(abstract_html) - slot = session["slot"] + slot = next(iter(session["slots"]), {}) speaker_info = [] for speaker in session.get("speakers", {}): @@ -181,7 +181,7 @@ def filter_keys_fullnarp(session, speakers): "duration": 60 * session.get("duration", 40), "event_id": session["code"], "language": session.get("content_locale", "de"), - "track_id": session["track_id"], + "track_id": session["track"], "speakers": speaker_info, "speaker_names": ", ".join( [speaker.get("name", "unnamed") for speaker in session.get("speakers", {})] @@ -194,27 +194,28 @@ def filter_keys_fullnarp(session, speakers): def fetch_talks(config): sess = requests.Session() - - response = sess.get( - config["pretalx-api-url"] + "/submissions/?format=json&limit=20000", - stream=True, - headers={"Authorization": "Token " + config["pretalx-token"]}, - ) - # with open('dump.txt', mode='wb') as localfile: - # localfile.write(response.content) - talks_json = json.loads(response.text) - - response = sess.get( - config["pretalx-api-url"] + "/speakers/?format=json&limit=20000", - stream=True, - headers={"Authorization": "Token " + config["pretalx-token"]}, - ) - speakers_json = json.loads(response.text) - speakers = dict((speaker["code"], speaker) for speaker in speakers_json["results"]) + headers = {'Accept': 'application/json', + 'Authorization': "Token " + config['pretalx-token'], + 'Pretalx-Version' : 'v1'} + + speakers_result = [] + url = config['pretalx-api-url'] + '/speakers/?format=json&limit=20000' + while url: + response = sess.get(url, stream=True, headers=headers).json() + speakers_result.extend(response['results']) + url = response['next'] + speakers = { speaker['code']: speaker for speaker in speakers_result } + + session_results = [] + url = config['pretalx-api-url'] + '/submissions/?expand=speakers,slot,speakers.availabilities&format=json&limit=20000' + while url: + response = sess.get(url, stream=True, headers=headers).json() + session_results.extend(response['results']) + url = response['next'] sessions = [ filter_keys_halfnarp(submission) - for submission in talks_json["results"] + for submission in session_results if submission["state"] == "confirmed" and not "non-public" in submission.get("tags", {}) ] @@ -223,7 +224,7 @@ def fetch_talks(config): sessions = [ filter_keys_fullnarp(submission, speakers) - for submission in talks_json["results"] + for submission in session_results if submission["state"] == "confirmed" or submission["state"] == "accepted" ] with open("var/talks_local_fullnarp", mode="w", encoding="utf8") as sessionsfile: diff --git a/scripts/gen_css_tables.py b/scripts/gen_css_tables.py index 4bc5ea8..0eb88f4 100755 --- a/scripts/gen_css_tables.py +++ b/scripts/gen_css_tables.py @@ -8,7 +8,7 @@ start_y = 400 starttime = 10 endtime = 28 -rooms = 3 +rooms = 4 days = 4 columns = days * rooms # how many columns does event_gap = { 'large': 5, 'medium': 3, 'small': 2 } # how much is an event shorter than what the grid would allow in px diff --git a/static/fullnarp.html b/static/fullnarp.html index a00f89e..3b86d6c 100644 --- a/static/fullnarp.html +++ b/static/fullnarp.html @@ -3,8 +3,8 @@ FULLnarp web scheduling helper app - - + +