feat: 3 new tools, format streaming, distribution-ready demo + landing pages
Tools shipped this batch (4 → 6 of 9 Ready):
04 Missing Value Handler src/core/missing.py + cli_missing.py + GUI
05 Column Mapper src/core/column_mapper.py + cli_column_map.py + GUI
09 Pipeline Runner src/core/pipeline.py + cli_pipeline.py + GUI
with soft tool-dependency graph (recommended,
not enforced) and JSON save/load for repeatable
weekly cleanups.
Format Standardizer reworked for 1 GB international files:
• Vectorised dispatch + LRU cache over phone/date/currency/boolean/email
• Per-row country / address columns drive parsing
• Audit cap (default 10 k rows, ~50 MB RAM)
• standardize_file(): chunked streaming entry point (~165 k rows/sec)
• currency_decimal="auto" for EU comma-decimal locales
• R$ / kr / zł multi-char currency prefixes
• cli_format.py with auto-stream above 100 MB inputs
Encoding detection arbiter + language-aware probe:
Closes the last 4 xfails (cp1250 / mac_iceland / shift_jis_2004 / lying-BOM)
via tied-confidence arbiter + Cyrillic / EE-Latin coverage probes.
Distribution-readiness assets:
• streamlit_app.py — Streamlit Community Cloud entry shim
• src/gui/app_demo.py — single-page demo, ?p=<persona> routing,
100-row cap + watermark, free-vs-paid boundary enforced at surface
• samples/demo/ — 3 niche datasets + pre-tuned pipeline JSONs
• landing/ — 4 static HTML pages (apex chooser + 3 niche),
shared CSS, deploy.py URL-substitution script,
auto-generated robots.txt + sitemap.xml + 404.html + favicon
• docs/PLAN.md, DEMO-PLAN.md, DEPLOYMENT.md, POST-LAUNCH.md, NEXT-STEPS.md
— full strategy + measurement + deployment + master checklist
Test counts:
before: 1,520 passed · 4 skipped · 17 xfailed
after: 1,729 passed · 0 skipped · 0 xfailed
Tier-1 corpora added:
• missing-corpus 3 use cases + 16 edge cases
• column-mapper-corpus 3 use cases + 5 edge cases
• format-cleaner intl 20-row 13-country stress fixture
Engine hardening flushed out by the corpora:
• interpolate guards against object-dtype columns
• mean/median skip all-NaN columns (silences numpy warning)
• fillna runs under future.no_silent_downcasting (silences pandas warning)
• mojibake test no longer skips when ftfy installed (monkeypatch path)
• drop-row threshold semantics: strict-greater (consistent across rows / cols)
• currency_decimal validator allow-set updated for "auto"
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -110,16 +110,16 @@ _DATE_EXPECTED_MDY: dict[str, object] = {
|
||||
"FD13": PASSTHROUGH,
|
||||
"FD14": PASSTHROUGH,
|
||||
"FD15": PASSTHROUGH,
|
||||
# excel serial → 2024-01-15 (xfail — not implemented)
|
||||
# excel serial dates (numeric days since 1899-12-30)
|
||||
"FD22": "2024-01-15",
|
||||
"FD23": "2024-01-15",
|
||||
# unix timestamp seconds / millis → 2024-01-15 (xfail)
|
||||
# unix timestamps (seconds, milliseconds)
|
||||
"FD24": "2024-01-15",
|
||||
"FD25": "2024-01-15",
|
||||
# partial precision — corpus preserves it
|
||||
"FD26": "2024-01",
|
||||
"FD27": "2024-01", # xfail — text precision
|
||||
"FD28": "2024-Q1", # xfail — quarter
|
||||
"FD27": "2024-01", # text precision month
|
||||
"FD28": "2024-Q1", # quarter
|
||||
"FD29": "2024",
|
||||
# 2-digit year cutoff (per docs: 1969 wins over 2069)
|
||||
"FD30": "1969-01-15",
|
||||
@@ -135,7 +135,7 @@ _DATE_EXPECTED_MDY: dict[str, object] = {
|
||||
"FD37": "2024-01-15",
|
||||
# garbage → pass through (corpus 0.3 boundary table)
|
||||
# FD38/39/40 → PASSTHROUGH default
|
||||
# locale-specific month names (xfail — not shipped)
|
||||
# locale-specific month names (en/fr/de via month_locales)
|
||||
"FD41": "2024-01-15",
|
||||
"FD42": "2024-01-15",
|
||||
# timezone — corpus 3.3 says fixed-offset only
|
||||
|
||||
Reference in New Issue
Block a user