Repository navigation
Phase 3: the Archive #213
Description
Phase 3: the Archive. Closes #170.
The site publishes the association's present and almost none of its past: 285 events on Meetup across 19 years, 9403 confirmed RSVPs, 88 venues, and 89 videos on our own channel, of which the site showed nothing.
The models are four:
- An event is a day, or the two or three days a large edition runs.
- A talk is content, with its speakers, its video, and its slides. It stops being the same field as the grid slot that places it, which is why the site could not say what a person has given.
- A person is an identity a talk can point at, instead of a name typed again every year.
- A photograph belongs to the day, and to a talk when it shows one.
All of this is provisional. It comes from a provisional analysis of the sources we hold:
- The Meetup export of both groups, Python Barcelona and PyLadies BCN.
- The X exports of @PyBCN and @DZPM, which is where the photographs of a day are.
- The playlists of our own channel, Python Barcelona on YouTube.
- PyData Barcelona 2017 on pyvideo, the only record left of that edition.
- The snapshots of the old site this repository already keeps frozen under
static/archives/.
Each one turned out to hold a different part of the story, and none of them is complete. The shape below will change as the implementation runs into what the sources actually say, and it will change again for usability once there is something to use.
The work comes as five pull requests, in this order because each one needs the last: #214 the tools, #215 the schedule model, #216 the monthly meetups, #217 the listings, and #218 the photographs and the videos. Each is stacked on the one before, so each shows only its own change, and it moves to edition when the one before it merges. This issue closes with the last one.
PR #214: the tools
- One definition of normalized text, so an imported string is consistent by construction and not by a model behaving well
- A check that verifies every imported title and description against its source, with seven recorded extraction runs as its test, one of which has to fail
- An importer for each source: the Meetup export, the talks its announcements carry, the videos of our channel, and one event day of an X thread
- An inventory of our channel, so a video that reaches no page fails a check instead of waiting for somebody to notice
- The extraction prompt under version control, with the reason it says nothing about typography
- The self-tests run in CI
PR #215: the schedule model
- The schedule entry splits into a talk and a slot, across the eight programmes that still mixed them
- The built schedule of those pages does not change, which is what the conversion is checked against
- A check refuses the old schedule model, so it cannot come back
PR #216: the monthly meetups
- 268 pages for the monthly meetups, each with its date, its venue, and how many people registered
- 607 talks, read out of 19 years of announcements written in three different formats
- Three programmes recovered that existed nowhere: 2019 from a photograph of the printed sheets, 2018 from the snapshot this repository froze, PyData 2017 from pyvideo
PR #217: the listings and a page per person
-
/events/lists every edition by year,/talks/is new, and/people/comes back as a listing and as a page per person - 372 person records, so a talk credits an identity and not a name typed again
PR #218: the photographs and the videos
- 117 videos reach the talk they record: 88 of the 89 on our own channel, and the 29 of PyData 2017 that pyvideo kept
- 235 photographs of our own threads, 107 of which name the talk they show
The line on personal data
- Speakers accepted, in the proposal form, to appear in photographs and on social media. Attendees did not: no attendee gets a page, a name, or a count tied to their identity
- Every person the archive credits gets a published page at
/people/<id>/, which is what Stop publishing the person and sponsor pages until the Archive gives them content #201 stopped until the Archive gave those pages something to say. It now has: a page lists the talks that person gave, the events they were at, and the photographs of their talks. Six records are credited by nothing yet and keep their page anyway, because taking it away would sort the people of the archive into the ones with a page and the ones without, on a fact about the import and not about them. The sponsor pages stay off - The page of a recorded talk embeds its video in a
youtube-nocookie.comframe, so Google sees a reader's IP address and that they opened that page, before they press play and whatever they do next. The privacy policy and the legal notice both say so, and under every player there is the plain link to the same video on youtube.com - A new person record holds a name and nothing else: 240 of them hold only the name their own announcement published, and three also hold the handle that announcement credited
- Six person records that no page of the archive credits were removed, each with its reason written in the commit
- One video of the channel belongs to no event of ours, so no page of the archive carries it
- A photograph the association only shared is never imported, because its copyright is somebody else's
- How to ask for a photograph to come down is written in LICENSING.md
Activity
DZPM commentedon Oct 16, 2026
Done, and live. The five pull requests of this issue merged this morning: #214 the tools, #215 the schedule model, #216 the monthly meetups, #217 the listings and the person pages, and #218 the photographs and the videos.
On pybcn.org now: 281 events on /events/, 607 talks on /talks/, and 372 people on /people/, each with a page of their own. The oldest is the meetup of 29 November 2007.
One figure in the body above was wrong and is corrected: the photographs of our own threads are 235, not 231. Counted two ways, as 235 distinct file values in the front matter and as 235 figure elements in the built gallery pages.
This also closes #170, which asked for the photographs of the larger events.
Not in this issue, and next: the home page rebuilt so it reaches the archive, a search engine, and /sponsors/ reading the sponsor directory instead of the list by hand it had drifted from by 25 sponsors.