mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-01-14 21:57:58 -05:00
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
from abc import ABC, abstractmethod
|
|
from typing import Callable, Generic, TypeVar
|
|
|
|
T = TypeVar("T")
|
|
|
|
|
|
class ObjectSerializerBase(ABC, Generic[T]):
|
|
"""Saves and loads arbitrary python objects."""
|
|
|
|
def __init__(self) -> None:
|
|
self._on_deleted_callbacks: list[Callable[[str], None]] = []
|
|
|
|
@abstractmethod
|
|
def load(self, name: str) -> T:
|
|
"""
|
|
Loads the object.
|
|
:param name: The name of the object to load.
|
|
:raises ObjectNotFoundError: if the object is not found
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def save(self, obj: T) -> str:
|
|
"""
|
|
Saves the object, returning its name.
|
|
:param obj: The object to save.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def delete(self, name: str) -> None:
|
|
"""
|
|
Deletes the object, if it exists.
|
|
:param name: The name of the object to delete.
|
|
"""
|
|
pass
|
|
|
|
def on_deleted(self, on_deleted: Callable[[str], None]) -> None:
|
|
"""Register a callback for when an object is deleted"""
|
|
self._on_deleted_callbacks.append(on_deleted)
|
|
|
|
def _on_deleted(self, name: str) -> None:
|
|
for callback in self._on_deleted_callbacks:
|
|
callback(name)
|