Skip to content

Releases: PlotPyStack/guidata

v3.4.1

12 Mar 13:00
Compare
Choose a tag to compare

In this release, test coverage is 76%.

🛠️ Bug fixes:

  • Issue #71 - Random segmentation faults with applications embedding CodeEditor
  • Issue #70 - PermissionError: [Errno 13] Permission denied: '/usr/lib/python3/dist-packages/guidata/tests/data/genreqs/requirements.rst'

v3.4.0

11 Mar 08:16
Compare
Choose a tag to compare

In this release, test coverage is 76%.

💥 New features:

  • dataset.io.h5fmt.HDF5Reader.read method: added new default argument to set
    default value for missing data in the HDF5 file (backward compatible). The default
    value of default is NoDefault (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 new inactivity_timeout argument to set
    the time (in milliseconds) to wait after the user has stopped typing before
    emitting the CodeEditor.SIG_EDIT_STOPPED signal.
  • Added execenv.accept_dialogs attribute to control whether dialogs should be
    automatically accepted or not (default is None, meaning no automatic acceptance):
    this allows more coverage of the test suite. For now, this attribute has only been
    proven useful in tests/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.)

⚠️ API breaking changes:

  • guidata.dataset.io module is now deprecated and will be removed in a future
    release. Please use guidata.io instead. 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 the io module is not limited to dataset.DataSet
    objects, but may be used for any kind of data serialization/deserialization.

📖 Documentation:

  • Added missing DataSetEditDialog and DataSetEditLayout classes
  • Added missing inheritance/member details on some classes
  • Reduced table of contents depth in left sidebar for better readability

v3.3.0

26 Jan 16:58
Compare
Choose a tag to compare

💥 New features:

  • Array editor now supports row/column insertion/deletion:
    • Added variable_size argument to setup_and_check method
    • The feature is disabled by default (backward compatible)
    • It supports standard arrays, masked arrays, record arrays and N-dimensional arrays
  • New dataset read-only mode:
    • Added readonly argument to DataSet constructor
    • 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)
  • New dataset group edit mode:
    • Added mode argument to DataSetGroup.edit method, with the following options:
      • mode='tabs' (default): each dataset is displayed in a separate tab
      • mode='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

🛠️ 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. a QMainWindow, was deleted)
      while an output stream is still writing to the console (e.g. a logging handler
      which will flush the output stream when closing the application)
    • This concerns all console-related widgets: DockableConsole, Console,
      InternalShell, PythonShellWidget and ShellBaseWidget
  • Code editor: fixed compatibility issue with PySide6
    (AttributeError: 'QFont' object has no attribute 'Bold')

v3.2.2 - Maintenance release

01 Dec 08:47
Compare
Choose a tag to compare

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.getlocale is 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 the GetUserDefaultLocaleName function)
    • Issue #68 - Windows: gettext translation is not working on frozen applications
  • 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_quit now ignores deleted widgets

💥 Changes:

  • dataset.ImageChoiceItem and dataset.ButtonItem: added size argument to set the icon size
  • dataset.io reader and writer classes: removed deprecated write_unicode method

Version 3.2.0

🛠️ Bug fixes:

  • Issue #67 - JSONReader/Deserializing object list: TypeError: 'NoneType' object is not subscriptable

