Skip to content

Commit a35efbc

Browse files
committed
More changes from comments on PR #3554:
- Test `full_transactions` property of `PendingTxSubscription` - Abstract `SubscriptionContainer` to its own file
1 parent ce5cfc6 commit a35efbc

File tree

3 files changed

+61
-44
lines changed

3 files changed

+61
-44
lines changed

tests/core/subscriptions/test_subscriptions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def test_pending_tx_subscription_properties_default(handler):
2828
)
2929
assert pending_tx_subscription._handler is handler
3030
assert pending_tx_subscription.label == "pending tx label"
31+
assert pending_tx_subscription.full_transactions is False
3132
assert pending_tx_subscription.subscription_params == (
3233
"newPendingTransactions",
3334
False,
@@ -40,6 +41,7 @@ def test_pending_tx_subscription_properties_full_transactions(handler):
4041
)
4142
assert pending_tx_subscription._handler is handler
4243
assert pending_tx_subscription.label == "pending tx label"
44+
assert pending_tx_subscription.full_transactions is True
4345
assert pending_tx_subscription.subscription_params == (
4446
"newPendingTransactions",
4547
True,
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from typing import (
2+
Any,
3+
Dict,
4+
Iterator,
5+
List,
6+
Optional,
7+
)
8+
9+
from eth_typing import (
10+
HexStr,
11+
)
12+
13+
from web3.utils import (
14+
EthSubscription,
15+
)
16+
17+
18+
class SubscriptionContainer:
19+
def __init__(self) -> None:
20+
self.subscriptions: List[EthSubscription[Any]] = []
21+
self.subscriptions_by_id: Dict[HexStr, EthSubscription[Any]] = {}
22+
self.subscriptions_by_label: Dict[str, EthSubscription[Any]] = {}
23+
24+
def __len__(self) -> int:
25+
return len(self.subscriptions)
26+
27+
def __iter__(self) -> Iterator[EthSubscription[Any]]:
28+
return iter(self.subscriptions)
29+
30+
def add_subscription(self, subscription: EthSubscription[Any]) -> None:
31+
self.subscriptions.append(subscription)
32+
self.subscriptions_by_id[subscription.id] = subscription
33+
self.subscriptions_by_label[subscription.label] = subscription
34+
35+
def remove_subscription(self, subscription: EthSubscription[Any]) -> None:
36+
self.subscriptions.remove(subscription)
37+
self.subscriptions_by_id.pop(subscription.id)
38+
self.subscriptions_by_label.pop(subscription.label)
39+
40+
def get_by_id(self, sub_id: HexStr) -> EthSubscription[Any]:
41+
return self.subscriptions_by_id.get(sub_id)
42+
43+
def get_by_label(self, label: str) -> EthSubscription[Any]:
44+
return self.subscriptions_by_label.get(label)
45+
46+
@property
47+
def handler_subscriptions(self) -> List[EthSubscription[Any]]:
48+
return [sub for sub in self.subscriptions if sub._handler is not None]
49+
50+
def get_handler_subscription_by_id(
51+
self, sub_id: HexStr
52+
) -> Optional[EthSubscription[Any]]:
53+
sub = self.get_by_id(sub_id)
54+
if sub and sub._handler:
55+
return sub
56+
return None

web3/providers/persistent/subscription_manager.py

Lines changed: 3 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33
from typing import (
44
TYPE_CHECKING,
55
Any,
6-
Dict,
7-
Iterator,
86
List,
9-
Optional,
107
Sequence,
118
Union,
129
cast,
@@ -23,6 +20,9 @@
2320
Web3TypeError,
2421
Web3ValueError,
2522
)
23+
from web3.providers.persistent.subscription_container import (
24+
SubscriptionContainer,
25+
)
2626
from web3.types import (
2727
FormattedEthSubscriptionResponse,
2828
RPCResponse,
@@ -40,47 +40,6 @@
4040
)
4141

4242

43-
class SubscriptionContainer:
44-
def __init__(self) -> None:
45-
self.subscriptions: List[EthSubscription[Any]] = []
46-
self.subscriptions_by_id: Dict[HexStr, EthSubscription[Any]] = {}
47-
self.subscriptions_by_label: Dict[str, EthSubscription[Any]] = {}
48-
49-
def __len__(self) -> int:
50-
return len(self.subscriptions)
51-
52-
def __iter__(self) -> Iterator[EthSubscription[Any]]:
53-
return iter(self.subscriptions)
54-
55-
def add_subscription(self, subscription: EthSubscription[Any]) -> None:
56-
self.subscriptions.append(subscription)
57-
self.subscriptions_by_id[subscription.id] = subscription
58-
self.subscriptions_by_label[subscription.label] = subscription
59-
60-
def remove_subscription(self, subscription: EthSubscription[Any]) -> None:
61-
self.subscriptions.remove(subscription)
62-
self.subscriptions_by_id.pop(subscription.id)
63-
self.subscriptions_by_label.pop(subscription.label)
64-
65-
def get_by_id(self, sub_id: HexStr) -> EthSubscription[Any]:
66-
return self.subscriptions_by_id.get(sub_id)
67-
68-
def get_by_label(self, label: str) -> EthSubscription[Any]:
69-
return self.subscriptions_by_label.get(label)
70-
71-
@property
72-
def handler_subscriptions(self) -> List[EthSubscription[Any]]:
73-
return [sub for sub in self.subscriptions if sub._handler is not None]
74-
75-
def get_handler_subscription_by_id(
76-
self, sub_id: HexStr
77-
) -> Optional[EthSubscription[Any]]:
78-
sub = self.get_by_id(sub_id)
79-
if sub and sub._handler:
80-
return sub
81-
return None
82-
83-
8443
class SubscriptionManager:
8544
"""
8645
The ``SubscriptionManager`` is responsible for subscribing, unsubscribing, and

0 commit comments

Comments
 (0)