Releases: PlotPyStack/guidata
v3.6.1
In this release, test coverage is 74%.
🛠️ Bug fixes:
- Light/dark theme support:
- Auto light/dark theme: quering OS setting only once, or each time the
set_color_mode('auto')function is called - Fix console widget color theme: existing text in console widget was not updated when changing color theme
- Fixed issue with dark theme on Windows: the windows title bar background was not updated when the theme was changed from dark to light (the inverse was working) - this is now fixed in
guidata.qthelpers.win32_fix_title_bar_backgroundfunction - Added
guidata.qthelpers.set_color_modefunction to set the color mode ('dark', 'light' or 'auto' for system default) - Added
guidata.qthelpers.get_color_modefunction to get the current color mode ('dark', 'light' or 'auto' for system default) - Added
guidata.qthelpers.get_color_themefunction to get the current color theme ('dark' or 'light') - Added
guidata.qthelpers.get_background_colorfunction to get the current backgroundQColorassociated with the current color theme - Added
guidata.qthelpers.get_foreground_colorfunction to get the current foregroundQColorassociated with the current color theme - Added
guidata.qthelpers.is_dark_themefunction to check if the current theme is dark) - As a consequence,
guidata.qthelpers.is_dark_modeandguidata.qthelpers.set_dark_modefunctions are deprecated, respectively in favor ofguidata.qthelpers.is_dark_themeandguidata.qthelpers.set_color_mode
- Auto light/dark theme: quering OS setting only once, or each time the
v3.6.0
Version 3.6.0
In this release, test coverage is 74%.
💥 New features:
- Improved dark/light mode theme update:
- The theme mode may be changed during the application lifetime
- Added methods
update_color_modeonCodeEditorandConsoleBaseWidgetwidgets
Version 3.5.3
In this release, test coverage is 74%.
🛠️ Bug fixes:
-
Configuration initialization on Windows:
- For various reasons, a
PermissionErrorexception may be raised when trying to remove the configuration file on Windows, just after having created it for the first time. This is due to the fact that the file is still locked by the file system, even if the file has been closed. This is a known issue with Windows file system, and the solution is to wait a little bit before trying to remove the file. - To fix this issue, a new
try_remove_filefunction has been added to theuserconfigmodule, which tries multiple times to remove the file before raising an exception.
- For various reasons, a
-
Moved back
conftest.pyto thetestsfolder (was in the root folder), so thatpytestcan be executed with proper configuration when running the test suite from the installed package
v3.5.3
In this release, test coverage is 74%.
🛠️ Bug fixes:
-
Configuration initialization on Windows:
- For various reasons, a
PermissionErrorexception may be raised when trying to remove the configuration file on Windows, just after having created it for the first time. This is due to the fact that the file is still locked by the file system, even if the file has been closed. This is a known issue with Windows file system, and the solution is to wait a little bit before trying to remove the file. - To fix this issue, a new
try_remove_filefunction has been added to theuserconfigmodule, which tries multiple times to remove the file before raising an exception.
- For various reasons, a
-
Moved back
conftest.pyto thetestsfolder (was in the root folder), so thatpytestcan be executed with proper configuration when running the test suite from the installed package
v3.5.2
Version 3.5.2
In this release, test coverage is 74%.
🛠️ Bug fixes:
- Add support for NumPy 2.0:
- Use
numpy.asarrayinstead ofnumpy.array(..., copy=False) - Remove deprecated
numpy.core.multiarraymodule import
- Use
Version 3.5.1
In this release, test coverage is 74%.
🛠️ Bug fixes:
- PR #74 -
configtools.font_is_installed: fix PySide2 compat. issue (thanks to @xiaodaxia-2008) - Creating a dataset using the
createclass method:- Before, passing unknown keyword arguments failed silently (e.g.
MyParameters.create(unknown=42)). - Now, an
AttributeErrorexception is raised when passing unknown keyword arguments, as expected.
- Before, passing unknown keyword arguments failed silently (e.g.
- Processing Qt event loop in unattended mode before closing widgets and quitting the
application, so that all pending events are processed before quitting: this includes
for instance the drawing events of widgets, which may be necessary to avoid a crash
when closing the application (e.g. if drawing the widget is required for some
reason before closing it) or at least to ensure that test coverage includes all
possible code paths.
ℹ️ Other changes:
- Preparing for NumPy V2 compatibility: this is a work in progress, as NumPy V2 is not
yet released. In the meantime, requirements have been updated to exclude NumPy V2. - Internal package reorganization: moved icons to
guidata/data/iconsfolder - The
delaycommand line option for environment execution objectexecenvis now
expressed in milliseconds (before it was in seconds), for practical reasons - Explicitely exclude NumPy V2 from the dependencies (not compatible yet)
Version 3.5.0
In this release, test coverage is 74%.
💥 New features:
- New Sphinx autodoc extension:
- Allows to document dataset classes and functions using Sphinx directives, thus generating a comprehensive documentation for datasets with labels, descriptions, default values, etc.
- The extension is available in the
guidata.dataset.autodocmodule - Directives:
autodataset: document a dataset classautodataset_create: document a dataset creation functiondatasetnote: add a note explaining how to use a dataset
BoolItem/TextItem: add support for callbacks when the item value changes
🛠️ Bug fixes:
- Documentation generation: automatic requirement table generation feature was failing
when using version conditions in thepyproject.tomlfile (e.g.pyqt5 >= 5.15). - Issue #72 - unit test leave files during the build usr/lib/python3/dist-packages/test.json
- Issue #73 -
ChoiceItemradio buttons are duplicated when using callbacks
v3.5.1
Version 3.5.1
In this release, test coverage is 74%.
🛠️ Bug fixes:
- PR #74 -
configtools.font_is_installed: fix PySide2 compat. issue (thanks to @xiaodaxia-2008) - Creating a dataset using the
createclass method:- Before, passing unknown keyword arguments failed silently (e.g.
MyParameters.create(unknown=42)). - Now, an
AttributeErrorexception is raised when passing unknown keyword arguments, as expected.
- Before, passing unknown keyword arguments failed silently (e.g.
- Processing Qt event loop in unattended mode before closing widgets and quitting the
application, so that all pending events are processed before quitting: this includes
for instance the drawing events of widgets, which may be necessary to avoid a crash
when closing the application (e.g. if drawing the widget is required for some
reason before closing it) or at least to ensure that test coverage includes all
possible code paths.
ℹ️ Other changes:
- Preparing for NumPy V2 compatibility: this is a work in progress, as NumPy V2 is not
yet released. In the meantime, requirements have been updated to exclude NumPy V2. - Internal package reorganization: moved icons to
guidata/data/iconsfolder - The
delaycommand line option for environment execution objectexecenvis now
expressed in milliseconds (before it was in seconds), for practical reasons - Explicitely exclude NumPy V2 from the dependencies (not compatible yet)
v3.5.0
In this release, test coverage is 74%.
💥 New features:
- New Sphinx autodoc extension:
- Allows to document dataset classes and functions using Sphinx directives, thus generating a comprehensive documentation for datasets with labels, descriptions, default values, etc.
- The extension is available in the
guidata.dataset.autodocmodule - Directives:
autodataset: document a dataset classautodataset_create: document a dataset creation functiondatasetnote: add a note explaining how to use a dataset
BoolItem/TextItem: add support for callbacks when the item value changes
🛠️ Bug fixes:
- Documentation generation: automatic requirement table generation feature was failing
when using version conditions in thepyproject.tomlfile (e.g.pyqt5 >= 5.15). - Issue #72 - unit test leave files during the build usr/lib/python3/dist-packages/test.json
- Issue #73 -
ChoiceItemradio buttons are duplicated when using callbacks
v3.4.1
v3.4.0
In this release, test coverage is 76%.
💥 New features:
dataset.io.h5fmt.HDF5Reader.readmethod: added newdefaultargument to set
default value for missing data in the HDF5 file (backward compatible). The default
value ofdefaultisNoDefault(a special value to indicate that no default value
should be used, and that an exception should be raised if the data is missing).widgets.codeeditor.CodeEditor: added newinactivity_timeoutargument to set
the time (in milliseconds) to wait after the user has stopped typing before
emitting theCodeEditor.SIG_EDIT_STOPPEDsignal.- Added
execenv.accept_dialogsattribute to control whether dialogs should be
automatically accepted or not (default isNone, meaning no automatic acceptance):
this allows more coverage of the test suite. For now, this attribute has only been
proven useful intests/dataset/test_all_features.py. - Added unit tests for HDF5 and JSON serialization/deserialization:
- Testing an arbitrary data model saved/loaded to/from HDF5 and JSON files,
with various data sets and other data types. - Testing for backward compatibility with previous versions of the data model
(e.g. new attributes, removed attributes, etc.)
- Testing an arbitrary data model saved/loaded to/from HDF5 and JSON files,
guidata.dataset.iomodule is now deprecated and will be removed in a future
release. Please useguidata.ioinstead. This change is backward compatible
(the old module is still available and will be removed in a future release).
The motivation for this change is to simplify the module structure and to help
understand that the scope of theiomodule is not limited todataset.DataSet
objects, but may be used for any kind of data serialization/deserialization.
📖 Documentation:
- Added missing
DataSetEditDialogandDataSetEditLayoutclasses - Added missing inheritance/member details on some classes
- Reduced table of contents depth in left sidebar for better readability
v3.3.0
💥 New features:
- Array editor now supports row/column insertion/deletion:
- Added
variable_sizeargument tosetup_and_checkmethod - The feature is disabled by default (backward compatible)
- It supports standard arrays, masked arrays, record arrays and N-dimensional arrays
- Added
- New dataset read-only mode:
- Added
readonlyargument toDataSetconstructor - This is useful to create a dataset that will be displayed in read-only mode
(e.g. string editing widgets will be in read-only mode: text will be selectable
but not editable) - The items remain modifiable programmatically (e.g.
dataset.item = 42)
- Added
- New dataset group edit mode:
- Added
modeargument toDataSetGroup.editmethod, with the following options:mode='tabs'(default): each dataset is displayed in a separate tabmode='table': all datasets are displayed in a single table
- In the new table mode, the datasets are displayed in a single table with
one row per dataset and one column per item - Clicking on a row will display the corresponding dataset in a modal dialog box
- Added
🛠️ Bug fixes:
- Qt console:
- Fixed
RuntimeError: wrapped C/C++ object of type DockableConsole has been deleted
when closing the console widget (parent widget, e.g. aQMainWindow, was deleted)
while an output stream is still writing to the console (e.g. alogginghandler
which will flush the output stream when closing the application) - This concerns all console-related widgets:
DockableConsole,Console,
InternalShell,PythonShellWidgetandShellBaseWidget
- Fixed
- Code editor: fixed compatibility issue with PySide6
(AttributeError: 'QFont' object has no attribute 'Bold')
v3.2.2 - Maintenance release
Version 3.2.2
🛠️ Bug fixes:
- Fixed translation support (
gettext):- Locale detection has been fixed in 3.1.1 (deprecation of
locale.getdefaultlocale) - However, on frozen distributions on Windows (e.g. with
pyinstaller), function
locale.getlocaleis returning(None, None)instead of proper locale infos - Added a workaround: on Windows, if locale can't be detected, we now use the
Windows API to retrieve it (using theGetUserDefaultLocaleNamefunction) - Issue #68 - Windows: gettext translation is not working on frozen applications
- Locale detection has been fixed in 3.1.1 (deprecation of
- Embedded Qt console:
- Fixed default encoding detection on frozen applications on Windows
- Issue #69 - Windows/Qt console: output encoding is not detected on frozen applications
Version 3.2.1
🛠️ Bug fixes:
- Tests only:
qthelpers.close_widgets_and_quitnow ignores deleted widgets
💥 Changes:
dataset.ImageChoiceItemanddataset.ButtonItem: addedsizeargument to set the icon sizedataset.ioreader and writer classes: removed deprecatedwrite_unicodemethod
Version 3.2.0
🛠️ Bug fixes:
- Issue #67 - JSONReader/Deserializing object list: TypeError: 'NoneType' object is not subscriptable
💥 Changes:
qthelpers.qt_wait: addedshow_messageandparentarguments (backward compatible)qthelpers.qt_app_context: removedfaulthandlersupport (this need to be handled at the application level, see for example DataLab's implementation)- Disabled command line argument parsing in
guidata.envmodule:- The
guidatalibrary is parsing command line arguments for the purpose of creating the environment execution object namedexecenv(seeguidata.envmodule). This object is used to determine the execution environment mainly for testing purposes: for example, to bypass the Qt event loop when running tests thanks to the--unattendedcommand line option. - However this argument parsing is not always desirable, for example when using
guidataas a dependency in another library or application. This is why the parsing mechanism is now disabled by default, and may be enabled by setting the environment variableGUIDATA_PARSE_ARGSto1(or any other non-empty value). As of today, it is still unclear if there will be a need to enable this mechanism in the future, so this is why the environment variable is used instead of a function argument.
- The
- Removed deprecated
guidata.disthelpersmodule (we recommend using PyInstaller instead)