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
238 changes: 118 additions & 120 deletions 3rdparty/constraints.txt

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion 3rdparty/mypy-requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
mypy==1.11.2
mypy==1.19.1
115 changes: 97 additions & 18 deletions 3rdparty/mypy_lockfile.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
// "CPython==3.12.*"
// ],
// "generated_with_requirements": [
// "mypy==1.11.2"
// "mypy==1.19.1"
// ],
// "manylinux": "manylinux2014",
// "requirement_constraints": [],
Expand All @@ -33,47 +33,108 @@
"artifacts": [
{
"algorithm": "sha256",
"hash": "b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12",
"url": "https://files.pythonhosted.org/packages/42/3a/bdf730640ac523229dd6578e8a581795720a9321399de494374afc437ec5/mypy-1.11.2-py3-none-any.whl"
"hash": "703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c",
"url": "https://files.pythonhosted.org/packages/1f/48/77bc05c4cc232efae6c5592c0095034390992edbd5bae8d6cf1263bb7157/librt-0.7.3-cp312-cp312-musllinux_1_2_x86_64.whl"
},
{
"algorithm": "sha256",
"hash": "06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36",
"url": "https://files.pythonhosted.org/packages/04/e4/1a9051e2ef10296d206519f1df13d2cc896aea39e8683302f89bf5792a59/mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl"
"hash": "d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f",
"url": "https://files.pythonhosted.org/packages/02/10/b612a9944ebd39fa143c7e2e2d33f2cb790205e025ddd903fb509a3a3bb3/librt-0.7.3-cp312-cp312-musllinux_1_2_i686.whl"
},
{
"algorithm": "sha256",
"hash": "e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318",
"url": "https://files.pythonhosted.org/packages/35/3a/ed7b12ecc3f6db2f664ccf85cb2e004d3e90bec928e9d7be6aa2f16b7cdf/mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl"
"hash": "aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed",
"url": "https://files.pythonhosted.org/packages/02/69/3ba05b73ab29ccbe003856232cea4049769be5942d799e628d1470ed1694/librt-0.7.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl"
},
{
"algorithm": "sha256",
"hash": "7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79",
"url": "https://files.pythonhosted.org/packages/5c/86/5d7cbc4974fd564550b80fbb8103c05501ea11aa7835edf3351d90095896/mypy-1.11.2.tar.gz"
"hash": "c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e",
"url": "https://files.pythonhosted.org/packages/22/ad/d7c2671e7bf6c285ef408aa435e9cd3fdc06fd994601e1f2b242df12034f/librt-0.7.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl"
},
{
"algorithm": "sha256",
"hash": "3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca",
"url": "https://files.pythonhosted.org/packages/b6/49/ee5adf6a49ff13f4202d949544d3d08abb0ea1f3e7f2a6d5b4c10ba0360a/mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl"
"hash": "0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3",
"url": "https://files.pythonhosted.org/packages/29/90/ed8595fa4e35b6020317b5ea8d226a782dcbac7a997c19ae89fb07a41c66/librt-0.7.3-cp312-cp312-macosx_10_13_x86_64.whl"
},
{
"algorithm": "sha256",
"hash": "6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987",
"url": "https://files.pythonhosted.org/packages/f3/3c/350a9da895f8a7e87ade0028b962be0252d152e0c2fbaafa6f0658b4d0d4/mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl"
"hash": "e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60",
"url": "https://files.pythonhosted.org/packages/79/f3/b0c4703d5ffe9359b67bb2ccb86c42d4e930a363cfc72262ac3ba53cff3e/librt-0.7.3-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl"
},
{
"algorithm": "sha256",
"hash": "3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798",
"url": "https://files.pythonhosted.org/packages/b3/d9/6f3d3fcf5e5543ed8a60cc70fa7d50508ed60b8a10e9af6d2058159ab54e/librt-0.7.3.tar.gz"
},
{
"algorithm": "sha256",
"hash": "2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18",
"url": "https://files.pythonhosted.org/packages/dd/f6/6a20702a07b41006cb001a759440cb6b5362530920978f64a2b2ae2bf729/librt-0.7.3-cp312-cp312-macosx_11_0_arm64.whl"
},
{
"algorithm": "sha256",
"hash": "a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b",
"url": "https://files.pythonhosted.org/packages/f4/94/d13f57193148004592b618555f296b41d2d79b1dc814ff8b3273a0bf1546/librt-0.7.3-cp312-cp312-musllinux_1_2_aarch64.whl"
}
],
"project_name": "librt",
"requires_dists": [],
"requires_python": ">=3.9",
"version": "0.7.3"
},
{
"artifacts": [
{
"algorithm": "sha256",
"hash": "f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247",
"url": "https://files.pythonhosted.org/packages/8d/f4/4ce9a05ce5ded1de3ec1c1d96cf9f9504a04e54ce0ed55cfa38619a32b8d/mypy-1.19.1-py3-none-any.whl"
},
{
"algorithm": "sha256",
"hash": "c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8",
"url": "https://files.pythonhosted.org/packages/00/be/dd56c1fd4807bc1eba1cf18b2a850d0de7bacb55e158755eb79f77c41f8e/mypy-1.19.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl"
},
{
"algorithm": "sha256",
"hash": "a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1",
"url": "https://files.pythonhosted.org/packages/06/8a/19bfae96f6615aa8a0604915512e0289b1fad33d5909bf7244f02935d33a/mypy-1.19.1-cp312-cp312-macosx_10_13_x86_64.whl"
},
{
"algorithm": "sha256",
"hash": "34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a",
"url": "https://files.pythonhosted.org/packages/6d/42/332951aae42b79329f743bf1da088cd75d8d4d9acc18fbcbd84f26c1af4e/mypy-1.19.1-cp312-cp312-musllinux_1_2_x86_64.whl"
},
{
"algorithm": "sha256",
"hash": "b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2",
"url": "https://files.pythonhosted.org/packages/89/cc/2db6f0e95366b630364e09845672dbee0cbf0bbe753a204b29a944967cd9/mypy-1.19.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl"
},
{
"algorithm": "sha256",
"hash": "ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e",
"url": "https://files.pythonhosted.org/packages/a5/34/3e63879ab041602154ba2a9f99817bb0c85c4df19a23a1443c8986e4d565/mypy-1.19.1-cp312-cp312-macosx_11_0_arm64.whl"
},
{
"algorithm": "sha256",
"hash": "19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba",
"url": "https://files.pythonhosted.org/packages/f5/db/4efed9504bc01309ab9c2da7e352cc223569f05478012b5d9ece38fd44d2/mypy-1.19.1.tar.gz"
}
],
"project_name": "mypy",
"requires_dists": [
"librt>=0.6.2; platform_python_implementation != \"PyPy\"",
"lxml; extra == \"reports\"",
"mypy-extensions>=1.0.0",
"mypy_extensions>=1.0.0",
"orjson; extra == \"faster-cache\"",
"pathspec>=0.9.0",
"pip; extra == \"install-types\"",
"psutil>=4.0; extra == \"dmypy\"",
"setuptools>=50; extra == \"mypyc\"",
"tomli>=1.1.0; python_version < \"3.11\"",
"typing-extensions>=4.6.0"
"typing_extensions>=4.6.0"
],
"requires_python": ">=3.8",
"version": "1.11.2"
"requires_python": ">=3.9",
"version": "1.19.1"
},
{
"artifacts": [
Expand All @@ -93,6 +154,24 @@
"requires_python": ">=3.8",
"version": "1.1.0"
},
{
"artifacts": [
{
"algorithm": "sha256",
"hash": "a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08",
"url": "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl"
},
{
"algorithm": "sha256",
"hash": "a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712",
"url": "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz"
}
],
"project_name": "pathspec",
"requires_dists": [],
"requires_python": ">=3.8",
"version": "0.12.1"
},
{
"artifacts": [
{
Expand Down Expand Up @@ -123,7 +202,7 @@
"pip_version": "24.2",
"prefer_older_binary": false,
"requirements": [
"mypy==1.11.2"
"mypy==1.19.1"
],
"requires_python": [
"==3.12.*"
Expand Down
50 changes: 25 additions & 25 deletions 3rdparty/pytest_lockfile.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,71 +39,71 @@
"artifacts": [
{
"algorithm": "sha256",
"hash": "159d50c0b12e060b15ed3d39f87ed43d4f7f7ad40b8a534f4dd331adbb51104a",
"url": "https://files.pythonhosted.org/packages/ce/a3/43b749004e3c09452e39bb56347a008f0a0668aad37324a99b5c8ca91d9e/coverage-7.12.0-py3-none-any.whl"
"hash": "850d2998f380b1e266459ca5b47bc9e7daf9af1d070f66317972f382d46f1904",
"url": "https://files.pythonhosted.org/packages/8d/4c/1968f32fb9a2604645827e11ff84a31e59d532e01995f904723b4f5328b3/coverage-7.13.0-py3-none-any.whl"
},
{
"algorithm": "sha256",
"hash": "29644c928772c78512b48e14156b81255000dcfd4817574ff69def189bcb3647",
"url": "https://files.pythonhosted.org/packages/02/bf/638c0427c0f0d47638242e2438127f3c8ee3cfc06c7fdeb16778ed47f836/coverage-7.12.0-cp312-cp312-macosx_10_13_x86_64.whl"
"hash": "5f5d9bd30756fff3e7216491a0d6d520c448d5124d3d8e8f56446d6412499e74",
"url": "https://files.pythonhosted.org/packages/0d/f8/972a5affea41de798691ab15d023d3530f9f56a72e12e243f35031846ff7/coverage-7.13.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl"
},
{
"algorithm": "sha256",
"hash": "8638cbb002eaa5d7c8d04da667813ce1067080b9a91099801a0053086e52b736",
"url": "https://files.pythonhosted.org/packages/08/e1/706fae6692a66c2d6b871a608bbde0da6281903fa0e9f53a39ed441da36a/coverage-7.12.0-cp312-cp312-macosx_11_0_arm64.whl"
"hash": "3ab483ea0e251b5790c2aac03acde31bff0c736bf8a86829b89382b407cd1c3b",
"url": "https://files.pythonhosted.org/packages/19/98/8df9e1af6a493b03694a1e8070e024e7d2cdc77adedc225a35e616d505de/coverage-7.13.0-cp312-cp312-musllinux_1_2_riscv64.whl"
},
{
"algorithm": "sha256",
"hash": "51777647a749abdf6f6fd8c7cffab12de68ab93aab15efc72fbbb83036c2a068",
"url": "https://files.pythonhosted.org/packages/15/40/c9b29cdb8412c837cdcbc2cfa054547dd83affe6cbbd4ce4fdb92b6ba7d1/coverage-7.12.0-cp312-cp312-musllinux_1_2_i686.whl"
"hash": "581f086833d24a22c89ae0fe2142cfaa1c92c930adf637ddf122d55083fb5a0f",
"url": "https://files.pythonhosted.org/packages/2b/11/30d71ae5d6e949ff93b2a79a2c1b4822e00423116c5c6edfaeef37301396/coverage-7.13.0-cp312-cp312-macosx_11_0_arm64.whl"
},
{
"algorithm": "sha256",
"hash": "e949ebf60c717c3df63adb4a1a366c096c8d7fd8472608cd09359e1bd48ef59f",
"url": "https://files.pythonhosted.org/packages/41/e5/38228f31b2c7665ebf9bdfdddd7a184d56450755c7e43ac721c11a4b8dab/coverage-7.12.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl"
"hash": "583221913fbc8f53b88c42e8dbb8fca1d0f2e597cb190ce45916662b8b9d9621",
"url": "https://files.pythonhosted.org/packages/5b/b6/51b5d1eb6fcbb9a1d5d6984e26cbe09018475c2922d554fd724dd0f056ee/coverage-7.13.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl"
},
{
"algorithm": "sha256",
"hash": "5bcead88c8423e1855e64b8057d0544e33e4080b95b240c2a355334bb7ced937",
"url": "https://files.pythonhosted.org/packages/70/81/b653329b5f6302c08d683ceff6785bc60a34be9ae92a5c7b63ee7ee7acec/coverage-7.12.0-cp312-cp312-musllinux_1_2_x86_64.whl"
"hash": "0a3a30f0e257df382f5f9534d4ce3d4cf06eafaf5192beb1a7bd066cb10e78fb",
"url": "https://files.pythonhosted.org/packages/79/c2/fce80fc6ded8d77e53207489d6065d0fed75db8951457f9213776615e0f5/coverage-7.13.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl"
},
{
"algorithm": "sha256",
"hash": "fc11e0a4e372cb5f282f16ef90d4a585034050ccda536451901abfb19a57f40c",
"url": "https://files.pythonhosted.org/packages/89/26/4a96807b193b011588099c3b5c89fbb05294e5b90e71018e065465f34eb6/coverage-7.12.0.tar.gz"
"hash": "a23e5a1f8b982d56fa64f8e442e037f6ce29322f1f9e6c2344cd9e9f4407ee57",
"url": "https://files.pythonhosted.org/packages/8a/56/116513aee860b2c7968aa3506b0f59b22a959261d1dbf3aea7b4450a7520/coverage-7.13.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl"
},
{
"algorithm": "sha256",
"hash": "083631eeff5eb9992c923e14b810a179798bb598e6a0dd60586819fc23be6e60",
"url": "https://files.pythonhosted.org/packages/a9/8b/eb0231d0540f8af3ffda39720ff43cb91926489d01524e68f60e961366e4/coverage-7.12.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl"
"hash": "0b3d67d31383c4c68e19a88e28fc4c2e29517580f1b0ebec4a069d502ce1e0bf",
"url": "https://files.pythonhosted.org/packages/9b/f1/2619559f17f31ba00fc40908efd1fbf1d0a5536eb75dc8341e7d660a08de/coverage-7.13.0-cp312-cp312-macosx_10_13_x86_64.whl"
},
{
"algorithm": "sha256",
"hash": "b1518ecbad4e6173f4c6e6c4a46e49555ea5679bf3feda5edb1b935c7c44e8a0",
"url": "https://files.pythonhosted.org/packages/ba/51/bb163933d195a345c6f63eab9e55743413d064c291b6220df754075c2769/coverage-7.12.0-cp312-cp312-musllinux_1_2_aarch64.whl"
"hash": "a394aa27f2d7ff9bc04cf703817773a59ad6dfbd577032e690f961d2460ee936",
"url": "https://files.pythonhosted.org/packages/b6/45/2c665ca77ec32ad67e25c77daf1cee28ee4558f3bc571cdbaf88a00b9f23/coverage-7.13.0.tar.gz"
},
{
"algorithm": "sha256",
"hash": "42435d46d6461a3b305cdfcad7cdd3248787771f53fe18305548cba474e6523b",
"url": "https://files.pythonhosted.org/packages/c8/da/b3131e20ba07a0de4437a50ef3b47840dfabf9293675b0cd5c2c7f66dd61/coverage-7.12.0-cp312-cp312-musllinux_1_2_riscv64.whl"
"hash": "9b01c22bc74a7fb44066aaf765224c0d933ddf1f5047d6cdfe4795504a4493f8",
"url": "https://files.pythonhosted.org/packages/d6/75/074476d64248fbadf16dfafbf93fdcede389ec821f74ca858d7c87d2a98c/coverage-7.13.0-cp312-cp312-musllinux_1_2_aarch64.whl"
},
{
"algorithm": "sha256",
"hash": "99d5415c73ca12d558e07776bd957c4222c687b9f1d26fa0e1b57e3598bdcde8",
"url": "https://files.pythonhosted.org/packages/e9/a1/67fb52af642e974d159b5b379e4d4c59d0ebe1288677fbd04bbffe665a82/coverage-7.12.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl"
"hash": "1d84e91521c5e4cb6602fe11ece3e1de03b2760e14ae4fcf1a4b56fa3c801fcd",
"url": "https://files.pythonhosted.org/packages/d8/71/f8679231f3353018ca66ef647fa6fe7b77e6bff7845be54ab84f86233363/coverage-7.13.0-cp312-cp312-musllinux_1_2_x86_64.whl"
},
{
"algorithm": "sha256",
"hash": "6d907ddccbca819afa2cd014bc69983b146cca2735a0b1e6259b2a6c10be1e70",
"url": "https://files.pythonhosted.org/packages/ec/4b/df78e4c8188f9960684267c5a4897836f3f0f20a20c51606ee778a1d9749/coverage-7.12.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl"
"hash": "898cce66d0836973f48dda4e3514d863d70142bdf6dfab932b9b6a90ea5b222d",
"url": "https://files.pythonhosted.org/packages/f2/d2/aa4f8acd1f7c06024705c12609d8698c51b27e4d635d717cd1934c9668e2/coverage-7.13.0-cp312-cp312-musllinux_1_2_i686.whl"
}
],
"project_name": "coverage",
"requires_dists": [
"tomli; python_full_version <= \"3.11.0a6\" and extra == \"toml\""
],
"requires_python": ">=3.10",
"version": "7.12.0"
"version": "7.13.0"
},
{
"artifacts": [
Expand Down
18 changes: 6 additions & 12 deletions src/python/arcor2/cached.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import copy
from dataclasses import dataclass
from datetime import datetime, timezone
from typing import TYPE_CHECKING, Iterator, ValuesView
from typing import Iterator, ValuesView

from arcor2.data import common as cmn
from arcor2.exceptions import Arcor2Exception
Expand Down Expand Up @@ -31,14 +31,8 @@ def __init__(self, data: cmn.Scene | cmn.Project | CachedScene | CachedProject)
self.int_modified: None | datetime = data.int_modified


class UpdateableMixin:
if TYPE_CHECKING:
__slots__ = "modified", "int_modified"

modified: None | datetime = None
int_modified: None | datetime = None
else:
__slots__ = ()
class UpdateableMixin(CachedBase):
__slots__ = ()

def update_modified(self) -> None:
self.int_modified = datetime.now(tz=timezone.utc)
Expand Down Expand Up @@ -148,11 +142,11 @@ def get_object_by_name(self, object_method: str) -> str:
raise Arcor2Exception(f"Object with method {object_method} was not found")


class UpdateableCachedScene(UpdateableMixin, CachedScene):
class UpdateableCachedScene(CachedScene, UpdateableMixin):
__slots__ = ()

def __init__(self, scene: cmn.Scene | CachedScene):
super(UpdateableCachedScene, self).__init__(copy.deepcopy(scene))
super().__init__(copy.deepcopy(scene))

def upsert_object(self, obj: cmn.SceneObject) -> None:
self._objects[obj.id] = obj
Expand Down Expand Up @@ -589,7 +583,7 @@ def action_from_name(self, name: str) -> cmn.Action:
raise CachedProjectException(f"Action {name} in project {self.name} not found.")


class UpdateableCachedProject(UpdateableMixin, CachedProject):
class UpdateableCachedProject(CachedProject, UpdateableMixin):
__slots__ = ()

def __init__(self, project: cmn.Project | CachedProject):
Expand Down
8 changes: 4 additions & 4 deletions src/python/arcor2/data/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def uid(prefix: str) -> str:
class StrEnum(BuiltinStrEnum):
@classmethod
def set(cls) -> set[str]:
return set(map(lambda c: c.value, cls)) # type: ignore
return {c.value for c in cls}


@unique
Expand All @@ -42,7 +42,7 @@ def set(cls) -> set[int]:


class FlowTypes(StrEnum):
DEFAULT: str = "default"
DEFAULT = "default"


class LinkToActionOutput(NamedTuple):
Expand Down Expand Up @@ -407,8 +407,8 @@ class ActionParameterException(Arcor2Exception):
@dataclass
class ActionParameter(Parameter):
class TypeEnum(StrEnum):
PROJECT_PARAMETER: str = "project_parameter"
LINK: str = "link"
PROJECT_PARAMETER = "project_parameter"
LINK = "link"

def str_from_value(self) -> str:
val = json.loads(self.value)
Expand Down
Loading
Loading