diff --git a/pypeman/persistence.py b/pypeman/persistence.py index a4c19dc..b692c68 100644 --- a/pypeman/persistence.py +++ b/pypeman/persistence.py @@ -79,6 +79,16 @@ async def get(self, namespace, key, default=SENTINEL): else: return self._data[namespace][key] + async def search_ids_by_value(self, namespace, value): + found_ids = [] + for id, val in self._data[namespace].items(): + if val == value: + found_ids.append(id) + return found_ids + + async def table_lenght(self, namespace): + return len(self._data[namespace]) + class SqliteBackend(): """ @@ -112,6 +122,18 @@ def _sync_get(self, namespace, key, default): else: return pdict[key] + async def _search_ids_by_value(self, namespace, value): + found_ids = [] + with SqliteDict(self.path, tablename=namespace) as pdict: + for id, val in pdict.items(): + if val == value: + found_ids.append(id) + return found_ids + + def _get_table_lenght(self, namespace): + with SqliteDict(self.path, tablename=namespace) as pdict: + return len(pdict) + async def store(self, namespace, key, value): """ Store the value in a dict saved in sqlite db. @@ -130,3 +152,9 @@ async def get(self, namespace, key, default=SENTINEL): :param default: Default value if key missing. """ return await self.loop.run_in_executor(self.executor, self._sync_get, namespace, key, default) + + async def table_lenght(self, namespace): + return await self.loop.run_in_executor(self.executor, self._get_table_lenght, namespace) + + async def search_ids_by_value(self, namespace): + return await self.loop.run_in_executor(self.executor, self._search_ids_by_value, namespace)