diff --git a/hexlib/db.py b/hexlib/db.py index 440a804..417e0da 100644 --- a/hexlib/db.py +++ b/hexlib/db.py @@ -118,9 +118,13 @@ class Table: with sqlite3.connect(self._state.dbfile, **self._state.dbargs) as conn: conn.row_factory = sqlite3.Row try: + col_types = conn.execute("PRAGMA table_info(%s)" % self._table).fetchall() cur = conn.execute("SELECT * FROM %s %s" % (self._table, where_clause), params) for row in cur: - yield dict(row) + yield dict( + (col[0], _deserialize(row[col[0]], col_types[i]["type"])) + for i, col in enumerate(cur.description) + ) except: return None @@ -128,9 +132,13 @@ class Table: with sqlite3.connect(self._state.dbfile, **self._state.dbargs) as conn: conn.row_factory = sqlite3.Row try: + col_types = conn.execute("PRAGMA table_info(%s)" % self._table).fetchall() cur = conn.execute("SELECT * FROM %s" % (self._table,)) for row in cur: - yield dict(row) + yield dict( + (col[0], _deserialize(row[col[0]], col_types[i]["type"])) + for i, col in enumerate(cur.description) + ) except: return None diff --git a/setup.py b/setup.py index ab75be4..d5bcc48 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup( name="hexlib", - version="1.79", + version="1.80", description="Misc utility methods", author="simon987", author_email="me@simon987.net", diff --git a/test/test_PersistantState.py b/test/test_PersistentState.py similarity index 82% rename from test/test_PersistantState.py rename to test/test_PersistentState.py index 84e7f72..a65e9f6 100644 --- a/test/test_PersistantState.py +++ b/test/test_PersistentState.py @@ -110,3 +110,24 @@ class TestPersistentState(TestCase): del s["a"][456] except Exception as e: self.fail(e) + + def test_deserialize_get_set(self): + s = PersistentState() + + s["a"][0] = {"x": b'abc'} + + self.assertEqual(s["a"][0]["x"], b'abc') + + def test_deserialize_sql(self): + s = PersistentState() + + s["a"][0] = {"x": b'abc'} + + self.assertEqual(list(s["a"].sql("WHERE 1=1"))[0]["x"], b'abc') + + def test_deserialize_iter(self): + s = PersistentState() + + s["a"][0] = {"x": b'abc'} + + self.assertEqual(list(s["a"])[0]["x"], b'abc')