💥 Changes:

  • qthelpers.qt_wait: added show_message and parent arguments (backward compatible)
  • qthelpers.qt_app_context: removed faulthandler support (this need to be handled at the application level, see for example DataLab's implementation)
  • Disabled command line argument parsing in guidata.env module:
    • The guidata library is parsing command line arguments for the purpose of creating the environment execution object named execenv (see guidata.env module). 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 --unattended command line option.
    • However this argument parsing is not always desirable, for example when using guidata as 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 variable GUIDATA_PARSE_ARGS to 1 (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.
  • Removed deprecated guidata.disthelpers module (we recommend using PyInstaller instead)

v3.2.1 - Maintenance release

23 Nov 17:35
Compare
Choose a tag to compare

Version 3.2.1

🛠️ Bug fixes:

  • Tests only: qthelpers.close_widgets_and_quit now ignores deleted widgets

💥 Changes:

  • dataset.ImageChoiceItem and dataset.ButtonItem: added size argument to set the icon size
  • dataset.io reader and writer classes: removed deprecated write_unicode method

v3.2.0 - New release

14 Nov 15:50
Compare
Choose a tag to compare

Version 3.2.0

🛠️ Bug fixes:

  • Issue #67 - JSONReader/Deserializing object list: TypeError: 'NoneType' object is not subscriptable

💥 Changes:

  • qthelpers.qt_wait: added show_message and parent arguments (backward compatible)
  • qthelpers.qt_app_context: removed faulthandler support (this need to be handled at the application level, see for example DataLab's implementation)
  • Disabled command line argument parsing in guidata.env module:
    • The guidata library is parsing command line arguments for the purpose of creating the environment execution object named execenv (see guidata.env module). 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 --unattended command line option.
    • However this argument parsing is not always desirable, for example when using guidata as 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 variable GUIDATA_PARSE_ARGS to 1 (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.
  • Removed deprecated guidata.disthelpers module (we recommend using PyInstaller instead)

v3.1.1 - Maintenance release

25 Oct 16:05
Compare
Choose a tag to compare

Version 3.1.1

🛠️ Bug fixes:

  • 'Apply' button state is now correctly updated when modifying one of the following items:
    • dataset.MultipleChoiceItem
    • dataset.dataitems.DictItem
    • dataset.dataitems.FloatArrayItem
  • Fixed minor deprecation and other issues related to locale

💥 Changes:

  • Removed --unattended command line option for pytest:
    • Before: pytest --unattended guidata (to run tests without Qt event loop)
    • Now: pytest guidata (there is no use case for running tests with Qt event loop,
      so the --unattended option was removed and the unattended mode is now the default)
  • Removed CHM documentation (obsolete format)

Version 3.1.0

⚠ Exceptionally, this release contains the following API breaking changes:

  • Moved utils.update_dataset to dataset.conv.update_dataset
  • Moved utils.restore_dataset to dataset.conv.restore_dataset

✔ API simplification (backward compatible):

  • Dataset items may now be imported from guidata.dataset instead of guidata.dataset.dataitems
  • Dataset types may now be imported from guidata.dataset instead of guidata.dataset.datatypes
  • Examples:
    • from guidata.dataset.dataitems import FloatItem becomes from guidata.dataset import FloatItem

    • from guidata.dataset.datatypes import DataSet becomes from guidata.dataset import DataSet

    • Or you may now write:

      import guidata.dataset as gds
      
      class MyParameters(gds.DataSet):
          """My parameters"""
          freq = gds.FloatItem("Frequency", default=1.0, min=0.0, nonzero=True)
          amp = gds.FloatItem("Amplitude", default=1.0, min=0.0)

💥 New features:

  • New dataset.create_dataset_from_dict: create a dataset from a dictionary,
    using keys and values to create the dataset items
  • New dataset.create_dataset_from_func: create a dataset from a function signature,
    using type annotations and default values to create the dataset items
  • dataset.dataitems.StringItem:
    • Added argument password to hide text (useful for passwords)
    • Added argument regexp to validate text using a regular expression
  • dataset.dataitems.FileSaveItem, dataset.dataitems.FileOpenItem,
    dataset.dataitems.FilesOpenItem and dataset.dataitems.DirectoryItem:
    added argument regexp to validate file/dir name using a regular expression
  • dataset.dataitems.DictItem: added support for HDF5 and JSON serialization
  • dataset.io.h5fmt and dataset.io.jsonfmt: added support for lists and dictionnaries serialization

♻ New PlotPyStack internal features:

  • widgets.about: handle about dialog box informations (Python, Qt, Qt bindings, ...)
  • Renamed development environment variable GUIDATA_PYTHONEXE to PPSTACK_PYTHONEXE

🧹 Bug fixes:

  • Fixed Qt6 compatibility issue with QFontDatabase

Version 3.0

See full changelog here.

v3.1.0

13 Oct 15:43
Compare
Choose a tag to compare

guidata Releases

Version 3.1.0

⚠ Exceptionnally, this release contains the following API breaking changes:

  • Moved utils.update_dataset to dataset.conv.update_dataset
  • Moved utils.restore_dataset to dataset.conv.restore_dataset

✔ API simplification (backward compatible):

  • Dataset items may now be imported from guidata.dataset instead of guidata.dataset.dataitems
  • Dataset types may now be imported from guidata.dataset instead of guidata.dataset.datatypes
  • Examples:
    • from guidata.dataset.dataitems import FloatItem becomes from guidata.dataset import FloatItem

    • from guidata.dataset.datatypes import DataSet becomes from guidata.dataset import DataSet

    • Or you may now write:

      import guidata.dataset as gds
      
      class MyParameters(gds.DataSet):
          """My parameters"""
          freq = gds.FloatItem("Frequency", default=1.0, min=0.0, nonzero=True)
          amp = gds.FloatItem("Amplitude", default=1.0, min=0.0)

💥 New features:

  • New dataset.create_dataset_from_dict: create a dataset from a dictionary,
    using keys and values to create the dataset items
  • New dataset.create_dataset_from_func: create a dataset from a function signature,
    using type annotations and default values to create the dataset items
  • dataset.dataitems.StringItem:
    • Added argument password to hide text (useful for passwords)
    • Added argument regexp to validate text using a regular expression
  • dataset.dataitems.FileSaveItem, dataset.dataitems.FileOpenItem,
    dataset.dataitems.FilesOpenItem and dataset.dataitems.DirectoryItem:
    added argument regexp to validate file/dir name using a regular expression
  • dataset.dataitems.DictItem: added support for HDF5 and JSON serialization
  • dataset.io.h5fmt and dataset.io.jsonfmt: added support for lists and dictionnaries serialization

♻ New PlotPyStack internal features:

  • widgets.about: handle about dialog box informations (Python, Qt, Qt bindings, ...)
  • Renamed development environment variable GUIDATA_PYTHONEXE to PPSTACK_PYTHONEXE

🧹 Bug fixes:

  • Fixed Qt6 compatibility issue with QFontDatabase

Version 3.0

See full changelog here.

v3.0.6 - Maintenance release

08 Oct 16:43
Compare
Choose a tag to compare

Version 3.0.6

Bug fixes:

  • widgets.console.interpreter: replaced threading.Thread.isAlive (deprecated since Python 3.8)

Other changes:

  • DataSet.edit, DataSet.view and DataSetGroup.edit: added missing arguments size and wordwrap

  • Documentation: added check-list before submitting a patch (see contribute.rst file)

  • Fixed some typing annotations and docstrings, as well as Pylint false positives

  • Removed unused functions from guidata.utils.encoding module:

    • transcode
    • getfilesystemencoding
  • Added missing docstrings and typing annotations in modules:

    • guidata.dataset.qtitemwidgets
    • guidata.dataset.qtwidgets
    • guidata.utils.encoding
    • guidata.utils.misc

Version 3.0

See full changelog here.

v3.0.5 - Fixed compatibility with PySide6

26 Sep 16:20
Compare
Choose a tag to compare

Version 3.0.5

Bug fixes:

  • Issue #65 - QVariant import erroneously used in typing annotations

Other changes:

  • tests.test_callbacks: added an example of a callback function for dynamically changing the list of choices of a ChoiceItem object

Version 3.0

See full changelog here.