Common func for ModelItem/POSEvent value serializ

This commit is contained in:
miruka 2019-11-07 03:43:05 -04:00
parent 4a6f634f7a
commit acd69108e8
3 changed files with 14 additions and 19 deletions

View File

@ -1,6 +1,7 @@
from enum import Enum
from typing import Any, Dict, Optional from typing import Any, Dict, Optional
from ..utils import serialize_value_for_qml
class ModelItem: class ModelItem:
def __new__(cls, *_args, **_kwargs) -> "ModelItem": def __new__(cls, *_args, **_kwargs) -> "ModelItem":
@ -24,14 +25,9 @@ class ModelItem:
@property @property
def serialized(self) -> Dict[str, Any]: def serialized(self) -> Dict[str, Any]:
return { return {
name: self._process_attr(getattr(self, name)) for name in dir(self) name: serialize_value_for_qml(getattr(self, name))
for name in dir(self)
if not ( if not (
name.startswith("_") or name in ("parent_model", "serialized") name.startswith("_") or name in ("parent_model", "serialized")
) )
} }
@staticmethod
def _process_attr(value: Any) -> Any:
if hasattr(value, "__class__") and issubclass(value.__class__, Enum):
return value.value
return value

View File

@ -1,10 +1,10 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from enum import Enum
from typing import Any, Dict, List, Optional, Union from typing import Any, Dict, List, Optional, Union
import pyotherside import pyotherside
from .models import SyncId from .models import SyncId
from .utils import serialize_value_for_qml
@dataclass @dataclass
@ -14,20 +14,12 @@ class PyOtherSideEvent:
def __post_init__(self) -> None: def __post_init__(self) -> None:
# CPython >= 3.6 or any Python >= 3.7 needed for correct dict order # CPython >= 3.6 or any Python >= 3.7 needed for correct dict order
args = [ args = [
self._process_field(getattr(self, field)) serialize_value_for_qml(getattr(self, field))
for field in self.__dataclass_fields__ # type: ignore for field in self.__dataclass_fields__ # type: ignore
] ]
pyotherside.send(type(self).__name__, *args) pyotherside.send(type(self).__name__, *args)
@staticmethod
def _process_field(value: Any) -> Any:
if hasattr(value, "__class__") and issubclass(value.__class__, Enum):
return value.value
return value
@dataclass @dataclass
class ExitRequested(PyOtherSideEvent): class ExitRequested(PyOtherSideEvent):
"""Request for the application to exit.""" """Request for the application to exit."""

View File

@ -3,7 +3,7 @@ import html
import xml.etree.cElementTree as xml_etree # FIXME: bandit warning import xml.etree.cElementTree as xml_etree # FIXME: bandit warning
from enum import Enum from enum import Enum
from enum import auto as autostr from enum import auto as autostr
from typing import IO, Tuple, Union from typing import IO, Any, Tuple, Union
import filetype import filetype
@ -62,3 +62,10 @@ def plain2html(text: str) -> str:
return html.escape(text)\ return html.escape(text)\
.replace("\n", "<br>")\ .replace("\n", "<br>")\
.replace("\t", "&nbsp;" * 4) .replace("\t", "&nbsp;" * 4)
def serialize_value_for_qml(value: Any) -> Any:
if hasattr(value, "__class__") and issubclass(value.__class__, Enum):
return value.value
return value