Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions datalab/adapters_metadata/base_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@

from __future__ import annotations

import warnings
from abc import ABC, abstractmethod
from typing import TYPE_CHECKING, Any, ClassVar, Generator

import guidata.dataset as gds
from sigima.objects import ImageObj, SignalObj

from datalab.config import _
from datalab.utils.datasetjson import decode_dataset_json

if TYPE_CHECKING:
import pandas as pd
from sigima.objects.scalar import GeometryResult, TableResult
Expand Down Expand Up @@ -175,11 +179,15 @@ def get_param(self) -> gds.DataSet | None:
"""Get parameter dataset associated with this result.

Returns:
Parameter dataset if present, None otherwise
Parameter dataset if present and readable (a warning is emitted for
stored parameters that cannot be decoded), None otherwise
"""
param_json = self.result.attrs.get("param_json")
if param_json is not None:
return gds.json_to_dataset(param_json)
try:
return decode_dataset_json(param_json)
except ValueError:
warnings.warn(_("Failed to deserialize analysis parameters from JSON."))
return None

def remove_from(self, obj: SignalObj | ImageObj) -> None:
Expand Down
7 changes: 4 additions & 3 deletions datalab/gui/creation.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
)

from datalab.config import _
from datalab.utils.datasetjson import decode_dataset_json

if TYPE_CHECKING:
from qtpy import QtWidgets as QW
Expand Down Expand Up @@ -117,15 +118,15 @@ def extract_creation_parameters(obj: SignalObj | ImageObj) -> gds.DataSet | None
raise ValueError(
"Peak parameterization set on non-peak creation parameters"
)
return gds.json_to_dataset(dataset_json)
return decode_dataset_json(dataset_json)

dataset_json = options[LEGACY_CREATION_PARAMETERS_OPTION]
if not isinstance(dataset_json, str):
raise ValueError("Legacy creation parameters must contain DataSet JSON")
raw_params = _decode_dataset_json(dataset_json)
if raw_params.get("class_name") in {"GaussParam", "LorentzParam", "VoigtParam"}:
validate_peak_creation_params(raw_params)
return gds.json_to_dataset(dataset_json)
return decode_dataset_json(dataset_json)


def convert_legacy_creation_parameters(
Expand All @@ -150,7 +151,7 @@ def convert_legacy_creation_parameters(
raise ValueError("Object has no legacy creation parameters")
raw_params = _decode_dataset_json(dataset_json)
converted = convert_legacy_peak_creation_params(raw_params)
param = gds.json_to_dataset(json.dumps(converted))
param = decode_dataset_json(json.dumps(converted))
insert_creation_parameters(obj, param)
return param

Expand Down
5 changes: 3 additions & 2 deletions datalab/gui/processor/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
from datalab.gui.processor.execution import CANCELLED, ExecutionService
from datalab.history.effects import capture_effects
from datalab.objectmodel import get_title_reference, get_uuid, patch_title_with_ids
from datalab.utils.datasetjson import decode_dataset_json
from datalab.utils.qthelpers import create_progress_bar, qt_try_except

if TYPE_CHECKING:
Expand Down Expand Up @@ -106,10 +107,10 @@ def set_param_from_json(self, param_json: str | list[str]) -> None:
try:
if isinstance(param_json, list):
# Handle list of JSON strings
self.param = [gds.json_to_dataset(p) for p in param_json]
self.param = [decode_dataset_json(p) for p in param_json]
else:
# Handle single JSON string
self.param = gds.json_to_dataset(param_json)
self.param = decode_dataset_json(param_json)
except Exception: # pylint: disable=broad-except
warnings.warn(_("Failed to deserialize processing parameters from JSON."))
self.param = None
Expand Down
9 changes: 5 additions & 4 deletions datalab/history/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@
from typing import Any

import numpy as np
from guidata.dataset.conv import dataset_to_json, json_to_dataset
from guidata.dataset.conv import dataset_to_json
from guidata.dataset.datatypes import DataSet
from qtpy import QtCore as QC
from sigima.objects.base import BaseROI

from datalab.config import _
from datalab.utils.datasetjson import decode_dataset_json

_TRUSTED_ROI_MODULE_PREFIX = "sigima."

Expand Down Expand Up @@ -162,7 +163,7 @@ def decode_kwargs(kwargs: dict[str, Any]) -> dict[str, Any]:
for key, value in kwargs.items():
if isinstance(value, dict) and _DATASET_MARKER in value:
try:
decoded[key] = json_to_dataset(value[_DATASET_MARKER])
decoded[key] = decode_dataset_json(value[_DATASET_MARKER])
except (TypeError, ValueError, KeyError):
warnings.warn(
_("Failed to deserialize history DataSet kwarg %r.") % key
Expand All @@ -183,7 +184,7 @@ def decode_kwargs(kwargs: dict[str, Any]) -> dict[str, Any]:
elif isinstance(value, dict) and _DATASET_LIST_MARKER in value:
try:
decoded[key] = [
json_to_dataset(item) for item in value[_DATASET_LIST_MARKER]
decode_dataset_json(item) for item in value[_DATASET_LIST_MARKER]
]
except (TypeError, ValueError, KeyError):
warnings.warn(
Expand All @@ -200,7 +201,7 @@ def copy_history_value(value: Any) -> Any:
if callable(value):
raise TypeError("History duplication does not support callable kwargs")
if isinstance(value, DataSet):
return json_to_dataset(dataset_to_json(value))
return decode_dataset_json(dataset_to_json(value))
if isinstance(value, BaseROI):
return decode_roi(encode_roi(value))
if isinstance(value, dict):
Expand Down
3 changes: 3 additions & 0 deletions datalab/locale/fr/LC_MESSAGES/datalab.po
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "Failed to deserialize analysis parameters from JSON."
msgstr "Échec de la désérialisation des paramètres d'analyse depuis le format JSON."

msgid "Results"
msgstr "Résultats"

Expand Down
Loading
Loading