From cb7cc7c8bb053669e5518cd43edee5858e97f751 Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Wed, 8 Sep 2010 14:32:28 -0300 Subject: [PATCH] Fixed bugs with SQLiteDict and added tests --- scrapy/tests/test_utils_sqlite.py | 18 ++++++++++++++++++ scrapy/utils/sqlite.py | 8 +++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/scrapy/tests/test_utils_sqlite.py b/scrapy/tests/test_utils_sqlite.py index f42240e01..7ecf6d1d9 100644 --- a/scrapy/tests/test_utils_sqlite.py +++ b/scrapy/tests/test_utils_sqlite.py @@ -20,6 +20,24 @@ class SqliteDictTest(unittest.TestCase): d.clear() self.failIf(d.items()) + def test_in(self): + d = self.dict_class() + self.assertFalse('test' in d) + d['test'] = 123 + self.assertTrue('test' in d) + + def test_keyerror(self): + d = self.dict_class() + self.assertRaises(KeyError, d.__getitem__, 'test') + + def test_replace(self): + d = self.dict_class() + self.assertEqual(d.get('test'), None) + d['test'] = 123 + self.assertEqual(d.get('test'), 123) + d['test'] = 456 + self.assertEqual(d.get('test'), 456) + class JsonSqliteDictTest(SqliteDictTest): diff --git a/scrapy/utils/sqlite.py b/scrapy/utils/sqlite.py index 7d68c01a4..01c13f96e 100644 --- a/scrapy/utils/sqlite.py +++ b/scrapy/utils/sqlite.py @@ -19,12 +19,14 @@ class SqliteDict(DictMixin): def __getitem__(self, key): key = self.encode(key) q = "select value from %s where key=?" % self.table - value = self.conn.execute(q, (key,)).fetchone()[0] - return self.decode(value) + value = self.conn.execute(q, (key,)).fetchone() + if value: + return self.decode(value[0]) + raise KeyError(key) def __setitem__(self, key, value): key, value = self.encode(key), self.encode(value) - q = "insert into %s (key, value) values (?,?)" % self.table + q = "insert or replace into %s (key, value) values (?,?)" % self.table self.conn.execute(q, (key, value)) self.conn.commit()