from abc import ABCMeta, abstractmethod from functools import lru_cache from aiocache import cached, Cache # type: ignore import ujson class ARecognizerRepository(metaclass=ABCMeta): @abstractmethod async def images_dogs(self) -> dict: pass @abstractmethod async def images_cats(self) -> dict: pass @abstractmethod def labels_dogs(self) -> dict: pass @abstractmethod def labels_cats(self) -> dict: pass class RecognizerRepository(ARecognizerRepository): def __init__(self): pass @cached(ttl=60, cache=Cache.MEMORY) async def images_dogs(self) -> dict: with open("server/services/recognizer/repository/meta/images.json", "r") as f: return ujson.loads(f.read())["dog"] @cached(ttl=60, cache=Cache.MEMORY) async def images_cats(self) -> dict: with open("server/services/recognizer/repository/meta/images.json", "r") as f: return ujson.loads(f.read())["cat"] @lru_cache def labels_cats(self) -> dict: with open( "server/services/recognizer/repository/meta/labels_cats.json", "r" ) as f: data_labels = f.read() return ujson.loads(data_labels) @lru_cache def labels_dogs(self) -> dict: with open( "server/services/recognizer/repository/meta/labels_dogs.json", "r" ) as f: data_labels = f.read() return ujson.loads(data_labels)