Skip to content

Commit b66e013

Browse files
committed
Update configurations and references for 2023
1 parent 83f64f4 commit b66e013

File tree

7 files changed

+25
-127
lines changed

7 files changed

+25
-127
lines changed

.github/workflows/deploy.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ name: Deploy to static server
33
on:
44
push:
55
branches:
6-
- ep2024
7-
- ep2025
6+
- ep2023
87
schedule:
98
- cron: "*/10 * * * *" # every 10 minutes
109
workflow_dispatch:

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Variables for the project
22
# =========================
3-
CONFERENCE ?= ep2025
3+
CONFERENCE ?= ep2023
44
DATA_DIR ?= ./data/public/$(CONFERENCE)/
55

66
# Variables for remote host

README.md

Lines changed: 6 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,114 +1,9 @@
11
# 🎤 programapi
22

3-
This project powers the **EuroPython 2025** website, Discord bot, and internal bot 🦜 by downloading, transforming, and serving clean, structured JSON files for sessions, speakers, and the schedule, all pulled from Pretalx.
3+
> [!TIP]
4+
> This Program API as we know it was not implemented until 2024. The data might be incomplete or not fully accurate.
45
5-
Built for transparency. Designed for reuse. Optimized for EuroPython.
6-
7-
---
8-
9-
## 🚀 What This Project Does
10-
11-
1. **Downloads** submission and speaker data from Pretalx.
12-
2. **Transforms** raw data:
13-
- Removes private/irrelevant fields
14-
- Normalizes formats
15-
- Adds computed fields (e.g. URLs, delivery mode)
16-
3. **Serves** the transformed JSON files via a static API.
17-
18-
---
19-
20-
## ⚙️ Installation
21-
22-
1. **Clone the repo**
23-
```bash
24-
git clone https://github.com/EuroPython/programapi.git
25-
cd programapi
26-
```
27-
28-
2. **Install [uv](https://docs.astral.sh/uv/getting-started/installation/)** (fast Python package manager)
29-
30-
3. **Create a Python 3.13 virtual environment**
31-
```bash
32-
uv venv -p 3.13
33-
```
34-
35-
4. **Install dev dependencies**
36-
```bash
37-
make dev
38-
```
39-
40-
5. **Enable pre-commit hooks**
41-
```bash
42-
make pre-commit
43-
```
44-
45-
---
46-
47-
## 🛠️ Configuration
48-
49-
You can update the event year or shortname in [`src/config.py`](src/config.py).
50-
51-
Also, create a `.env` file in the project root and set:
52-
53-
```env
54-
PRETALX_TOKEN=your_api_token_here
55-
```
56-
57-
(Yes, Pretalx has rate limits. Please be nice. 🤪)
58-
59-
---
60-
61-
## 📦 Usage
62-
63-
- Run the **entire pipeline**:
64-
```bash
65-
make all
66-
```
67-
68-
- Run only the **download step**:
69-
```bash
70-
make download
71-
```
72-
73-
- Run only the **transformation step**:
74-
```bash
75-
make transform
76-
```
77-
78-
- (Optional) **Exclude components**:
79-
```bash
80-
make all EXCLUDE="schedule youtube"
81-
```
82-
83-
---
84-
85-
## 🌐 API Endpoints
86-
87-
Hosted at:
88-
89-
```
90-
https://static.europython.eu/programme/ep2025/releases/current
91-
```
92-
93-
| Endpoint | Description |
94-
|-----------------------------------------------------------------------------------------------------|-------------------------------|
95-
| [`/speakers.json`](https://static.europython.eu/programme/ep2025/releases/current/speakers.json) | List of confirmed speakers |
96-
| [`/sessions.json`](https://static.europython.eu/programme/ep2025/releases/current/sessions.json) | List of confirmed sessions |
97-
| [`/schedule.json`](https://static.europython.eu/programme/ep2025/releases/current/schedule.json) | Latest conference schedule |
98-
99-
---
100-
101-
## 📖 Schema Documentation
102-
103-
Looking for field definitions and examples?
104-
Check out the 👉 [`data/examples/README.md`](data/examples/README.md) for a full schema reference with example payloads and explanations.
105-
106-
---
107-
108-
## 💬 Questions? Feedback?
109-
110-
Feel free to open an issue or reach us at [[email protected]](mailto:[email protected]). We love contributors 💜
111-
112-
---
113-
114-
📅 Last updated for: **EuroPython 2025**
6+
## Accessing the Program API
7+
- https://static.europython.eu/programme/ep2023/releases/current/speakers.json
8+
- https://static.europython.eu/programme/ep2023/releases/current/sessions.json
9+
- https://static.europython.eu/programme/ep2023/releases/current/schedule.json

src/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66

77
class Config:
8-
event = "europython-2025"
9-
event_dir_name = "ep2025"
8+
event = "europython-2023"
9+
event_dir_name = "ep2023"
1010
api_version = "v1"
1111

1212
project_root = Path(__file__).resolve().parents[1]

src/misc.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,18 @@
22

33

44
class SpeakerQuestion:
5-
affiliation = "Company/Organization/Educational Institution"
6-
homepage = "Social (Homepage)"
7-
twitter = "Social (X/Twitter)"
5+
affiliation = "Company / Institute"
6+
homepage = "Homepage"
7+
twitter = "Twitter / Mastodon handle(s)"
88
bluesky = "Social (Bluesky)"
9-
linkedin = "Social (LinkedIn)"
10-
mastodon = "Social (Mastodon)"
11-
gitx = "Social (GitHub/GitLab)"
9+
linkedin = "LinkedIn"
10+
mastodon = "Twitter / Mastodon handle(s)"
11+
gitx = "Github/Gitlab"
1212

1313

1414
class SubmissionQuestion:
15-
outline = "Outline"
16-
tweet = "Abstract as a short post (150 character max)"
17-
delivery = "My presentation can be delivered in-person"
15+
tweet = "Abstract as a tweet / toot"
16+
delivery = "My presentation can be delivered"
1817
level = "Expected audience expertise"
1918

2019

@@ -41,14 +40,17 @@ class Room(Enum):
4140
club_h = "Club H"
4241

4342
# Conference rooms
44-
forum_hall = "Forum Hall"
43+
forum_hall = "PyCharm (Forum Hall)"
4544
terrace_2a = "Terrace 2A"
4645
terrace_2b = "Terrace 2B"
4746
north_hall = "North Hall"
4847
south_hall_2a = "South Hall 2A"
4948
south_hall_2b = "South Hall 2B"
5049
exhibit_hall = "Exhibit Hall"
5150

51+
# Other rooms
52+
open_space = "Open Space"
53+
5254

5355
class EventType(Enum):
5456
SESSION = "session"

src/models/europython.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ def extract_answers(cls, values) -> dict:
349349
values["tweet"] = answer.answer_text
350350

351351
if answer.question_text == SubmissionQuestion.delivery:
352-
if "Yes" in answer.answer_text:
352+
if "in-person" in answer.answer_text:
353353
values["delivery"] = "in-person"
354354
else:
355355
values["delivery"] = "remote"

src/models/pretalx.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ def process_values(cls, values) -> dict:
111111

112112
last_slot = PretalxSlot.model_validate(values["slots"][-1])
113113
values["end"] = last_slot.end
114+
if values["end"] is None:
115+
print(f"Warning: end time is None for submission {values['code']}")
114116

115117
return values
116118

0 commit comments

Comments
 (0)