From fb33e3d8069173dd93d1d4a043d96f56514ee5ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20Mas=C5=82owski?= Date: Tue, 1 Jul 2025 15:24:21 +0000 Subject: [PATCH 1/6] Use base and error subpackage instead if strict msgspec package --- package/test_tools/__private/block_log.py | 5 ++--- package/test_tools/__private/process/node_arguments.py | 2 +- package/test_tools/__private/process/node_commons.py | 5 ++--- package/test_tools/__private/process/node_config.py | 2 +- package/test_tools/__private/wallet/wallet_api.py | 4 ++-- 5 files changed, 8 insertions(+), 10 deletions(-) diff --git a/package/test_tools/__private/block_log.py b/package/test_tools/__private/block_log.py index 3b2b9964e..126f9ba89 100644 --- a/package/test_tools/__private/block_log.py +++ b/package/test_tools/__private/block_log.py @@ -8,12 +8,11 @@ import typing from pathlib import Path from typing import ClassVar, Final, Literal, overload -import msgspec - from schemas.apis.block_api.fundaments_of_responses import ( BlockLogUtilSignedBlockBaseTransaction, BlockLogUtilSignedBlockBaseTransactionLegacy, ) +from schemas.errors import ValidationError from test_tools.__private import paths_to_executables from test_tools.__private.exceptions import BlockLogError, BlockLogUtilError, MissingBlockLogArtifactsError from wax.helpy._interfaces.time import Time, TimeFormats @@ -238,7 +237,7 @@ class BlockLog: if expected_str in output: try: return BlockLogUtilResultTransaction.parse_builtins(json.loads(output)) - except msgspec.ValidationError: + except ValidationError: return BlockLogUtilResultTransactionLegacy.parse_builtins(json.loads(output)) raise BlockLogUtilError(f"Block {block_number} not found or response malformed: `{output}`") diff --git a/package/test_tools/__private/process/node_arguments.py b/package/test_tools/__private/process/node_arguments.py index 29774f26a..c88eb8950 100644 --- a/package/test_tools/__private/process/node_arguments.py +++ b/package/test_tools/__private/process/node_arguments.py @@ -5,8 +5,8 @@ from typing import TYPE_CHECKING, Any, Literal, overload from beekeepy.handle.runnable import Arguments from beekeepy.interfaces import HttpUrl, P2PUrl, Url, WsUrl -from msgspec import field +from schemas.base import field from test_tools.__private.process.node_commons import PathQuoted, QuotedMarker, StringQuoted, UniqueList if TYPE_CHECKING: diff --git a/package/test_tools/__private/process/node_commons.py b/package/test_tools/__private/process/node_commons.py index a3409e54c..f583fb66c 100644 --- a/package/test_tools/__private/process/node_commons.py +++ b/package/test_tools/__private/process/node_commons.py @@ -4,8 +4,7 @@ from collections.abc import Iterable from pathlib import Path from typing import TYPE_CHECKING, Any, Generic, Literal, TypeVar, get_args -import msgspec - +from schemas.base import convert from schemas.fields.resolvables import Resolvable if TYPE_CHECKING: @@ -81,7 +80,7 @@ class UniqueList(list[T], Resolvable["UniqueList[T]", list[T]], Generic[T]): if len(value) == 0: return UniqueList() non_empty_str_t = get_args(incoming_cls)[0] - return UniqueList(msgspec.convert(value, type=list[non_empty_str_t])) # type: ignore[valid-type] + return UniqueList(convert(value, type=list[non_empty_str_t])) # type: ignore[valid-type] def serialize(self) -> Any: return list(self) diff --git a/package/test_tools/__private/process/node_config.py b/package/test_tools/__private/process/node_config.py index c4228adcb..f623912c3 100644 --- a/package/test_tools/__private/process/node_config.py +++ b/package/test_tools/__private/process/node_config.py @@ -5,8 +5,8 @@ from typing import Any, Final, TypeGuard, overload from beekeepy.handle.runnable import Config from beekeepy.interfaces import HttpUrl, P2PUrl, Url, WsUrl -from msgspec import field +from schemas.base import field from test_tools.__private.process.node_commons import ( BacktraceAllowedValues, PathQuoted, diff --git a/package/test_tools/__private/wallet/wallet_api.py b/package/test_tools/__private/wallet/wallet_api.py index 4bb95edfc..0a95b3a1e 100644 --- a/package/test_tools/__private/wallet/wallet_api.py +++ b/package/test_tools/__private/wallet/wallet_api.py @@ -93,7 +93,6 @@ from wax.exceptions import WaxValidationFailedError if TYPE_CHECKING: from collections.abc import Callable - import msgspec from beekeepy._interface.abc.synchronous.wallet import UnlockedWallet import schemas.apis.database_api.fundaments_of_reponses as fundaments_database_api @@ -125,6 +124,7 @@ if TYPE_CHECKING: ListRcDirectDelegations, ListWitnesses, ) + from schemas.base import Meta from schemas.fields.assets import AssetHbd, AssetVests from schemas.fields.hex import Hex from schemas.fields.hive_int import HiveInt @@ -1309,7 +1309,7 @@ class Api: @warn_if_only_result_set() def get_active_witnesses( self, include_future: bool, only_witnesses: bool = False, only_result: bool | None = None # noqa: ARG002 - ) -> Annotated[list[AccountName], msgspec.Meta(min_length=1, max_length=21)] | GetActiveWitnesses: + ) -> Annotated[list[AccountName], Meta(min_length=1, max_length=21)] | GetActiveWitnesses: """ Retrieves the list of active witnesses. -- GitLab From bcfe695c2b33772d0664168d0648037ef64ffbd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20Mas=C5=82owski?= Date: Tue, 1 Jul 2025 15:26:37 +0000 Subject: [PATCH 2/6] Remove HttpUrl import --- package/test_tools/__private/communication.py | 1 - 1 file changed, 1 deletion(-) diff --git a/package/test_tools/__private/communication.py b/package/test_tools/__private/communication.py index 2e4064921..c7dd58a60 100644 --- a/package/test_tools/__private/communication.py +++ b/package/test_tools/__private/communication.py @@ -15,7 +15,6 @@ from schemas._preconfigured_base_model import PreconfiguredBaseModel from schemas.operations import AnyLegacyOperation from beekeepy.exceptions import UnableToAcquireDatabaseLockError, UnableToAcquireForkdbLockError, CommunicationError from loguru import logger -from beekeepy.interfaces import HttpUrl from wax.helpy import Time -- GitLab From eccf41ca31eebd37d83e39e7b87f2ba5807071b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20Mas=C5=82owski?= Date: Tue, 1 Jul 2025 15:27:26 +0000 Subject: [PATCH 3/6] Use dict instead shallow_dict(shallow_dict is removed) --- package/test_tools/__private/communication.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/test_tools/__private/communication.py b/package/test_tools/__private/communication.py index c7dd58a60..ac5cdb9f1 100644 --- a/package/test_tools/__private/communication.py +++ b/package/test_tools/__private/communication.py @@ -25,7 +25,7 @@ class CommonJsonEncoder(json.JSONEncoder): if isinstance(o, JsonString): return o.serialize() if isinstance(o, PreconfiguredBaseModel): - return o.shallow_dict() + return o.dict() return super().default(o) -- GitLab From 3267dc300625597508bba0b8c7e9f41190a2de23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20Mas=C5=82owski?= Date: Tue, 1 Jul 2025 15:48:40 +0000 Subject: [PATCH 4/6] Use Test instead TestT and remove AssetNaiAmount --- .../wallet_tests/test_api_helper_methods.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/functional_tests/wallet_tests/test_api_helper_methods.py b/tests/functional_tests/wallet_tests/test_api_helper_methods.py index 4dbd4929e..79c1c45c7 100644 --- a/tests/functional_tests/wallet_tests/test_api_helper_methods.py +++ b/tests/functional_tests/wallet_tests/test_api_helper_methods.py @@ -3,8 +3,6 @@ from __future__ import annotations import pytest import test_tools as tt -from schemas.fields.assets._base import AssetNaiAmount - @pytest.fixture def node(request: pytest.FixtureRequest) -> tt.InitNode: @@ -41,7 +39,7 @@ def test_creation_of_huge_number_of_accounts(node: tt.InitNode, wallet: tt.Walle url="https://initminer.com", block_signing_key=tt.Account("initminer").public_key, props={ - "account_creation_fee": tt.Asset.TestT(amount=AssetNaiAmount(1)), + "account_creation_fee": tt.Asset.Test(amount=1), "maximum_block_size": 2097152, "hbd_interest_rate": 0, }, @@ -82,7 +80,7 @@ def test_creation_of_huge_number_of_accounts_and_import_keys(node: tt.InitNode, url="https://initminer.com", block_signing_key=tt.Account("initminer").public_key, props={ - "account_creation_fee": tt.Asset.TestT(amount=AssetNaiAmount(1)), + "account_creation_fee": tt.Asset.Test(amount=1), "maximum_block_size": 2097152, "hbd_interest_rate": 0, }, -- GitLab From 50b59b283bfc06e3ad609f50bebc4b0d16d22714 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20Mas=C5=82owski?= Date: Fri, 11 Jul 2025 05:02:12 +0000 Subject: [PATCH 5/6] Rename TestnetAssets policy to TestnetAssetsPolicy --- tests/conftest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 8bfdc80a5..9ff90592e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -8,7 +8,7 @@ from loguru import logger from test_tools.__private.scope.scope_fixtures import * # noqa: F403 from schemas.policies.policy import set_policies -from schemas.policies.testnet_assets import TestnetAssets +from schemas.policies.testnet_assets import TestnetAssetsPolicy @pytest.fixture(autouse=True) @@ -24,7 +24,7 @@ def pytest_sessionstart() -> None: @pytest.fixture(autouse=True) def _use_testnet_assets() -> None: - set_policies(TestnetAssets(use_testnet_assets=True)) + set_policies(TestnetAssetsPolicy(use_testnet_assets=True)) @pytest.fixture(name="node") -- GitLab From 73508e0eec1f16391f0f7692eb01ba4c6fb6f87c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20Mas=C5=82owski?= Date: Thu, 7 Aug 2025 08:11:13 +0000 Subject: [PATCH 6/6] Update wax, schemas, beekeepy dependencies --- poetry.lock | 35 ++++++++++++++++------------------- pyproject.toml | 2 +- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2f8cbe3cf..911763f3b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -184,13 +184,13 @@ tests-no-zope = ["cloudpickle ; platform_python_implementation == \"CPython\"", [[package]] name = "beekeepy" -version = "0.0.1.dev410+452d0be" +version = "0.0.1.dev413+0bc0d4b" description = "All in one package for beekeeper interaction via Python interface." optional = false python-versions = ">=3.12,<4.0" groups = ["main"] files = [ - {file = "beekeepy-0.0.1.dev410+452d0be-py3-none-any.whl", hash = "sha256:fa755e2b8524609d9d3d6d71fa8144fa43dc660cb9506debdbd48cff8be2942f"}, + {file = "beekeepy-0.0.1.dev413+0bc0d4b-py3-none-any.whl", hash = "sha256:f9a17976648a43accc91b345fb46989feb93b376616f59dc9808198001d62e47"}, ] [package.dependencies] @@ -200,7 +200,7 @@ loguru = "0.7.2" psutil = "7.0.0" python-dateutil = "2.8.2" requests = "2.32.3" -schemas = "0.0.1.dev393+d04802f" +schemas = "0.0.1.dev424+eeb5c94" [package.source] type = "legacy" @@ -324,17 +324,17 @@ markers = {main = "sys_platform == \"win32\"", dev = "platform_system == \"Windo [[package]] name = "database-api" -version = "1.27.11rc6.dev350+dcbf18cf6" +version = "1.27.11rc6.dev353+108f17fef" description = "" optional = false python-versions = ">=3.12,<4.0" groups = ["main"] files = [ - {file = "database_api-1.27.11rc6.dev350+dcbf18cf6-py3-none-any.whl", hash = "sha256:f7e5dd3e5d48d7350a5e0b43b6880a9d860f5c46cd113b73d38c0bf4d90c7a2a"}, + {file = "database_api-1.27.11rc6.dev353+108f17fef-py3-none-any.whl", hash = "sha256:0946e7532a45667a29744866ff1f8c6c539949b07bbb2cafa49bfba2142369af"}, ] [package.dependencies] -beekeepy = "0.0.1.dev410+452d0be" +beekeepy = "0.0.1.dev413+0bc0d4b" [package.source] type = "legacy" @@ -825,17 +825,17 @@ files = [ [[package]] name = "network-broadcast-api" -version = "1.27.11rc6.dev350+dcbf18cf6" +version = "1.27.11rc6.dev353+108f17fef" description = "" optional = false python-versions = ">=3.12,<4.0" groups = ["main"] files = [ - {file = "network_broadcast_api-1.27.11rc6.dev350+dcbf18cf6-py3-none-any.whl", hash = "sha256:577ec88406b23f89a2aa6ed3a64f86c19e9c406bececb14a27003d0bfa432a01"}, + {file = "network_broadcast_api-1.27.11rc6.dev353+108f17fef-py3-none-any.whl", hash = "sha256:34b4a4925415fd4f0474bc523a8b37caa3faaf716188f9bd47e10792cac0192d"}, ] [package.dependencies] -beekeepy = "0.0.1.dev410+452d0be" +beekeepy = "0.0.1.dev413+0bc0d4b" [package.source] type = "legacy" @@ -1275,21 +1275,18 @@ files = [ [[package]] name = "schemas" -version = "0.0.1.dev393+d04802f" +version = "0.0.1.dev424+eeb5c94" description = "Tools for checking if message fits expected format" optional = false python-versions = ">=3.12,<4.0" groups = ["main"] files = [ - {file = "schemas-0.0.1.dev393+d04802f-py3-none-any.whl", hash = "sha256:9624e7c143c4c88319a20866297ca75dadd2e1d990cf496d4a65b35e1ef9bdc9"}, + {file = "schemas-0.0.1.dev424+eeb5c94-py3-none-any.whl", hash = "sha256:eaa87991fbec3878d1f3fbba1cf9562995364b80530787d1eb7598ad62bdea72"}, ] [package.dependencies] msgspec = "0.18.6" -[package.extras] -api-generation = ["datamodel-code-generator (==0.30.1)", "ruff (==0.11.5)"] - [package.source] type = "legacy" url = "https://gitlab.syncad.com/api/v4/projects/362/packages/pypi/simple" @@ -1392,20 +1389,20 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "wax" -version = "0.3.10.dev838+6ea08665" +version = "0.3.10.dev841+5ac4412f" description = "" optional = false python-versions = ">=3.12,<4.0" groups = ["main"] files = [ - {file = "wax-0.3.10.dev838+6ea08665-cp312-cp312-manylinux_2_39_x86_64.whl", hash = "sha256:aac95565952e2380eba12bb3286b98eb754d4339977aea6fb0b9600ac6521717"}, + {file = "wax-0.3.10.dev841+5ac4412f-cp312-cp312-manylinux_2_39_x86_64.whl", hash = "sha256:7b472a060529bcd9fd4e7e4ddde1ab32c0453563b2260bb756da8215c15bd3e3"}, ] [package.dependencies] -database-api = "1.27.11rc6.dev350+dcbf18cf6" +database-api = "1.27.11rc6.dev353+108f17fef" httpx = {version = "0.23.3", extras = ["http2"]} loguru = "0.7.2" -network-broadcast-api = "1.27.11rc6.dev350+dcbf18cf6" +network-broadcast-api = "1.27.11rc6.dev353+108f17fef" protobuf = "4.24.4" python-dateutil = "2.8.2" requests = "2.32.3" @@ -1531,4 +1528,4 @@ propcache = ">=0.2.0" [metadata] lock-version = "2.1" python-versions = "^3.12" -content-hash = "a39c9968e583585212efda666dd247dac93ea5c4859435061d8c4de10e216e15" +content-hash = "c58a645709f14142ed70c9115526c5fbb465b831ea027ff8ea22ae1d8b121ac4" diff --git a/pyproject.toml b/pyproject.toml index 5374ee273..5c3e27652 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ python = "^3.12" python-dateutil = "2.8.2" abstractcp = "0.9.9" loguru = "0.7.2" -wax = "0.3.10.dev838+6ea08665" +wax = "0.3.10.dev841+5ac4412f" [tool.poetry.group.dev.dependencies] -- GitLab