summaryrefslogtreecommitdiff
path: root/larch
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2012-04-21 13:57:55 +0100
committerLars Wirzenius <liw@liw.fi>2012-04-21 13:57:55 +0100
commit86ac9b738e676bd1838555317253db5733b9f64e (patch)
tree7a75a4b56628e80878e3885f1f0a4222d1a26eea /larch
parent0a53d9ab222426ac34cc641c442c2e362e01f48d (diff)
downloadlarch-86ac9b738e676bd1838555317253db5733b9f64e.tar.gz
Make open_forest give NodeStoreDisk the allow_writes flag
Diffstat (limited to 'larch')
-rw-r--r--larch/forest.py10
-rw-r--r--larch/forest_tests.py25
-rw-r--r--larch/nodestore_disk.py6
-rw-r--r--larch/nodestore_disk_tests.py6
4 files changed, 26 insertions, 21 deletions
diff --git a/larch/forest.py b/larch/forest.py
index 75705e2..881fb86 100644
--- a/larch/forest.py
+++ b/larch/forest.py
@@ -149,8 +149,8 @@ class Forest(object):
self.node_store.commit()
-def open_forest(key_size=None, node_size=None, codec=None, node_store=None,
- **kwargs):
+def open_forest(allow_writes=None, key_size=None, node_size=None, codec=None,
+ node_store=None, **kwargs):
'''Create or open a forest.
``key_size`` and ``node_size`` are retrieved from the forest, unless
@@ -167,6 +167,8 @@ def open_forest(key_size=None, node_size=None, codec=None, node_store=None,
'''
tracing.trace('opening forest')
+
+ assert allow_writes is not None
codec = codec or larch.NodeCodec
node_store = node_store or larch.NodeStoreDisk
@@ -176,7 +178,7 @@ def open_forest(key_size=None, node_size=None, codec=None, node_store=None,
# For this, we can use any values for node and key sizes,
# since we won't be accessing nodes or keys.
c_temp = codec(42)
- ns_temp = node_store(42, c_temp, **kwargs)
+ ns_temp = node_store(False, 42, c_temp, **kwargs)
assert 'key_size' in ns_temp.get_metadata_keys()
assert 'node_size' in ns_temp.get_metadata_keys()
@@ -187,7 +189,7 @@ def open_forest(key_size=None, node_size=None, codec=None, node_store=None,
node_size = int(ns_temp.get_metadata('node_size'))
c = codec(key_size)
- ns = node_store(node_size, c, **kwargs)
+ ns = node_store(allow_writes, node_size, c, **kwargs)
def check_size(keyname, wanted, exception):
if keyname not in ns.get_metadata_keys():
diff --git a/larch/forest_tests.py b/larch/forest_tests.py
index e8d8a17..7603b86 100644
--- a/larch/forest_tests.py
+++ b/larch/forest_tests.py
@@ -132,50 +132,53 @@ class OpenForestTests(unittest.TestCase):
def test_creates_new_forest(self):
f = larch.open_forest(key_size=self.key_size, node_size=self.node_size,
- dirname=self.tempdir)
+ dirname=self.tempdir, allow_writes=True)
self.assertEqual(f.node_store.codec.key_bytes, self.key_size)
self.assertEqual(f.node_store.node_size, self.node_size)
def test_fail_if_existing_tree_has_incompatible_key_size(self):
f = larch.open_forest(key_size=self.key_size, node_size=self.node_size,
- dirname=self.tempdir)
+ dirname=self.tempdir, allow_writes=True)
f.commit()
self.assertRaises(larch.BadKeySize,
larch.open_forest,
key_size=self.key_size + 1,
node_size=self.node_size,
- dirname=self.tempdir)
+ dirname=self.tempdir,
+ allow_writes=True)
def test_opens_existing_tree_with_incompatible_node_size(self):
- f = larch.open_forest(key_size=self.key_size, node_size=self.node_size,
- dirname=self.tempdir)
+ f = larch.open_forest(allow_writes=True, key_size=self.key_size,
+ node_size=self.node_size, dirname=self.tempdir)
f.commit()
new_size = self.node_size + 1
f2 = larch.open_forest(key_size=self.key_size,
node_size=new_size,
- dirname=self.tempdir)
+ dirname=self.tempdir,
+ allow_writes=True)
self.assertEqual(int(f2.node_store.get_metadata('node_size')),
self.node_size)
def test_opens_existing_tree_with_compatible_key_and_node_size(self):
f = larch.open_forest(key_size=self.key_size, node_size=self.node_size,
- dirname=self.tempdir)
+ dirname=self.tempdir, allow_writes=True)
f.commit()
f2 = larch.open_forest(key_size=self.key_size,
node_size=self.node_size,
- dirname=self.tempdir)
+ dirname=self.tempdir,
+ allow_writes=True)
self.assert_(True)
def test_opens_existing_tree_without_node_and_key_sizes_given(self):
- f = larch.open_forest(key_size=self.key_size, node_size=self.node_size,
- dirname=self.tempdir)
+ f = larch.open_forest(allow_writes=True, key_size=self.key_size,
+ node_size=self.node_size, dirname=self.tempdir)
f.commit()
- f2 = larch.open_forest(dirname=self.tempdir)
+ f2 = larch.open_forest(dirname=self.tempdir, allow_writes=True)
self.assertEqual(f2.node_store.node_size, self.node_size)
self.assertEqual(f2.node_store.codec.key_bytes, self.key_size)
diff --git a/larch/nodestore_disk.py b/larch/nodestore_disk.py
index c216f50..1ba90a7 100644
--- a/larch/nodestore_disk.py
+++ b/larch/nodestore_disk.py
@@ -112,8 +112,8 @@ class NodeStoreDisk(larch.NodeStore):
nodedir = 'nodes'
- def __init__(self, node_size, codec, dirname=None, upload_max=1024,
- lru_size=500, vfs=None, format=None):
+ def __init__(self, allow_writes, node_size, codec, dirname=None,
+ upload_max=1024, lru_size=500, vfs=None, format=None):
tracing.trace('new NodeStoreDisk: %s', dirname)
assert dirname is not None
if format is not None:
@@ -130,7 +130,7 @@ class NodeStoreDisk(larch.NodeStore):
self.upload_queue = larch.UploadQueue(self._really_put_node,
self.upload_max)
self.vfs = vfs if vfs != None else LocalFS()
- self.journal = larch.Journal(True, self.vfs, dirname)
+ self.journal = larch.Journal(allow_writes, self.vfs, dirname)
self.idpath = larch.IdPath(os.path.join(dirname, self.nodedir),
DIR_DEPTH, DIR_BITS, DIR_SKIP)
diff --git a/larch/nodestore_disk_tests.py b/larch/nodestore_disk_tests.py
index ba21270..7f22c31 100644
--- a/larch/nodestore_disk_tests.py
+++ b/larch/nodestore_disk_tests.py
@@ -35,9 +35,9 @@ class NodeStoreDiskTests(unittest.TestCase, larch.NodeStoreTests):
shutil.rmtree(self.tempdir)
def new_ns(self, format=None):
- return nodestore_disk.NodeStoreDisk(self.node_size, self.codec,
- dirname=self.tempdir,
- format=format)
+ return nodestore_disk.NodeStoreDisk(True, self.node_size, self.codec,
+ dirname=self.tempdir,
+ format=format)
def test_metadata_has_format_version(self):
self.assertEqual(self.ns.get_metadata('format'),