summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2015-04-07 15:35:28 -0400
committerSimo Sorce <simo@redhat.com>2015-04-07 17:15:24 -0400
commit02457aaa7b1d46626fecd3560dd5259d82f4c1ee (patch)
treec9da9fa33930bbe41325f62f23e81b4e83b1ef87
parent222189b0a4883740d151c7432e04c6b36deaffcd (diff)
Allow caller to decide if replace is allowed
When storing the caller decide if the DB can silently replace an existing value or not. Defaults to False
-rw-r--r--custodia/store/interface.py2
-rw-r--r--custodia/store/sqlite.py17
2 files changed, 16 insertions, 3 deletions
diff --git a/custodia/store/interface.py b/custodia/store/interface.py
index c804670..6ca3ea4 100644
--- a/custodia/store/interface.py
+++ b/custodia/store/interface.py
@@ -10,7 +10,7 @@ class CSStore(object):
def get(self, key):
raise NotImplementedError
- def set(self, key, value):
+ def set(self, key, value, replace=False):
raise NotImplementedError
def list(self, keyfilter=None):
diff --git a/custodia/store/sqlite.py b/custodia/store/sqlite.py
index 5f33a2a..0ed8223 100644
--- a/custodia/store/sqlite.py
+++ b/custodia/store/sqlite.py
@@ -42,8 +42,12 @@ class SqliteStore(CSStore):
"(key PRIMARY KEY UNIQUE, value)" % self.table
cur.execute(create)
- def set(self, key, value):
- setdata = "INSERT OR REPLACE into %s VALUES (?, ?)" % self.table
+ def set(self, key, value, replace=False):
+ if replace:
+ query = "INSERT OR REPLACE into %s VALUES (?, ?)"
+ else:
+ query = "INSERT into %s VALUES (?, ?)"
+ setdata = query % (self.table,)
try:
conn = sqlite3.connect(self.dburi)
with conn:
@@ -160,3 +164,12 @@ class SqliteStoreTests(unittest.TestCase):
value = self.store.get('/sub%')
self.assertEqual(value, None)
+
+ def test_5_set_replace(self):
+ with self.assertRaises(CSStoreError):
+ self.store.set('key', 'replaced')
+
+ self.store.set('key', 'replaced', replace=True)
+
+ value = self.store.get('key')
+ self.assertEqual(value, 'replaced')