Initialise db connection lazily, use isolated asyncio test case

This commit is contained in:
Piotr F. Mieszkowski 2023-10-23 22:44:53 +02:00
parent e5339d264c
commit 3dd6913599
2 changed files with 11 additions and 5 deletions

View File

@ -28,8 +28,13 @@ class DatabaseKeyRing(KeyRing):
def __init__(self, database_url, schema: KeyRingSchema):
self._schema = schema
self._engine = sqlalchemy.create_engine(database_url)
self._connection = self._engine.connect()
self._url = database_url
self._initialised = False
def _ensure_initialised(self):
if not self._initialised:
self._engine = sqlalchemy.create_engine(self._url)
self._connection = self._engine.connect()
def load(self):
"""Do nothing, database contents doesn't need to be cached."""
@ -37,6 +42,7 @@ class DatabaseKeyRing(KeyRing):
async def freeze_identities(self) -> KeyCache:
"""Return a static, async-safe copy of the identity map."""
self._ensure_initialised()
return self._load_identities()
def _load_identities(self) -> KeyCache:

View File

@ -4,13 +4,13 @@ import lacre.dbkeyring as dbk
import unittest
class LacreDbKeyringTest(unittest.TestCase):
def test_load_keys(self):
class LacreDbKeyringTest(unittest.IsolatedAsyncioTestCase):
async def test_load_keys(self):
db_url = 'sqlite:///test/lacre.db'
schema = dbk.KeyRingSchema()
db = dbk.DatabaseKeyRing(db_url, schema)
identities = db.freeze_identities()
identities = await db.freeze_identities()
self.assertTrue('1CD245308F0963D038E88357973CF4D9387C44D7' in identities)
self.assertTrue(identities.has_email('alice@disposlab'))