gallery.accords-library.com/server/szurubooru/func/serialization.py

30 lines
937 B
Python

from typing import Any, Callable, Dict, List
from szurubooru import errors, model, rest
def get_serialization_options(ctx: rest.Context) -> List[str]:
return ctx.get_param_as_list("fields", default=[])
class BaseSerializer:
_fields = {} # type: Dict[str, Callable[[model.Base], Any]]
def serialize(self, options: List[str]) -> Any:
field_factories = self._serializers()
if not options:
options = list(field_factories.keys())
ret = {}
for key in options:
if key not in field_factories:
raise errors.ValidationError(
"Invalid key: %r. Valid keys: %r."
% (key, list(sorted(field_factories.keys())))
)
factory = field_factories[key]
ret[key] = factory()
return ret
def _serializers(self) -> Dict[str, Callable[[], Any]]:
raise NotImplementedError()