From f00cb9564d10badbf60f24f856bd38316a449ace Mon Sep 17 00:00:00 2001 From: lash Date: Wed, 20 Apr 2022 15:24:32 +0000 Subject: [PATCH] Guarantee close on store factory close --- shep/store/base.py | 15 +++++++++++++++ shep/store/file.py | 7 +++++-- shep/store/redis.py | 5 ++++- shep/store/rocksdb.py | 6 +++++- 4 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 shep/store/base.py diff --git a/shep/store/base.py b/shep/store/base.py new file mode 100644 index 0000000..14b73b8 --- /dev/null +++ b/shep/store/base.py @@ -0,0 +1,15 @@ +re_processedname = r'^_?[A-Z,\.]*$' + + +class StoreFactory: + + def __del__(self): + self.close() + + + def add(self, k): + raise NotImplementedError() + + + def close(self): + pass diff --git a/shep/store/file.py b/shep/store/file.py index 9fdbe61..cf33711 100644 --- a/shep/store/file.py +++ b/shep/store/file.py @@ -3,7 +3,10 @@ import os import re # local imports -from .base import re_processedname +from .base import ( + re_processedname, + StoreFactory, + ) class SimpleFileStore: @@ -124,7 +127,7 @@ class SimpleFileStore: pass -class SimpleFileStoreFactory: +class SimpleFileStoreFactory(StoreFactory): """Provide a method to instantiate SimpleFileStore instances that provide persistence for individual states. :param path: Filesystem path as base path for states diff --git a/shep/store/redis.py b/shep/store/redis.py index ebf96d1..3d8e140 100644 --- a/shep/store/redis.py +++ b/shep/store/redis.py @@ -4,6 +4,9 @@ import datetime # external imports import redis +# local imports +from .base import StoreFactory + class RedisStore: @@ -86,7 +89,7 @@ class RedisStore: self.redis.set(k) -class RedisStoreFactory: +class RedisStoreFactory(StoreFactory): def __init__(self, host='localhost', port=6379, db=0, binary=False): self.redis = redis.Redis(host=host, port=port, db=db) diff --git a/shep/store/rocksdb.py b/shep/store/rocksdb.py index 750c5f4..0a8ad13 100644 --- a/shep/store/rocksdb.py +++ b/shep/store/rocksdb.py @@ -4,6 +4,10 @@ import datetime # external imports import rocksdb +# local imports +from .base import StoreFactory + + class RocksDbStore: def __init__(self, path, db, binary=False): @@ -109,7 +113,7 @@ class RocksDbStore: self.db.set(k) -class RocksDbStoreFactory: +class RocksDbStoreFactory(StoreFactory): def __init__(self, path, binary=False): self.db = rocksdb.DB(path, rocksdb.Options(create_if_missing=True))