mirror of
https://github.com/soxoj/maigret.git
synced 2026-09-22 17:54:55 +02:00
An engine is a template, but `update_from_engine` overwrites a site's scalar fields with the engine's, and `strip_engine_data` then removes them on save. A value written into an entry by hand is therefore ignored at runtime **and deleted from `data.json`** the next time anything calls `save_to_file` — which `utils/update_site_data.py` does on every regeneration. Nothing is printed: the dict case already warns about a collision, the scalar case did not. Found while giving MediaWiki entries a JSON `urlProbe`. The API path is not the page path — a wiki with articles under `/wiki` keeps `api.php` under `/w` — so a per-entry probe is the natural way to say it, and it turned out to be impossible. Now the entry wins and the override survives the round trip, with the same warning the dict case prints. Only fields the entry **stated** count. The constructor synthesises `alexa_rank` for every site that does not carry one, so keying the rule off the instance dict made seventeen op.gg sites keep that placeholder instead of the rank their engine supplies; there is a test for exactly that, next to one for the override winning and one for it surviving `strip_engine_data`. The shipped database is unchanged — it round-trips byte for byte through load and save, and no entry currently sets a field its engine also defines.