Initialise db connection lazily, use isolated asyncio test case
This commit is contained in:
parent
e5339d264c
commit
3dd6913599
2 changed files with 11 additions and 5 deletions
|
@ -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:
|
||||
|
|
|
@ -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'))
|
||||
|
|
Loading…
Reference in a new issue