Add path query to persist

This commit is contained in:
lash 2022-02-02 07:24:43 +00:00
parent 92d1ec42ed
commit 02be210eb4
Signed by: lash
GPG Key ID: 21D2E7BB88C2A746
5 changed files with 34 additions and 10 deletions

View File

@ -1,3 +1,5 @@
- 0.0.12
* Add path method
- 0.0.11
* Add sync from persisted store
- 0.0.10

View File

@ -1,6 +1,6 @@
[metadata]
name = shep
version = 0.0.11
version = 0.0.12
description = Multi-state key stores using bit masks
author = Louis Holbrook
author_email = dev@holbrook.no

View File

@ -90,3 +90,9 @@ class PersistedState(State):
super(PersistedState, self).put(o[0], state=state, contents=o[1])
except StateItemExists:
pass
def path(self, state, key=None):
k = self.name(state)
return self.__stores[k].path(key=key)

View File

@ -5,12 +5,12 @@ import os
class SimpleFileStore:
def __init__(self, path):
self.path = path
os.makedirs(self.path, exist_ok=True)
self.__path = path
os.makedirs(self.__path, exist_ok=True)
def add(self, k, contents=None, force=False):
fp = os.path.join(self.path, k)
fp = os.path.join(self.__path, k)
have_file = False
try:
os.stat(fp)
@ -32,12 +32,12 @@ class SimpleFileStore:
def remove(self, k):
fp = os.path.join(self.path, k)
fp = os.path.join(self.__path, k)
os.unlink(fp)
def get(self, k):
fp = os.path.join(self.path, k)
fp = os.path.join(self.__path, k)
f = open(fp, 'r')
r = f.read()
f.close()
@ -46,8 +46,8 @@ class SimpleFileStore:
def list(self):
files = []
for p in os.listdir(self.path):
fp = os.path.join(self.path, p)
for p in os.listdir(self.__path):
fp = os.path.join(self.__path, p)
f = open(fp, 'r')
r = f.read()
f.close()
@ -57,13 +57,19 @@ class SimpleFileStore:
return files
def path(self, key=None):
if key == None:
return self.__path
return os.path.join(self.__path, key)
class SimpleFileStoreFactory:
def __init__(self, path):
self.path = path
self.__path = path
def add(self, k):
k = str(k)
store_path = os.path.join(self.path, k)
store_path = os.path.join(self.__path, k)
return SimpleFileStore(store_path)

View File

@ -135,6 +135,16 @@ class TestStateReport(unittest.TestCase):
self.states.sync(self.states.FOO)
self.assertEqual(self.states.get('yyy'), None)
self.assertEqual(self.states.get('zzzz'), 'xyzzy')
def test_path(self):
self.states.put('yyy', state=self.states.FOO)
d = os.path.join(self.d, 'FOO')
self.assertEqual(self.states.path(self.states.FOO), d)
d = os.path.join(self.d, 'FOO', 'BAR')
self.assertEqual(self.states.path(self.states.FOO, key='BAR'), d)
if __name__ == '__main__':