Skip to content

feat(py): add save(evolution_exclude) to skip tables from evolution tracking (0.9.4) - #131

Merged
bassim-matar merged 1 commit into
mainfrom
feat-evolution-exclude
Jul 15, 2026
Merged

bassim-matar merged 1 commit into
mainfrom
feat-evolution-exclude

Conversation

@bassim-matar

Copy link
Copy Markdown
Member

Contexte

Un consommateur (datannurpy) expose une table frequency portant les comptages de modalités. À chaque re-scan, une distribution qui bouge génère une ligne d'évolution par modalité, ce qui pollue l'évolution de milliers de lignes sans intérêt fonctionnel. Aujourd'hui le seul levier est track_evolution (tout-ou-rien) ; les tables __* sont skippées mais frequency ne peut pas être renommée sans casser l'app.

Changement

Nouveau kwarg optionnel evolution_exclude: set[str] | None = None sur Jsonjsdb.save(), transmis à compare_datasets(). Les tables listées :

  • sont exportées normalement (json + json.js inchangés) ;
  • ne génèrent aucune entrée d'évolution (ni update, ni add, ni delete).

Défaut None ⇒ comportement strictement identique à aujourd'hui.

Détails

  • compare_datasets() : early-return juste après le skip __ existant.
  • Le closure track_table_evolution court-circuite avant _get_old_table, évitant le read disque inutile de l'ancienne table pour les tables exclues (gain sur les grosses tables type frequency).
  • Version bumpée 0.9.3 → 0.9.4 + CHANGELOG + uv.lock.

Tests

Nouvelle classe TestEvolutionExclude :

  • unitaire sur compare_datasets (exclue = 0 entrée, non-exclue = entrées normales) ;
  • end-to-end 2× save() : frequency subit update + add + delete → aucune ligne d'évolution, mais export à jour ; une table variable modifiée en parallèle génère bien son update (pas de sur-filtrage).

Vérifs : 352 passed / 1 xfailed · ruff clean · pyright 0 error.

🤖 Generated with Claude Code

…racking (0.9.4)

New optional `evolution_exclude: set[str] | None` kwarg on `Jsonjsdb.save()`,
forwarded to `compare_datasets()`. Listed tables are still exported normally
(json + json.js) but produce no add/update/delete evolution entries.

Default `None` keeps existing behaviour identical. The closure also short-circuits
before reading the old table from disk for excluded tables, avoiding wasted I/O
on large tables such as `frequency`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@bassim-matar
bassim-matar force-pushed the feat-evolution-exclude branch from b9061cc to c8db80a Compare July 15, 2026 09:13
@bassim-matar
bassim-matar merged commit 9e0e174 into main Jul 15, 2026
6 checks passed
@bassim-matar
bassim-matar deleted the feat-evolution-exclude branch July 15, 2026 09:14
@codecov

codecov Bot commented Jul 15, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant