summaryrefslogtreecommitdiffstats
path: root/custodia/store/sqlite.py
diff options
context:
space:
mode:
Diffstat (limited to 'custodia/store/sqlite.py')
-rw-r--r--custodia/store/sqlite.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/custodia/store/sqlite.py b/custodia/store/sqlite.py
index 482787a..0a50651 100644
--- a/custodia/store/sqlite.py
+++ b/custodia/store/sqlite.py
@@ -57,6 +57,8 @@ class SqliteStore(CSStore):
cur.execute(create)
def set(self, key, value, replace=False):
+ if key.endswith('/'):
+ raise ValueError('Invalid Key name, cannot end in "/"')
if replace:
query = "INSERT OR REPLACE into %s VALUES (?, ?)"
else:
@@ -74,6 +76,22 @@ class SqliteStore(CSStore):
log_error("Error storing key %s: [%r]" % (key, repr(err)))
raise CSStoreError('Error occurred while trying to store key')
+ def span(self, key):
+ name = key.rstrip('/')
+ query = "INSERT into %s VALUES (?, '')"
+ setdata = query % (self.table,)
+ try:
+ conn = sqlite3.connect(self.dburi)
+ with conn:
+ c = conn.cursor()
+ self._create(c)
+ c.execute(setdata, (name,))
+ except sqlite3.IntegrityError as err:
+ raise CSStoreExists(str(err))
+ except sqlite3.Error as err:
+ log_error("Error creating key %s: [%r]" % (name, repr(err)))
+ raise CSStoreError('Error occurred while trying to span container')
+
def list(self, keyfilter=''):
path = keyfilter.rstrip('/')
child_prefix = path if path == '' else path + '/'
@@ -209,3 +227,22 @@ class SqliteStoreTests(unittest.TestCase):
def test_6_cut_2_empty(self):
ret = self.store.cut('keycut')
self.assertEqual(ret, False)
+
+ def test_7_span_1(self):
+ self.store.span('/span')
+ value = self.store.list('/span')
+ self.assertEqual(value, [])
+
+ def test_7_span_2(self):
+ self.store.span('/span/2')
+ self.store.span('/span/2/span')
+ value = self.store.list('/span')
+ self.assertEqual(value, ['2', '2/span'])
+ value = self.store.list('/span/2')
+ self.assertEqual(value, ['span'])
+ value = self.store.list('/span/2/span')
+ self.assertEqual(value, [])
+
+ def test_8_cut_span(self):
+ ret = self.store.cut('/span/2')
+ self.assertEqual(ret, True)