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 ++++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) (limited to 'halfnarp2.py') 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: -- cgit v1.2.3