From 030d2653a87de53d3c3f1c75aed6cefe33e20075 Mon Sep 17 00:00:00 2001 From: Joe Polny Date: Tue, 12 Nov 2024 18:50:40 -0500 Subject: [PATCH 1/3] fix: properly handle no filters matched --- src/algokit_subscriber/subscriber.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/algokit_subscriber/subscriber.py b/src/algokit_subscriber/subscriber.py index 8a33200..9b4a5e8 100644 --- a/src/algokit_subscriber/subscriber.py +++ b/src/algokit_subscriber/subscriber.py @@ -84,7 +84,7 @@ def poll_once(self) -> TransactionSubscriptionResult: matched_transactions = [ t for t in poll_result["subscribed_transactions"] - if filter_name in t.get("filters_matched", []) + if filter_name in (t.get("filters_matched") or []) ] mapped_transactions = ( mapper(matched_transactions) if mapper else matched_transactions From 1651a7f937c2d7638e5a267601f995a4667ad8ae Mon Sep 17 00:00:00 2001 From: Joe Polny Date: Tue, 12 Nov 2024 18:53:10 -0500 Subject: [PATCH 2/3] fix: note prefix string support --- docs/subscriptions.md | 2 +- src/algokit_subscriber/subscription.py | 20 +++++++++++++------- src/algokit_subscriber/types/subscription.py | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/docs/subscriptions.md b/docs/subscriptions.md index 220bccb..e36d6a7 100644 --- a/docs/subscriptions.md +++ b/docs/subscriptions.md @@ -75,7 +75,7 @@ class TransactionFilter(TypedDict): receiver: NotRequired[str | list[str]] """Filter to transactions being received by the specified address(es).""" - note_prefix: NotRequired[str] + note_prefix: NotRequired[str | bytes] """Filter to transactions with a note having the given prefix.""" app_id: NotRequired[int | list[int]] diff --git a/src/algokit_subscriber/subscription.py b/src/algokit_subscriber/subscription.py index 481105c..7b4d32d 100644 --- a/src/algokit_subscriber/subscription.py +++ b/src/algokit_subscriber/subscription.py @@ -186,7 +186,7 @@ def extract_arc28_events( return emitted_events if emitted_events else [] -def indexer_pre_filter( +def indexer_pre_filter( # noqa: C901 subscription: TransactionFilter, min_round: int, max_round: int ) -> dict[str, Any]: """ @@ -212,9 +212,10 @@ def indexer_pre_filter( args["txn_type"] = subscription["type"] if subscription.get("note_prefix"): - args["note_prefix"] = base64.b64encode( - subscription["note_prefix"].encode() - ).decode() + if isinstance(subscription["note_prefix"], bytes): + args["note_prefix"] = base64.b64encode(subscription["note_prefix"]) + elif isinstance(subscription["note_prefix"], str): + args["note_prefix"] = subscription["note_prefix"].encode() if subscription.get("app_id") and isinstance(subscription["app_id"], int): args["application_id"] = int(subscription["app_id"]) @@ -294,9 +295,14 @@ def filter_transaction(t: TransactionResult) -> bool: # noqa: C901, PLR0912 result = result and t["tx-type"] in subscription["type"] if subscription.get("note_prefix"): - result = result and t.get("note", "").startswith( - subscription["note_prefix"] - ) + if isinstance(subscription["note_prefix"], bytes): + result = result and t.get("note", "").startswith( + subscription["note_prefix"] + ) + else: + result = result and t.get("note", "").startswith( + subscription["note_prefix"].encode() + ) if subscription.get("app_id"): if isinstance(subscription["app_id"], int): diff --git a/src/algokit_subscriber/types/subscription.py b/src/algokit_subscriber/types/subscription.py index 1d6c51f..957e8e2 100644 --- a/src/algokit_subscriber/types/subscription.py +++ b/src/algokit_subscriber/types/subscription.py @@ -202,7 +202,7 @@ class TransactionFilter(TypedDict): receiver: NotRequired[str | list[str]] """Filter to transactions being received by the specified address(es).""" - note_prefix: NotRequired[str] + note_prefix: NotRequired[str | bytes] """Filter to transactions with a note having the given prefix.""" app_id: NotRequired[int | list[int]] From 8a36f0c03761c7d7c3445d4f4c32d181adb7300f Mon Sep 17 00:00:00 2001 From: Joe Polny Date: Wed, 13 Nov 2024 05:14:36 -0500 Subject: [PATCH 3/3] fix startswith types --- src/algokit_subscriber/subscription.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/algokit_subscriber/subscription.py b/src/algokit_subscriber/subscription.py index 7b4d32d..01c5eff 100644 --- a/src/algokit_subscriber/subscription.py +++ b/src/algokit_subscriber/subscription.py @@ -296,12 +296,16 @@ def filter_transaction(t: TransactionResult) -> bool: # noqa: C901, PLR0912 if subscription.get("note_prefix"): if isinstance(subscription["note_prefix"], bytes): - result = result and t.get("note", "").startswith( - subscription["note_prefix"] + note = t.get("note", b"") + result = ( + result + and len(note) >= len(subscription["note_prefix"]) + and note[: len(subscription["note_prefix"])] + == subscription["note_prefix"] ) else: result = result and t.get("note", "").startswith( - subscription["note_prefix"].encode() + subscription["note_prefix"] ) if subscription.get("app_id"):