Enable int IDs in PersistentState

This commit is contained in:
simon987 2021-01-09 19:29:25 -05:00
parent 89b21884b7
commit e3f3ea87eb
2 changed files with 39 additions and 2 deletions

View File

@ -126,9 +126,13 @@ class Table:
try:
conn.execute(sql, list(_serialize(v) for v in value.values()))
except sqlite3.OperationalError:
if isinstance(key, int):
key_type = "integer"
else:
key_type = "text"
conn.execute(
"create table if not exists %s (id text primary key,%s)" %
(self._table, ",".join("%s %s" % (k, _sqlite_type(v)) for k, v in value.items()))
"create table if not exists %s (id %s primary key,%s)" %
(self._table, key_type, ",".join("%s %s" % (k, _sqlite_type(v)) for k, v in value.items()))
)
conn.execute(sql, list(_serialize(v) for v in value.values()))

View File

@ -0,0 +1,33 @@
import os
from unittest import TestCase
from hexlib.db import PersistentState
class TestPersistentState(TestCase):
def tearDown(self) -> None:
os.remove("state.db")
def setUp(self) -> None:
os.remove("state.db")
def test_get_set(self):
s = PersistentState()
val = {"a": 1, "b": "2", "c": b'3', "d": 4.4}
s["a"]["1"] = val
val["id"] = "1"
self.assertDictEqual(val, s["a"]["1"])
def test_get_set_int_id(self):
s = PersistentState()
val = {"a": 1, "b": "2", "c": b'3', "d": 4.4}
s["a"][1] = val
val["id"] = 1
self.assertDictEqual(val, s["a"][1])