Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

finalize: KeyError when a news fragment's id contains a dot

Aperta Adatta ai principianti
#34 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
1/5
Tempo stimato
Meno di un'ora
Idoneità per principianti
82/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
release

Direzione di ricerca

Il traceback punta a _release_bump in jaraco/develop/towncrier.py, dove il nome del file del frammento viene suddiviso e il tipo viene cercato in _release_bumps. Leggi questa funzione e i suoi chiamanti, quindi esegui tox -e finalize con un frammento chiamato +drop-python-3.10.feature.rst. Il lavoro è completato quando finalize gestisce l’id con i punti usando il tipo feature senza sollevare KeyError.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

towncrier._release_bump parses a fragment filename from the left, so a dot anywhere in the id portion shifts the type field and raises KeyError.

Reproducer

A fragment named +drop-python-3.10.feature.rst (dropping support for an EOL Python, the version number written naturally):

$ tox -e finalize
...
  File ".../jaraco/develop/towncrier.py", line 27, in _release_bump
    return _release_bumps[type_]
KeyError: '10'

Because:

>>> '+drop-python-3.10.feature.rst'.split('.', 2)
['+drop-python-3', '10', 'feature.rst']
Notably, towncrier itself is fine with the name

towncrier build --draft renders the fragment under Features exactly as intended — it parses the type from the right. So the name is only invalid by jaraco.develop's stricter reading, which makes the failure surprising: the changelog builds, but the release can't be cut.

Suggested fix

rsplit matches towncrier's own interpretation and is a one-character change:

>>> '+drop-python-3.10.feature.rst'.rsplit('.', 2)
['+drop-python-3.10', 'feature', 'rst']
Two adjacent observations

_release_bumps is built as collections.defaultdict(feature='minor', ...). Those are all keyword arguments, so default_factory is None and the mapping raises KeyError like a plain dict. If the defaultdict was meant to supply a fallback bump for unrecognized types, it isn't doing so.

check_changes() wouldn't have caught this either — it tests f".{key}" in file.suffixes, and .feature is among ['.10', '.feature', '.rst'], so the name passes. It also isn't called from finalize(), so nothing validates names before release_kind() runs.

Seen with jaraco.develop 9.0.0, towncrier 26.9.0.

Lingua principale
Python
Stelle
7
Fork
5
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di jaraco/jaraco.develop

Tutte le issue di jaraco/jaraco.develop

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.