Skip to content

Commit 205186e

Browse files
committed
Changes from comments on PR #3463:
- ``_build_tkey()`` -> ``_build_name()`` - Add test for unnamed ``Web3Middleware`` added to onion, not just ``Web3MiddlewareBuilder.build()`` (functools.curry) references.
1 parent d6f321e commit 205186e

File tree

2 files changed

+36
-18
lines changed

2 files changed

+36
-18
lines changed

tests/core/middleware/test_middleware.py

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,26 @@
1212
)
1313

1414

15+
class TestMiddleware(Web3Middleware):
16+
def response_processor(self, method, response):
17+
if method == "eth_blockNumber":
18+
response["result"] = 1234
19+
20+
return response
21+
22+
23+
class TestMiddleware2(Web3Middleware):
24+
def response_processor(self, method, response):
25+
if method == "eth_blockNumber":
26+
response["result"] = 4321
27+
28+
return response
29+
30+
1531
def test_middleware_class_eq_magic_method():
1632
w3_a = Web3()
1733
w3_b = Web3()
1834

19-
class TestMiddleware(Web3Middleware):
20-
def request_processor(self, method, params):
21-
return 1234
22-
23-
class TestMiddleware2(Web3Middleware):
24-
def request_processor(self, method, params):
25-
return 4321
26-
2735
mw1w3_a = TestMiddleware(w3_a)
2836
assert mw1w3_a is not None
2937
assert mw1w3_a != ""
@@ -61,3 +69,13 @@ def test_unnamed_middleware_are_given_unique_keys(w3):
6169
with pytest.raises(Web3ValueError):
6270
# adding the same middleware again should cause an error
6371
w3.middleware_onion.add(request_formatting_middleware)
72+
73+
74+
def test_unnamed_class_middleware_are_given_unique_keys(w3):
75+
w3.middleware_onion.add(TestMiddleware)
76+
w3.middleware_onion.add(TestMiddleware2)
77+
assert isinstance(w3.eth.block_number, int)
78+
79+
with pytest.raises(Web3ValueError):
80+
# adding the same middleware again should cause an error
81+
w3.middleware_onion.add(TestMiddleware)

web3/datastructures.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ def add(self, element: TValue, name: Optional[TKey] = None) -> None:
182182
if name is None:
183183
name = cast(TKey, element)
184184

185-
name = self._build_tkey(name)
185+
name = self._build_name(name)
186186

187187
if name in self._queue:
188188
if name is element:
@@ -219,7 +219,7 @@ def inject(
219219
if name is None:
220220
name = cast(TKey, element)
221221

222-
name = self._build_tkey(name)
222+
name = self._build_name(name)
223223

224224
self._queue.move_to_end(name, last=False)
225225
elif layer == len(self._queue):
@@ -233,7 +233,7 @@ def clear(self) -> None:
233233
self._queue.clear()
234234

235235
def replace(self, old: TKey, new: TKey) -> TValue:
236-
old_name = self._build_tkey(old)
236+
old_name = self._build_name(old)
237237

238238
if old_name not in self._queue:
239239
raise Web3ValueError(
@@ -249,7 +249,7 @@ def replace(self, old: TKey, new: TKey) -> TValue:
249249
return to_be_replaced
250250

251251
@staticmethod
252-
def _build_tkey(value: TKey) -> TKey:
252+
def _build_name(value: TKey) -> TKey:
253253
try:
254254
value.__hash__()
255255
return value
@@ -261,12 +261,12 @@ def _build_tkey(value: TKey) -> TKey:
261261
)
262262
# This will either be ``Web3Middleware`` class or the ``build`` method of a
263263
# ``Web3MiddlewareBuilder``. Instantiate with empty ``Web3`` and use a
264-
# unique identifier with the ``__hash__()`` as the TKey.
264+
# unique identifier with the ``__hash__()`` as the name.
265265
v = value(None)
266266
return cast(TKey, f"{v.__class__}<{v.__hash__()}>")
267267

268268
def remove(self, old: TKey) -> None:
269-
old_name = self._build_tkey(old)
269+
old_name = self._build_name(old)
270270
if old_name not in self._queue:
271271
raise Web3ValueError("You can only remove something that has been added")
272272
del self._queue[old_name]
@@ -280,8 +280,8 @@ def middleware(self) -> Sequence[Any]:
280280
return [(val, key) for key, val in reversed(self._queue.items())]
281281

282282
def _replace_with_new_name(self, old: TKey, new: TKey) -> None:
283-
old_name = self._build_tkey(old)
284-
new_name = self._build_tkey(new)
283+
old_name = self._build_name(old)
284+
new_name = self._build_name(new)
285285

286286
self._queue[new_name] = new
287287
found_old = False
@@ -303,11 +303,11 @@ def __add__(self, other: Any) -> "NamedElementOnion[TKey, TValue]":
303303
return NamedElementOnion(cast(List[Any], combined.items()))
304304

305305
def __contains__(self, element: Any) -> bool:
306-
element_name = self._build_tkey(element)
306+
element_name = self._build_name(element)
307307
return element_name in self._queue
308308

309309
def __getitem__(self, element: TKey) -> TValue:
310-
element_name = self._build_tkey(element)
310+
element_name = self._build_name(element)
311311
return self._queue[element_name]
312312

313313
def __len__(self) -> int:

0 commit comments

Comments
 (0)