From 5ed00ae21bd9c2cf64708d61abc520a01d680174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20Mas=C5=82owski?= Date: Tue, 1 Jul 2025 14:26:47 +0000 Subject: [PATCH 1/3] Use base and error subpackage instead of strict msgspec package --- beekeepy/beekeepy/_communication/settings.py | 2 +- beekeepy/beekeepy/_executable/beekeeper_config.py | 3 +-- beekeepy/beekeepy/_interface/validators.py | 5 ++--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/beekeepy/beekeepy/_communication/settings.py b/beekeepy/beekeepy/_communication/settings.py index b7835653..fbcd6780 100644 --- a/beekeepy/beekeepy/_communication/settings.py +++ b/beekeepy/beekeepy/_communication/settings.py @@ -4,10 +4,10 @@ from datetime import timedelta from os import environ from typing import TYPE_CHECKING, Any, ClassVar, cast -from msgspec import field from typing_extensions import Self from schemas._preconfigured_base_model import PreconfiguredBaseModel +from schemas.base import field from schemas.decoders import get_hf26_decoder if TYPE_CHECKING: diff --git a/beekeepy/beekeepy/_executable/beekeeper_config.py b/beekeepy/beekeepy/_executable/beekeeper_config.py index 42935b21..1bbe8c8a 100644 --- a/beekeepy/beekeepy/_executable/beekeeper_config.py +++ b/beekeepy/beekeepy/_executable/beekeeper_config.py @@ -2,11 +2,10 @@ from __future__ import annotations from pathlib import Path # noqa: TCH003 -from msgspec import field - from beekeepy._communication import HttpUrl, WsUrl from beekeepy._executable.abc.config import Config from beekeepy._executable.defaults import BeekeeperDefaults, ExportKeysWalletParams +from schemas.base import field def http_webserver_default() -> HttpUrl: diff --git a/beekeepy/beekeepy/_interface/validators.py b/beekeepy/beekeepy/_interface/validators.py index 2c6225ae..d844c01f 100644 --- a/beekeepy/beekeepy/_interface/validators.py +++ b/beekeepy/beekeepy/_interface/validators.py @@ -4,8 +4,6 @@ import re from re import Pattern from typing import Final -import msgspec - from beekeepy.exceptions import ( InvalidAccountNameError, InvalidSchemaHexError, @@ -15,6 +13,7 @@ from beekeepy.exceptions import ( SchemaDetectableError, TimeTooBigError, ) +from schemas.errors import ValidationError from schemas.fields.basic import AccountName, PrivateKey, PublicKey from schemas.fields.hex import Hex @@ -35,7 +34,7 @@ def _generic_kwargs_validator( try: for _arg_name, arg_value in arguments.items(): validator(arg_value) - except msgspec.ValidationError as error: + except ValidationError as error: raise exception(_arg_name, arg_value) from error -- GitLab From 404f2a14f826c2752373ec1ecdae88554406a2f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20Mas=C5=82owski?= Date: Fri, 11 Jul 2025 04:43:26 +0000 Subject: [PATCH 2/3] Add missing functionalities to Config class --- beekeepy/beekeepy/_executable/abc/config.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/beekeepy/beekeepy/_executable/abc/config.py b/beekeepy/beekeepy/_executable/abc/config.py index f07eaa42..a99fba70 100644 --- a/beekeepy/beekeepy/_executable/abc/config.py +++ b/beekeepy/beekeepy/_executable/abc/config.py @@ -5,6 +5,7 @@ from pathlib import Path from typing import TYPE_CHECKING, Any, ClassVar, Final from beekeepy._communication import Url +from beekeepy._runnable_handle.settings import strtobool from schemas._preconfigured_base_model import PreconfiguredBaseModel if TYPE_CHECKING: @@ -40,7 +41,9 @@ class Config(PreconfiguredBaseModel): return result def load(self, source: Path | Self) -> None: - self.__dict__.update((self.from_path(source) if isinstance(source, Path) else source).dict()) + new_config = self.from_path(source) if isinstance(source, Path) else source + for member_name, member_value in new_config.dict().items(): + setattr(self, member_name, member_value) @classmethod def from_path(cls, source: Path) -> Self: @@ -57,7 +60,9 @@ class Config(PreconfiguredBaseModel): config_name, config_value = line.split("=") member_name = cls._convert_config_name_to_member_name(config_name) values_to_write[member_name] = cls._convert_config_value_to_member_value( - config_value, current_value=values_to_write.get(member_name, default_object[member_name]) + config_value, + current_value=values_to_write.get(member_name, default_object[member_name]), + member_name=member_name, ) return cls.parse_builtins(values_to_write) @@ -89,8 +94,17 @@ class Config(PreconfiguredBaseModel): return str(member_value) @classmethod - def _convert_config_value_to_member_value(cls, config_value: str, *, current_value: Any) -> Any | None: + def _convert_config_value_to_member_value( + cls, config_value: str, *, current_value: Any, member_name: str + ) -> Any | None: config_value = config_value.strip(" \t\n\"'") + member_type: str = cls.__annotations__[member_name] + if config_value is not None and "bool" in member_type: + return strtobool(config_value) + + if config_value is not None and "int" in member_type and "[" not in member_type: + return int(config_value) + if len(config_value) == 0: return current_value -- GitLab From 0bc0d4b33753603a127637309419a34bd3c2421f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20Mas=C5=82owski?= Date: Mon, 14 Jul 2025 09:40:34 +0000 Subject: [PATCH 3/3] Bump schemas to version with api client generator extracted to the wax-spec-generator repo --- beekeepy/poetry.lock | 9 +++------ beekeepy/pyproject.toml | 2 +- tests/local-tools/poetry.lock | 9 +++------ 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/beekeepy/poetry.lock b/beekeepy/poetry.lock index 18e2a89e..5cd62669 100644 --- a/beekeepy/poetry.lock +++ b/beekeepy/poetry.lock @@ -775,21 +775,18 @@ idna2008 = ["idna"] [[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" @@ -965,4 +962,4 @@ propcache = ">=0.2.0" [metadata] lock-version = "2.1" python-versions = "^3.12" -content-hash = "fc02c9c7b4ce6ff7b66ff93d90bc5909bf482c6dc60784e5642c490833d70f5a" +content-hash = "09ab12d7ca828842a3bbe0d01bb12dd22302aacb80e87415d5d690c9499e628a" diff --git a/beekeepy/pyproject.toml b/beekeepy/pyproject.toml index 211261f2..12677aac 100644 --- a/beekeepy/pyproject.toml +++ b/beekeepy/pyproject.toml @@ -34,7 +34,7 @@ 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" [tool.poetry-dynamic-versioning] enable = true diff --git a/tests/local-tools/poetry.lock b/tests/local-tools/poetry.lock index e593e4f4..c65390c8 100644 --- a/tests/local-tools/poetry.lock +++ b/tests/local-tools/poetry.lock @@ -189,7 +189,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 = "directory" @@ -1289,21 +1289,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" -- GitLab