diff --git a/CHANGELOG.md b/CHANGELOG.md index c8549a2..020aa75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,63 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- **Local file connector**: Added Parquet file format support for local file + imports (`src/datasure/connectors/local.py`) — #245 +- **Correction log**: Survey ID now shown on the Correct Data page and in the + Correction Log, alongside correction status and status reason + (`src/datasure/processing/corrections.py`, + `src/datasure/views/correction_view.py`) — #264 +- **Project creation**: Newly created projects are now automatically loaded + and selected after creation, instead of requiring a manual return to + project selection (`src/datasure/views/start_view.py`) — #272 + +### Changed + +- **Outliers module**: Split the monolithic `src/datasure/checks/outliers.py` + into a subpackage (`compute.py`, `models.py`, `report_ui.py`, + `settings_ui.py`) for maintainability — #268, closes #197 +- **View UI consistency**: Introduced shared header/section/dialog helpers + (`src/datasure/utils/ui_utils.py`) and adopted them across `config_view.py`, + `correction_view.py`, `import_view.py`, `output_view_template.py`, + `prep_view.py`, `replication_view.py`, and `start_view.py` so page chrome + (headers, section titles, metric rows, confirm dialogs) stays consistent as + new views are added — #244 +- **Dependencies**: `streamlit` pinned to an exact `==1.61.0` (previously + `>=1.52.0`) for reproducible builds; `uv_build` upper bound raised to + `<0.13.0` +- **Dev tooling**: Vendored Streamlit's official `developing-with-streamlit` + meta-skill into `.claude/skills/` so it is available to every contributor + without a user-level install; trimmed the project-local `streamlit` skill + down to DataSure-specific patterns (asset paths, cache directory + resolution) — #274 +- **CI**: Bumped `actions/checkout` to 7.0.1, `actions/setup-python` to + 7.0.0, `astral-sh/setup-uv` to 8.3.2, and `SonarSource/sonarqube-scan-action` + to 8.2.0 — #255, #257, #243, #236, #235 +- **Duplicates check**: Clarified filter settings copy on the duplicates + check page (`src/datasure/checks/duplicates.py`) — #273 + +### Fixed + +- **Prep "remove rows"**: Equal-to/not-equal-to filter conditions were + inverted (matching rows were removed instead of kept, and vice versa); + logic corrected (`src/datasure/processing/prep.py`) — #263 +- **Datetime parsing**: Fixed parsing of datetime formats with missing + seconds during data preparation (`src/datasure/processing/prep.py`, + `src/datasure/views/prep_view.py`) +- **Bulk reapply error handling**: Prep reapply-all no longer crashes the + page on a failing step (e.g. a re-import that drops a column an earlier + step used); correction reapply-all no longer silently swallows failures. + Both now collect per-item failures, skip just the failing item, and + surface one shared warning at the UI boundary + (`src/datasure/processing/prep.py`, `src/datasure/processing/corrections.py`, + `src/datasure/utils/reapply_utils.py`) — closes #253 +- **Stale prep/corrected data**: Re-importing raw data now properly + invalidates stale prepared and corrected data instead of leaving outdated + results visible (`src/datasure/processing/corrections.py`, + `src/datasure/views/import_view.py`) — #254, closes #252 + --- ## [1.0.0] - 2026-07-10 diff --git a/pyproject.toml b/pyproject.toml index a1cd624..5212e44 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "uv_build" [project] name = "DataSure" -version = "1.0.0.post1" +version = "1.1.0rc1" description = "IPA Data Management System Dashboard" readme = "README.md" license = "MIT" diff --git a/uv.lock b/uv.lock index a895fc5..fadc14b 100644 --- a/uv.lock +++ b/uv.lock @@ -715,7 +715,7 @@ wheels = [ [[package]] name = "datasure" -version = "1.0.0.post1" +version = "1.1.0rc1" source = { editable = "." } dependencies = [ { name = "duckdb" }, @@ -1069,7 +1069,7 @@ name = "importlib-metadata" version = "9.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "zipp" }, + { name = "zipp", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } wheels = [ @@ -3246,7 +3246,7 @@ resolution-markers = [ "python_full_version < '3.12'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } wheels = [ @@ -3321,7 +3321,7 @@ resolution-markers = [ "python_full_version >= '3.12' and python_full_version < '3.14'", ] dependencies = [ - { name = "numpy", version = "2.5.2", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.5.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a7/25/c2700dfaf6442b4effaa91af24ebce5dc9d31bb4a69706313aae70d72cd0/scipy-1.18.0.tar.gz", hash = "sha256:67b2ad2ad54c72ca6d04975a9b2df8c3638c34ddd5b28738e94fc2b57929d378", size = 30774447, upload-time = "2026-06-19T15:01:43.456Z" } wheels = [