Conference updates - #454
Merged
Merged
Conversation
Enrichment level: full Triggered: 2026-09-08T10:55:27Z
New year detected Source: https://www.wagtail.space/
Enrichment level: full Triggered: 2026-09-15T11:24:20Z
Source: canonical-csv Triggered: 2026-09-18T14:25:58Z
Enrichment level: quick Triggered: 2026-09-19T10:33:48Z
Source: canonical-csv Triggered: 2026-09-19T13:51:55Z
Enrichment level: quick Triggered: 2026-09-20T10:56:38Z
Enrichment level: full Triggered: 2026-09-22T11:14:32Z
# Conflicts: # _data/archive.yml # _data/conferences.yml
KeyboardInterrupt is not an Exception subclass, so Ctrl+C skipped the pipeline's error logging and exit code. It also escaped the test that simulates it and aborted the whole pytest session halfway.
update_title_mappings ignored its path argument and always wrote the module's own data/titles.yml. The test that passes a temporary file therefore wrote 'ExistingConf: New Variation' into the real mappings (committed since) and re-sorted the file with CRLF line endings. Repo-relative paths under utils/tidy_conf/data/ still resolve relative to the module, so the merge pipeline is unchanged. Files are written with LF endings. The test now uses its temp file and asserts the real titles.yml is untouched. Removes the leaked ExistingConf entry.
Python Nordeste is canonical; PyNE and 'Python Nordeste (PyNE)' map to it, which stops imports from adding a duplicate PyNE entry. PyDay Mexico is canonical, matching the 2017-2019 entries; the 2026 entry is renamed from 'PyDay México: CDMX', which is kept as alt_name.
'PyCon Panamá' and 'PyCon Panama' are the same conference. Add strip_accents/fold_name (NFKD without combining marks) and use them for comparisons only; stored names keep their spelling. - load_title_mappings adds accent-free variants of every variation - tidy_titles compares folded names - is_identical_name and conference_scorer compare folded names Also fixes the tidy_titles check that stripped 'Conference' from an already-lowercased string and so could never match.
write_df_yaml called astype(str) on the cfp column, which turns a missing value into the literal 'nan'. PyCon Germany 2028 ended up with 'cfp: nan' in conferences.yml. - write_df_yaml fills missing CFPs with TBA before converting - the schema maps NaN/'nan'/'' to TBA for cfp and to None for the optional deadlines; rejecting would make sort drop the conference - test_no_nan_deadlines checks every entry in all three data files - PyCon Germany 2028 set to cfp: TBA
Nesting constr()/conint()/condate()/confloat() inside Annotated is
ignored by pydantic v2, so none of these constraints were applied: years
before 1989, out-of-range coordinates and malformed deadlines all
validated. Use StringConstraints/Field metadata instead.
- deadlines accept a date with an optional time; sort_yaml appends
DEFAULT_CFP_TIME to date-only values
- cfp also accepts the TBA words sort_yaml understands, case-insensitive
('nan' is normalised to TBA before the pattern check)
- clean_dates now adds the default time to cfp_ext as well
- PyOhio 2017 had its CFP page URL in cfp_ext; moved to cfp_link
All entries in conferences, archive and legacy validate under the
stricter schema, so sort drops nothing.
fuzzy_match has returned (df_yml, df_remote, report) since #198 and both production importers unpack three values; six pipeline tests still unpacked two and failed with 'too many values to unpack'.
…tion For A→B→A, check_mastodon_migration only noticed the loop once it had already moved back to A, then returned None because the URL had not changed. The loop is now detected before following the hop, so the result is B, as the test written with the feature expects. The integration tests passed start as a string, but sort_data runs tidy_dates before check_links, so start is a date by then; the tests now do the same.
…dels '"cfp_ext" in q' is always False on a pydantic model (iteration yields (name, value) tuples), so split_data never appended DEFAULT_CFP_TIME to extended deadlines. Check the attribute instead. The split_data and sort_by_date_passed tests hard-coded 2026 as 'the future' and started failing once 2026 arrived; freeze time in them.
utils/tidy_conf/data/.tmp/ is gitignored, so in a fresh checkout every code path touching the link cache raised FileNotFoundError: 14 tests failed on a clean clone but passed locally.
With accent-insensitive identity, 'PyCon Panamá' (YAML) and 'PyCon Panama' (remote) took the exact-match path, which keyed the merged row under the remote spelling. The importers drop the YAML conference column and take the name from that index, so the conference was renamed and the bot's data-loss guard would then fail every run. The exact-match path now keys the remote row by the YAML name and records the remote spelling as a titles.yml variation. The importer's normalisation also falls back to the accent-free form so an accented remote name finds a mapping keyed by the plain spelling.
…ration Returning the last account before the loop (B for A→B→A) meant the next links run, starting from B, returned A: the field flipped on every run. A cycle has no canonical destination, so return None and keep the data as is. The test that expected B is corrected accordingly.
Now that the schema enforces its constraints, an invalid entry was logged, dropped and the remaining data written with exit code 0, which the unattended sort workflows then commit. Previously a malformed CFP crashed sort_by_cfp before anything was written. Raise instead, so the run goes red and nothing is deleted silently.
…onal deadlines The deadline pattern only checked the digit layout, so 2026-02-30 or a 25:00:00 time validated and crashed later in sort_by_cfp. Parse the date and time parts as a real calendar value. clean_dates now also handles cfp_ext, so a blank 'cfp_ext:' (loaded as None) hit .lower() and aborted the whole sort; skip None values and let the schema drop them.
write_conference_yaml used the platform newline, so every sort on Windows rewrote _data/*.yml with CRLF and git showed the files as modified without any content change.
The python-organizers import added 'PyDay Chile Valparaiso' next to 'PyDay Valparaiso' and 'FOSDEM: Python Dev Room' next to 'FOSDEM' for 2026. Map both spellings to the existing names so tidy_titles and merge_duplicates collapse them, now and on future imports. The re-sort also adds the default time to nine date-only cfp_ext values in archive and legacy, as clean_dates now does for that field.
…pendencies 'pixi run test-fast || echo' swallowed every failure, and the default pixi environment has no pytest, so the step printed 'pytest: command not found' and passed on every run. The tests feature also lacked freezegun, hypothesis and responses, which the suite imports. Run the suite in the tests environment without a fallback and drop the ruff step, which the pre-commit job already covers.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated Conference Updates
👀 Items for Manual Review
The following items had moderate confidence and need verification:
Please verify these values before merging.