diff options
author | Lars Wirzenius <liw@liw.fi> | 2012-05-05 12:28:26 +0100 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2012-05-05 12:28:26 +0100 |
commit | 045fafc02508d1c7ff1c7a8f37f254ccf024f149 (patch) | |
tree | 6f06dc1767c100cc0fc63ff2a6dbbd5a8f330107 /larch | |
parent | e179c9bef79e1dea2cbe29f8f9ec3ff441f68e7d (diff) | |
download | larch-045fafc02508d1c7ff1c7a8f37f254ccf024f149.tar.gz |
Raise exceptions if key or node size is missing from metadata
Diffstat (limited to 'larch')
-rw-r--r-- | larch/__init__.py | 3 | ||||
-rw-r--r-- | larch/forest.py | 17 | ||||
-rw-r--r-- | larch/forest_tests.py | 19 |
3 files changed, 35 insertions, 4 deletions
diff --git a/larch/__init__.py b/larch/__init__.py index 91fa40f..1c8d274 100644 --- a/larch/__init__.py +++ b/larch/__init__.py @@ -20,7 +20,8 @@ __version__ = '0.30' from nodes import FrozenNode, Node, LeafNode, IndexNode from codec import NodeCodec, CodecError from tree import BTree, KeySizeMismatch, ValueTooLarge -from forest import Forest, open_forest, BadKeySize, BadNodeSize +from forest import (Forest, open_forest, BadKeySize, BadNodeSize, + MetadataMissingKey) from nodestore import (NodeStore, NodeStoreTests, NodeMissing, NodeTooBig, NodeExists, NodeCannotBeModified) from refcountstore import RefcountStore diff --git a/larch/forest.py b/larch/forest.py index 881fb86..2443da1 100644 --- a/larch/forest.py +++ b/larch/forest.py @@ -19,6 +19,15 @@ import tracing import larch +class MetadataMissingKey(Exception): + + def __init__(self, key_name): + self.msg = 'larch forest metadata missing "%s"' % key_name + + def __str__(self): # pragma: no cover + return self.msg + + class BadKeySize(Exception): '''Exception for a bad key size.''' @@ -179,9 +188,11 @@ def open_forest(allow_writes=None, key_size=None, node_size=None, codec=None, # since we won't be accessing nodes or keys. c_temp = codec(42) 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() + + if 'key_size' not in ns_temp.get_metadata_keys(): + raise MetadataMissingKey('key_size') + if 'node_size' not in ns_temp.get_metadata_keys(): + raise MetadataMissingKey('node_size') if key_size is None: key_size = int(ns_temp.get_metadata('key_size')) diff --git a/larch/forest_tests.py b/larch/forest_tests.py index 7603b86..9a786bd 100644 --- a/larch/forest_tests.py +++ b/larch/forest_tests.py @@ -14,6 +14,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. +import os import shutil import tempfile import unittest @@ -136,6 +137,24 @@ class OpenForestTests(unittest.TestCase): 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_metadata_missing_key_size(self): + with open(os.path.join(self.tempdir, 'metadata'), 'w') as f: + f.write('[metadata]\n') + f.write('format=1/1\n') + f.write('node_size=%s\n' % self.node_size) + self.assertRaises(larch.MetadataMissingKey, larch.open_forest, + key_size=self.key_size, node_size=None, + dirname=self.tempdir, allow_writes=False) + + def test_fail_if_metadata_missing_node_size(self): + with open(os.path.join(self.tempdir, 'metadata'), 'w') as f: + f.write('[metadata]\n') + f.write('format=1/1\n') + f.write('key_size=%s\n' % self.key_size) + self.assertRaises(larch.MetadataMissingKey, larch.open_forest, + key_size=self.key_size, node_size=None, + dirname=self.tempdir, allow_writes=False) + 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, allow_writes=True) |