From 9d73aab9d07ced11ca010de5487df7e5a77ca2bf Mon Sep 17 00:00:00 2001 From: Austin Raney Date: Mon, 26 Aug 2024 15:07:22 -0400 Subject: [PATCH 1/2] feat: add stub generic (de)serializer classes --- .../src/ngen/init_config/__init__.py | 3 +++ .../src/ngen/init_config/deserializer.py | 20 +++++++++++++++++++ .../src/ngen/init_config/serializer.py | 17 ++++++++++++++++ .../init_config/serializer_deserializer.py | 10 ++++++++++ 4 files changed, 50 insertions(+) diff --git a/python/ngen_init_config/src/ngen/init_config/__init__.py b/python/ngen_init_config/src/ngen/init_config/__init__.py index f0fddcca..02d8f70d 100644 --- a/python/ngen_init_config/src/ngen/init_config/__init__.py +++ b/python/ngen_init_config/src/ngen/init_config/__init__.py @@ -8,6 +8,7 @@ YamlDeserializer, TomlDeserializer, JsonDeserializer, + GenericDeserializer, ) from .serializer import ( IniSerializer, @@ -15,6 +16,7 @@ YamlSerializer, TomlSerializer, JsonSerializer, + GenericSerializer, ) from .serializer_deserializer import ( @@ -23,4 +25,5 @@ YamlSerializerDeserializer, TomlSerializerDeserializer, JsonSerializerDeserializer, + GenericSerializerDeserializer, ) diff --git a/python/ngen_init_config/src/ngen/init_config/deserializer.py b/python/ngen_init_config/src/ngen/init_config/deserializer.py index 850c055d..8267a14c 100644 --- a/python/ngen_init_config/src/ngen/init_config/deserializer.py +++ b/python/ngen_init_config/src/ngen/init_config/deserializer.py @@ -1,5 +1,7 @@ from __future__ import annotations +from abc import ABC, abstractmethod + from .core import Base from .utils import merge_class_attr from ._deserializers import ( @@ -105,3 +107,21 @@ def from_json(cls, p: Path) -> Self: @classmethod def from_json_str(cls, s: str) -> Self: return cls.parse_raw(s) + + +class GenericDeserializer(Base, ABC): + """ + Stub for deserializing from a generic format. + Subclasses must implement the `from_file` and `from_str` abstract class methods. + See `ngen.init_config.core.Base` and `pydantic`'s documentation for configuration options. + """ + + @classmethod + @abstractmethod + def from_file(cls, p: Path, *_) -> Self: + ... + + @classmethod + @abstractmethod + def from_str(cls, s: str, *_) -> Self: + ... diff --git a/python/ngen_init_config/src/ngen/init_config/serializer.py b/python/ngen_init_config/src/ngen/init_config/serializer.py index 9b231668..1e35d829 100644 --- a/python/ngen_init_config/src/ngen/init_config/serializer.py +++ b/python/ngen_init_config/src/ngen/init_config/serializer.py @@ -1,6 +1,7 @@ from __future__ import annotations import os +from abc import ABC, abstractmethod from . import core, format_serializers, utils from typing import TYPE_CHECKING @@ -146,3 +147,19 @@ def to_json_str(self, *, indent: int = 0) -> str: options = {} if not indent else {"indent": indent} # remove trailing eol return self.json(by_alias=True, **options).rstrip() + + +class GenericSerializer(core.Base, ABC): + """ + Stub for serializing a generic format. + Subclasses must implement the `to_file` and `to_str` abstract class methods. + See `ngen.init_config.core.Base` and `pydantic`'s documentation for configuration options. + """ + + @abstractmethod + def to_file(self, p: pathlib.Path, *_) -> None: + ... + + @abstractmethod + def to_str(self, *_) -> str: + ... diff --git a/python/ngen_init_config/src/ngen/init_config/serializer_deserializer.py b/python/ngen_init_config/src/ngen/init_config/serializer_deserializer.py index ca2237a2..97e07b9d 100644 --- a/python/ngen_init_config/src/ngen/init_config/serializer_deserializer.py +++ b/python/ngen_init_config/src/ngen/init_config/serializer_deserializer.py @@ -70,3 +70,13 @@ class JsonSerializerDeserializer(ser.JsonSerializer, de.JsonDeserializer): """ ... + + +class GenericSerializerDeserializer(ser.GenericSerializer, de.GenericDeserializer): + """ + Stub for deserializing from and serializing to a generic format. + Subclasses must implement the `to_file`, `to_str`, `from_file`, and `from_str` abstract methods. + See `ngen.init_config.core.Base` and `pydantic`'s documentation for configuration options. + """ + + ... From 46bc2c49ddc29ca2c9107e2a8acdf98ba44fb645 Mon Sep 17 00:00:00 2001 From: Austin Raney Date: Mon, 26 Aug 2024 15:08:05 -0400 Subject: [PATCH 2/2] bump ngen.init_config 0.0.6 -> 0.0.7 --- python/ngen_init_config/src/ngen/init_config/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ngen_init_config/src/ngen/init_config/_version.py b/python/ngen_init_config/src/ngen/init_config/_version.py index 034f46c3..6526deb4 100644 --- a/python/ngen_init_config/src/ngen/init_config/_version.py +++ b/python/ngen_init_config/src/ngen/init_config/_version.py @@ -1 +1 @@ -__version__ = "0.0.6" +__version__ = "0.0.7"