Skip to content

Pre-release fixes for 3.17.0 - #127

Merged
PierreRaybaut merged 6 commits into
masterfrom
fix/123-pre-release-3.17
Oct 30, 2026
Merged

PierreRaybaut merged 6 commits into
masterfrom
fix/123-pre-release-3.17

Conversation

@PierreRaybaut

Copy link
Copy Markdown
Collaborator

Closes #123.

Pre-release fixes found while reviewing master before releasing 3.17.0.

Changes

  • Version 3.17.0 — __version__ bumped to 3.17.0. The Unreleased section of the 3.16 release notes (Python 3.10 minimum, new get_pixmap function, new default font with Qt 5 on Windows, fallback for corrupted .mo catalogs) moves to the new doc/release_notes/release_3.17.md.
  • DictItem in the JSON Schema export (bug fix) — DictItem uses its display callback to open the Qt dictionary editor from a button, with a (instance, item, value, parent, trigger_apply) signature. The JSON Schema module handled it as a reactive callback: DictItem fields were flagged with x-guidata-has-callback, and resolve_dataset_callbacks() raised TypeError: DictItem.__dictedit() missing 1 required positional argument: 'parent'. Frontends such as DataLab-Web call this function when a flagged field is edited. A private helper _get_reactive_callback() now ignores this callback (isinstance check, robust to renaming and subclasses) when flagging, running and resolving reactive callbacks.
  • DateTimeItem display callback (bug fix) — DateTimeWidget connected dateTimeChanged to a lambda which only notified the value change, so its date_changed method was dead code and the display callback was never called. It is now connected, and the callback receives the Python value of the widget (datetime.datetime), like the other widgets. This is not a compatibility break, since the callback was never called before.
  • about(html=False) (bug fix) — AboutInfo.about() only defined author and organization in its HTML branch, so plain-text output raised UnboundLocalError.
  • French translations (bug fix) — Format ({}) should start with '%' was translated with the opposite meaning, and Export dataframe was marked fuzzy with an incomplete translation, so pybabel compile (used by the release workflow) left it out. The rest of the catalog is unchanged; it is already in sync with the source strings.
  • Documentation — resolve_dataset_active is public and referenced by dataset_to_schema_with_values, but it was missing from the API reference: an autofunction directive is added.

Tests

  • test_jsonschema.py::test_dict_item_editor_callback_is_not_reactive: no x-guidata-has-callback flag, values snapshot OK, resolve_dataset_callbacks() returns {}.
  • New tests/unit/test_datetime_display_callback.py: changing the date/time in a DataSetEditLayout calls the callback once with a datetime.datetime, and the dataset is already updated.
  • New tests/unit/test_about.py: plain-text and HTML output for AboutInfo and for guidata, with copyright_only in both modes.
  • Each new test fails without its fix.

Local validation (Windows):

Binding Python Result
PyQt5 5.15 3.11 262 passed, 2 skipped
PyQt6 6.10 3.14 260 passed, 4 skipped
PySide6 6.10 3.14 260 passed, 4 skipped
  • ruff check / ruff format --check: clean.
  • French catalog: no missing, obsolete, fuzzy or untranslated entry; compiled with pybabel compile and both translations checked.
  • Sphinx HTML build: resolve_dataset_active appears in the jsonschema reference page. The warnings are the same as on master, so this PR adds none.

Not included

Found during the same review, tracked separately:

Downstream: DataLab already imports guidata.configtools.get_pixmap and will need guidata >= 3.17.0. This will be handled separately in DataLab.

Version 3.16.0 is already released, and the changes made since then
(Python 3.10 minimum, new get_pixmap function, new default font with
Qt 5 on Windows) call for a new minor version: move the Unreleased
section of the 3.16 release notes to the new 3.17 release notes.

Refs #123

Assisted-by: Claude Opus 5.5
DictItem uses its display callback to open the Qt dictionary editor from
a button, with a (instance, item, value, parent, trigger_apply)
signature. The JSON Schema module handled it as a reactive callback:
DictItem fields were flagged with x-guidata-has-callback, and
resolve_dataset_callbacks() raised a TypeError for them.

Ignore this callback when flagging, running and resolving reactive
callbacks.

Refs #123

Assisted-by: Claude Opus 5.5
DateTimeWidget connected dateTimeChanged to a lambda which only notified
the value change, so its date_changed method was never used and the
display callback of a DateTimeItem was never called.

Connect dateTimeChanged to date_changed, which now passes the Python
value of the widget (datetime) to the callback, like the other widgets.

Refs #123

Assisted-by: Claude Opus 5.5
AboutInfo.about() only defined the author and organization strings in
its HTML branch, so about(html=False) raised UnboundLocalError.

Refs #123

Assisted-by: Claude Opus 5.5
- "Format ({}) should start with '%'" was translated with the opposite
  meaning ("ne doit pas commencer par").
- "Export dataframe" was marked fuzzy with an incomplete translation, so
  it was left out of the compiled catalog.

Refs #123

Assisted-by: Claude Opus 5.5
resolve_dataset_active is public (exported by guidata.dataset and
referenced by dataset_to_schema_with_values), but it was missing from
the API reference.

Refs #123

Assisted-by: Claude Opus 5.5
@PierreRaybaut
PierreRaybaut merged commit 88d8260 into master Oct 30, 2026
9 checks passed
@PierreRaybaut
PierreRaybaut deleted the fix/123-pre-release-3.17 branch October 30, 2026 08:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Pre-release fixes for 3.17.0

1 participant