From a3631848f483c027ec725f50a45c1efdb8563b13 Mon Sep 17 00:00:00 2001 From: jamshale Date: Mon, 17 Jun 2024 19:45:51 +0000 Subject: [PATCH] Refactor with more efficient queries Signed-off-by: jamshale --- aries_cloudagent/revocation/indy.py | 30 +++++++++---------- .../models/issuer_rev_reg_record.py | 15 ++++++++-- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/aries_cloudagent/revocation/indy.py b/aries_cloudagent/revocation/indy.py index 13a63e0844..3e36f4fac4 100644 --- a/aries_cloudagent/revocation/indy.py +++ b/aries_cloudagent/revocation/indy.py @@ -240,31 +240,31 @@ async def get_or_create_active_registry( pass async with self._profile.session() as session: - rev_reg_records = await IssuerRevRegRecord.query_by_cred_def_id( - session, cred_def_id + full_registries = await IssuerRevRegRecord.query_by_cred_def_id( + session, cred_def_id, None, IssuerRevRegRecord.STATE_FULL, 1 ) - full_registries = [ - rev - for rev in rev_reg_records - if rev.state == IssuerRevRegRecord.STATE_FULL - ] # all registries are full, create a new one - if len(full_registries) == len(rev_reg_records): + if not full_registries: + # Use any registry to get max cred num + any_registry = ( + await IssuerRevRegRecord.query_by_cred_def_id( + session, cred_def_id, limit=1 + ) + )[0] await self.init_issuer_registry( cred_def_id, - max_cred_num=rev_reg_records[0].max_cred_num, + max_cred_num=any_registry.max_cred_num, ) # if there is a posted registry, activate oldest else: - posted_registries = sorted( - [ - rev - for rev in rev_reg_records - if rev.state == IssuerRevRegRecord.STATE_POSTED - ] + posted_registries = await IssuerRevRegRecord.query_by_cred_def_id( + session, cred_def_id, IssuerRevRegRecord.STATE_POSTED, None, None ) if posted_registries: + posted_registries = sorted( + posted_registries, key=lambda r: r.created_at + ) await self._set_registry_status( posted_registries[0].revoc_reg_id, IssuerRevRegRecord.STATE_ACTIVE, diff --git a/aries_cloudagent/revocation/models/issuer_rev_reg_record.py b/aries_cloudagent/revocation/models/issuer_rev_reg_record.py index 973ab41b66..174c950324 100644 --- a/aries_cloudagent/revocation/models/issuer_rev_reg_record.py +++ b/aries_cloudagent/revocation/models/issuer_rev_reg_record.py @@ -524,7 +524,12 @@ def get_registry(self) -> RevocationRegistry: @classmethod async def query_by_cred_def_id( - cls, session: ProfileSession, cred_def_id: str, state: str = None, limit=None + cls, + session: ProfileSession, + cred_def_id: str, + state: str = None, + negative_state: str = None, + limit=None, ) -> Sequence["IssuerRevRegRecord"]: """Retrieve issuer revocation registry records by credential definition ID. @@ -539,7 +544,13 @@ async def query_by_cred_def_id( (("cred_def_id", cred_def_id), ("state", state)), ) ) - return await cls.query(session, tag_filter, limit=limit) + return await cls.query( + session, + tag_filter, + post_filter_positive={"state": state} if state else None, + post_filter_negative={"state": negative_state} if negative_state else None, + limit=limit, + ) @classmethod async def query_by_pending(