From 0090404b1de6ad0b6d1c0ab6335ababc03220190 Mon Sep 17 00:00:00 2001 From: Charles Madere Date: Wed, 5 Feb 2025 02:08:33 +0900 Subject: [PATCH] beginning `glacialTtsStorage` feature --- src/glacialTtsStorage/__init__.py | 0 src/glacialTtsStorage/helper/__init__.py | 0 .../helper/glacialTtsHelperInterface.py | 22 ++++++++++++++ src/glacialTtsStorage/models/__init__.py | 0 .../models/glacialTtsData.py | 12 ++++++++ .../glacialTtsStorageRepositoryInterface.py | 30 +++++++++++++++++++ src/tts/ttsProvider.py | 12 ++++++++ 7 files changed, 76 insertions(+) create mode 100644 src/glacialTtsStorage/__init__.py create mode 100644 src/glacialTtsStorage/helper/__init__.py create mode 100644 src/glacialTtsStorage/helper/glacialTtsHelperInterface.py create mode 100644 src/glacialTtsStorage/models/__init__.py create mode 100644 src/glacialTtsStorage/models/glacialTtsData.py create mode 100644 src/glacialTtsStorage/repository/glacialTtsStorageRepositoryInterface.py diff --git a/src/glacialTtsStorage/__init__.py b/src/glacialTtsStorage/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/glacialTtsStorage/helper/__init__.py b/src/glacialTtsStorage/helper/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/glacialTtsStorage/helper/glacialTtsHelperInterface.py b/src/glacialTtsStorage/helper/glacialTtsHelperInterface.py new file mode 100644 index 000000000..4118385db --- /dev/null +++ b/src/glacialTtsStorage/helper/glacialTtsHelperInterface.py @@ -0,0 +1,22 @@ +from abc import ABC, abstractmethod + +from ..models.glacialTtsData import GlacialTtsData +from ...tts.ttsProvider import TtsProvider + + +class GlacialTtsFileRetrieverInterface(ABC): + + @abstractmethod + async def findFile( + self, + glacialData: GlacialTtsData + ) -> str | None: + pass + + @abstractmethod + async def saveFile( + self, + message: str, + provider: TtsProvider + ) -> GlacialTtsData: + pass diff --git a/src/glacialTtsStorage/models/__init__.py b/src/glacialTtsStorage/models/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/glacialTtsStorage/models/glacialTtsData.py b/src/glacialTtsStorage/models/glacialTtsData.py new file mode 100644 index 000000000..0322ea641 --- /dev/null +++ b/src/glacialTtsStorage/models/glacialTtsData.py @@ -0,0 +1,12 @@ +from dataclasses import dataclass +from datetime import datetime + +from ...tts.ttsProvider import TtsProvider + + +@dataclass(frozen = True) +class GlacialTtsData: + storeDateTime: datetime + glacialId: str + message: str + provider: TtsProvider diff --git a/src/glacialTtsStorage/repository/glacialTtsStorageRepositoryInterface.py b/src/glacialTtsStorage/repository/glacialTtsStorageRepositoryInterface.py new file mode 100644 index 000000000..31aedd673 --- /dev/null +++ b/src/glacialTtsStorage/repository/glacialTtsStorageRepositoryInterface.py @@ -0,0 +1,30 @@ +from abc import ABC, abstractmethod + +from ..models.glacialTtsData import GlacialTtsData +from ...tts.ttsProvider import TtsProvider + + +class GlacialTtsStorageRepositoryInterface(ABC): + + @abstractmethod + async def add( + self, + message: str, + provider: TtsProvider + ) -> GlacialTtsData: + pass + + @abstractmethod + async def get( + self, + message: str, + provider: TtsProvider + ) -> GlacialTtsData | None: + pass + + @abstractmethod + async def remove( + self, + glacialId: str + ): + pass diff --git a/src/tts/ttsProvider.py b/src/tts/ttsProvider.py index 9f610b329..1ad08b04d 100644 --- a/src/tts/ttsProvider.py +++ b/src/tts/ttsProvider.py @@ -11,6 +11,18 @@ class TtsProvider(Enum): STREAM_ELEMENTS = auto() TTS_MONSTER = auto() + @property + def databaseName(self) -> str: + match self: + case TtsProvider.DEC_TALK: return 'dec_talk' + case TtsProvider.GOOGLE: return 'google' + case TtsProvider.HALF_LIFE: return 'half_life' + case TtsProvider.MICROSOFT_SAM: return 'microsoft_sam' + case TtsProvider.SINGING_DEC_TALK: return 'dec_talk' + case TtsProvider.STREAM_ELEMENTS: return 'stream_elements' + case TtsProvider.TTS_MONSTER: return 'tts_monster' + case _: raise ValueError(f'Encountered unknown TtsProvider value: \"{self}\"') + @property def humanName(self) -> str: match self: