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
19 changes: 12 additions & 7 deletions bitcoin_safe_lib/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
from base64 import urlsafe_b64encode as b64e
from collections.abc import Callable, Iterable
from pathlib import Path
from typing import Any, TypeAlias, TypeGuard, TypeVar
from typing import Any, ClassVar, Protocol, TypeAlias, TypeGuard, TypeVar

import bdkpython as bdk
from cryptography.fernet import Fernet
Expand All @@ -56,10 +56,15 @@
T = TypeVar("T", bound="BaseSaveableClass")
ClassArgs: TypeAlias = dict[str, Any] # noqa: UP040
ClassKwargs: TypeAlias = dict[str, ClassArgs] # noqa: UP040
SaveableClass: TypeAlias = type["BaseSaveableClass"] # noqa: UP040
EnumClass: TypeAlias = type[enum.Enum] # noqa: UP040
KnownClass: TypeAlias = SaveableClass | EnumClass # noqa: UP040
KnownClasses: TypeAlias = dict[str, KnownClass] # noqa: UP040
KnownClasses: TypeAlias = dict[str, type[Any]] # noqa: UP040


class SupportsFromDumpClass(Protocol):
known_classes: ClassVar[KnownClasses]

@classmethod
def from_dump(cls, dct: dict[str, Any], class_kwargs: ClassKwargs | None = None) -> Any: ...


logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -165,11 +170,11 @@ def load(self, filename: str, password: str | None = None) -> str:

class ClassSerializer:
@staticmethod
def _is_saveable_class(obj_cls: KnownClass) -> TypeGuard[SaveableClass]:
def _is_saveable_class(obj_cls: type[Any]) -> TypeGuard[type[SupportsFromDumpClass]]:
return issubclass(obj_cls, BaseSaveableClass)

@staticmethod
def _is_enum_class(obj_cls: KnownClass) -> TypeGuard[EnumClass]:
def _is_enum_class(obj_cls: type[Any]) -> TypeGuard[type[enum.Enum]]:
return issubclass(obj_cls, enum.Enum)

@staticmethod
Expand Down
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,3 @@ known-first-party = ["bitcoin_safe_lib"]

[tool.ruff.format]
# Ruff formatter is Black-compatible; keep defaults or tweak here.

Loading