Improve TOML placeholder parser error messages
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 48/100
Direzione di ricerca
Start in hexdoc/utils/deserialize/toml.py, where the traceback shows placeholder expansion reaches _expand_placeholder and raises IndexError. Read the placeholder parsing and expansion flow, then check for related tests in the repository. Done means invalid placeholder references produce a clear parser error instead of this raw index error; no test file is named in the issue.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
For example, when a placeholder key contains too many parent references, this is the current error message:
─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\cli\app.py:186 in build │
│ │
│ 183 │ For developers: returns the site path (eg. `/v/latest/main`). │
│ 184 │ """ │
│ 185 │ │
│ ❱ 186 │ props, pm, book_plugin, plugin = load_common_data(props_file, branch) │
│ 187 │ │
│ 188 │ if props.env.hexdoc_subdirectory: │
│ 189 │ │ output_dir /= props.env.hexdoc_subdirectory │
│ │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\cli\utils\load.py:55 in load_common_data │
│ │
│ 52 │ *, │
│ 53 │ book: bool = False, │
│ 54 ) -> tuple[Properties, PluginManager, BookPlugin[Any], ModPlugin]: │
│ ❱ 55 │ props = Properties.load(props_file) │
│ 56 │ pm = PluginManager(branch, props) │
│ 57 │ │
│ 58 │ book_plugin = pm.book_plugin(props.book_type) │
│ │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\core\properties.py:175 in load │
│ │
│ 172 │ def load(cls, path: Path) -> Self: │
│ 173 │ │ return cls.load_data( │
│ 174 │ │ │ props_dir=path.parent, │
│ ❱ 175 │ │ │ data=load_toml_with_placeholders(path), │
│ 176 │ │ ) │
│ 177 │ │
│ 178 │ @classmethod │
│ │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\utils\deserialize\toml.py:135 in │
│ load_toml_with_placeholders │
│ │
│ 132 │
│ 133 def load_toml_with_placeholders(path: Path) -> TOMLDict: │
│ 134 │ data = tomllib.loads(path.read_text("utf-8")) │
│ ❱ 135 │ fill_placeholders(data) │
│ 136 │ return data │
│ 137 │
│ 138 │
│ │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\utils\deserialize\toml.py:34 in │
│ fill_placeholders │
│ │
│ 31 │
│ 32 │
│ 33 def fill_placeholders(data: TOMLDict): │
│ ❱ 34 │ _fill_placeholders(data, [data], set()) │
│ 35 │
│ 36 │
│ 37 def _expand_placeholder( │
│ │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\utils\deserialize\toml.py:130 in │
│ _fill_placeholders │
│ │
│ 127 ): │
│ 128 │ table = stack[-1] │
│ 129 │ for key, child in table.items(): │
│ ❱ 130 │ │ _handle_child(data, stack, expanded, key, child, table.__setitem__) │
│ 131 │
│ 132 │
│ 133 def load_toml_with_placeholders(path: Path) -> TOMLDict: │
│ │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\utils\deserialize\toml.py:113 in │
│ _handle_child │
│ │
│ 110 │ │ case list(): │
│ 111 │ │ │ # handle each item in the list without adding the list to the stack │
│ 112 │ │ │ for i, item in enumerate(value): │
│ ❱ 113 │ │ │ │ _handle_child(data, stack, expanded, i, item, value.__setitem__) │
│ 114 │ │ │
│ 115 │ │ case dict(): │
│ 116 │ │ │ # recursion! │
│ │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\utils\deserialize\toml.py:89 in │
│ _handle_child │
│ │
│ 86 │ │ │ # fill the string's placeholders │
│ 87 │ │ │ for match in reversed(list(_PLACEHOLDER_RE.finditer(value))): │
│ 88 │ │ │ │ try: │
│ ❱ 89 │ │ │ │ │ v = _expand_placeholder( │
│ 90 │ │ │ │ │ │ data, │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
IndexError: list index out of range
- Lingua principale
- Python
- Stelle
- 7
- Fork
- 10
- 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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di hexdoc-dev/hexdoc
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
hexdoc-dev/hexdoc#109 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
hexdoc-dev/hexdoc#108 ·
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
hexdoc-dev/hexdoc#90 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 53/100
hexdoc-dev/hexdoc#107 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
hexdoc-dev/hexdoc#106 ·
Tutte le issue di hexdoc-dev/hexdoc
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
mohitmishra786/readprism#322 ·
I maintainer di solito rispondono entro 1 giorno
-
good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
API-key credentials accept a blank key: empty via the API, spaces-only via the builder's Add API key dialogForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
Significant-Gravitas/AutoGPT#15727 ·
I maintainer di solito rispondono entro 1 giorno