diff --git a/meshroom/common/__init__.py b/meshroom/common/__init__.py index 8607447b13..3331e9c680 100644 --- a/meshroom/common/__init__.py +++ b/meshroom/common/__init__.py @@ -8,13 +8,14 @@ BaseObject = None Variant = None VariantList = None +JSValue = None if meshroom.backend == meshroom.Backend.PYSIDE: # PySide types - from .qt import DictModel, ListModel, Slot, Signal, Property, BaseObject, Variant, VariantList + from .qt import DictModel, ListModel, Slot, Signal, Property, BaseObject, Variant, VariantList, JSValue elif meshroom.backend == meshroom.Backend.STANDALONE: # Core types - from .core import DictModel, ListModel, Slot, Signal, Property, BaseObject, Variant, VariantList + from .core import DictModel, ListModel, Slot, Signal, Property, BaseObject, Variant, VariantList, JSValue class _BaseModel: diff --git a/meshroom/common/core.py b/meshroom/common/core.py index 54ba9cbef9..830de126bd 100644 --- a/meshroom/common/core.py +++ b/meshroom/common/core.py @@ -146,3 +146,4 @@ def parent(self): BaseObject = CoreObject Variant = object VariantList = object +JSValue = None diff --git a/meshroom/common/qt.py b/meshroom/common/qt.py index cb1087d5d1..ee7c0f6238 100644 --- a/meshroom/common/qt.py +++ b/meshroom/common/qt.py @@ -1,4 +1,4 @@ -from PySide2 import QtCore +from PySide2 import QtCore, QtQml class QObjectListModel(QtCore.QAbstractListModel): @@ -374,3 +374,4 @@ def sort(self): BaseObject = QtCore.QObject Variant = "QVariant" VariantList = "QVariantList" +JSValue = QtQml.QJSValue diff --git a/meshroom/core/desc.py b/meshroom/core/desc.py index 1a571a72c1..84f6f10ca7 100644 --- a/meshroom/core/desc.py +++ b/meshroom/core/desc.py @@ -1,10 +1,9 @@ -from meshroom.common import BaseObject, Property, Variant, VariantList +from meshroom.common import BaseObject, Property, Variant, VariantList, JSValue from meshroom.core import pyCompatibility from enum import Enum # available by default in python3. For python2: "pip install enum34" import math import os import psutil -import PySide2 import ast class Attribute(BaseObject): @@ -69,7 +68,7 @@ def __init__(self, elementDesc, name, label, description, group='allParams', adv joinChar = Property(str, lambda self: self._joinChar, constant=True) def validateValue(self, value): - if isinstance(value, PySide2.QtQml.QJSValue): + if JSValue is not None and isinstance(value, JSValue): # Note: we could use isArray(), property("length").toInt() to retrieve all values raise ValueError("ListAttribute.validateValue: cannot recognize QJSValue. Please, use JSON.stringify(value) in QML.") if isinstance(value, pyCompatibility.basestring): @@ -105,7 +104,7 @@ def __init__(self, groupDesc, name, label, description, group='allParams', advan def validateValue(self, value): """ Ensure value is compatible with the group description and convert value if needed. """ - if isinstance(value, PySide2.QtQml.QJSValue): + if JSValue is not None and isinstance(value, JSValue): # Note: we could use isArray(), property("length").toInt() to retrieve all values raise ValueError("GroupAttribute.validateValue: cannot recognize QJSValue. Please, use JSON.stringify(value) in QML.") if isinstance(value, pyCompatibility.basestring):