Skip to content

Commit a8a5032

Browse files
authored
Merge pull request #1020 from dylanjw/v5-various-deprecations
Add warnings for web3.sha3, middleware_stack, and python 3.5
2 parents 33bd468 + 32c7677 commit a8a5032

File tree

6 files changed

+80
-26
lines changed

6 files changed

+80
-26
lines changed

tests/core/contracts/test_extracting_event_data.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def test_dynamic_length_argument_extraction(web3,
123123
event_topic = emitter_log_topics.LogDynamicArgs
124124
assert event_topic in log_entry['topics']
125125

126-
string_0_topic = web3.sha3(text=string_0)
126+
string_0_topic = web3.keccak(text=string_0)
127127
assert string_0_topic in log_entry['topics']
128128

129129
event_data = get_event_data(event_abi, log_entry)

tests/core/contracts/test_extracting_event_data_old.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def test_dynamic_length_argument_extraction(web3,
123123
event_topic = emitter_log_topics.LogDynamicArgs
124124
assert event_topic in log_entry['topics']
125125

126-
string_0_topic = web3.sha3(text=string_0)
126+
string_0_topic = web3.keccak(text=string_0)
127127
assert string_0_topic in log_entry['topics']
128128

129129
event_data = get_event_data(event_abi, log_entry)

tests/core/web3-module/test_sha3.py renamed to tests/core/web3-module/test_keccak.py

Lines changed: 50 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,17 @@
99
from web3 import Web3
1010

1111

12+
@pytest.mark.parametrize(
13+
'message, digest',
14+
[
15+
('cowmö', HexBytes('0x0f355f04c0a06eebac1d219b34c598f85a1169badee164be8a30345944885fe8')),
16+
('', HexBytes('0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470')),
17+
],
18+
)
19+
def test_keccak_text(message, digest):
20+
assert Web3.keccak(text=message) == digest
21+
22+
1223
@pytest.mark.parametrize(
1324
'message, digest',
1425
[
@@ -17,7 +28,33 @@
1728
],
1829
)
1930
def test_sha3_text(message, digest):
20-
assert Web3.sha3(text=message) == digest
31+
with pytest.deprecated_call():
32+
assert Web3.sha3(text=message) == digest
33+
34+
35+
@pytest.mark.parametrize(
36+
'hexstr, digest',
37+
[
38+
(
39+
'0x636f776dc3b6',
40+
HexBytes('0x0f355f04c0a06eebac1d219b34c598f85a1169badee164be8a30345944885fe8')
41+
),
42+
(
43+
'636f776dc3b6',
44+
HexBytes('0x0f355f04c0a06eebac1d219b34c598f85a1169badee164be8a30345944885fe8')
45+
),
46+
(
47+
'0x',
48+
HexBytes('0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470')
49+
),
50+
(
51+
'',
52+
HexBytes('0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470')
53+
),
54+
],
55+
)
56+
def test_keccak_hexstr(hexstr, digest):
57+
assert Web3.keccak(hexstr=hexstr) == digest
2158

2259

2360
@pytest.mark.parametrize(
@@ -42,7 +79,8 @@ def test_sha3_text(message, digest):
4279
],
4380
)
4481
def test_sha3_hexstr(hexstr, digest):
45-
assert Web3.sha3(hexstr=hexstr) == digest
82+
with pytest.deprecated_call():
83+
assert Web3.sha3(hexstr=hexstr) == digest
4684

4785

4886
@pytest.mark.parametrize(
@@ -53,9 +91,9 @@ def test_sha3_hexstr(hexstr, digest):
5391
(-1, ValueError),
5492
],
5593
)
56-
def test_sha3_primitive_invalid(primitive, exception):
94+
def test_keccak_primitive_invalid(primitive, exception):
5795
with pytest.raises(exception):
58-
Web3.sha3(primitive)
96+
Web3.keccak(primitive)
5997

6098

6199
@pytest.mark.parametrize(
@@ -71,8 +109,8 @@ def test_sha3_primitive_invalid(primitive, exception):
71109
),
72110
],
73111
)
74-
def test_sha3_primitive(primitive, digest):
75-
assert Web3.sha3(primitive) == digest
112+
def test_keccak_primitive(primitive, digest):
113+
assert Web3.keccak(primitive) == digest
76114

77115

78116
@pytest.mark.parametrize(
@@ -83,17 +121,17 @@ def test_sha3_primitive(primitive, digest):
83121
{'text': '', 'hexstr': '0x'},
84122
],
85123
)
86-
def test_sha3_raise_if_primitive_and(kwargs):
124+
def test_keccak_raise_if_primitive_and(kwargs):
87125
# must not set more than one input
88126
with pytest.raises(TypeError):
89-
Web3.sha3('', **kwargs)
127+
Web3.keccak('', **kwargs)
90128

91129

92-
def test_sha3_raise_if_hexstr_and_text():
130+
def test_keccak_raise_if_hexstr_and_text():
93131
with pytest.raises(TypeError):
94-
Web3.sha3(hexstr='0x', text='')
132+
Web3.keccak(hexstr='0x', text='')
95133

96134

97-
def test_sha3_raise_if_no_args():
135+
def test_keccak_raise_if_no_args():
98136
with pytest.raises(TypeError):
99-
Web3.sha3()
137+
Web3.keccak()

tests/ens/conftest.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def ens_setup():
107107
ens_key = accounts.pop()
108108

109109
# create ENS contract
110-
eth_labelhash = w3.sha3(text='eth')
110+
eth_labelhash = w3.keccak(text='eth')
111111
eth_namehash = bytes32(0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae)
112112
resolver_namehash = bytes32(0xfdd5d5de6dd63db72bbc2d487944ba13bf775b50a80805fe6fcaba9b0fba88f5)
113113
reverse_tld_namehash = bytes32(0xa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d34) # noqa: E501
@@ -126,7 +126,7 @@ def ens_setup():
126126

127127
ens_contract.functions.setSubnodeOwner(
128128
eth_namehash,
129-
w3.sha3(text='resolver'),
129+
w3.keccak(text='resolver'),
130130
ens_key
131131
).transact({'from': ens_key})
132132

@@ -173,13 +173,13 @@ def ens_setup():
173173
# set 'addr.reverse' to resolve to reverse registrar
174174
ens_contract.functions.setSubnodeOwner(
175175
b'\0' * 32,
176-
w3.sha3(text='reverse'),
176+
w3.keccak(text='reverse'),
177177
ens_key
178178
).transact({'from': ens_key})
179179

180180
ens_contract.functions.setSubnodeOwner(
181181
reverse_tld_namehash,
182-
w3.sha3(text='addr'),
182+
w3.keccak(text='addr'),
183183
ens_key
184184
).transact({'from': ens_key})
185185

@@ -196,7 +196,7 @@ def ens_setup():
196196
# set owner of tester.eth to an account controlled by tests
197197
ens_contract.functions.setSubnodeOwner(
198198
eth_namehash,
199-
w3.sha3(text='tester'),
199+
w3.keccak(text='tester'),
200200
w3.eth.accounts[2] # note that this does not have to be the default, only in the list
201201
).transact({'from': ens_key})
202202

@@ -210,7 +210,7 @@ def ens_setup():
210210
# make the reverse registrar the owner of the 'addr.reverse' name
211211
ens_contract.functions.setSubnodeOwner(
212212
reverse_tld_namehash,
213-
w3.sha3(text='addr'),
213+
w3.keccak(text='addr'),
214214
reverse_registrar.address
215215
).transact({'from': ens_key})
216216

web3/__init__.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
import pkg_resources
22
import sys
3+
import warnings
4+
5+
if (3, 5) <= sys.version_info < (3, 6):
6+
warnings.warn(
7+
"Support for Python 3.5 will be removed in web3.py v5",
8+
category=DeprecationWarning,
9+
stacklevel=2)
310

411
if sys.version_info < (3, 5):
5-
raise EnvironmentError("Python 3.5 or above is required")
12+
raise EnvironmentError(
13+
"Python 3.5 or above is required. "
14+
"Note that support for Python 3.5 will be remove in web3.py v5")
615

716
from eth_account import Account # noqa: E402
817
from web3.main import Web3 # noqa: E402

web3/main.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from_wei,
55
is_address,
66
is_checksum_address,
7-
keccak,
7+
keccak as eth_utils_keccak,
88
remove_0x_prefix,
99
to_checksum_address,
1010
to_wei,
@@ -51,6 +51,7 @@
5151
)
5252
from web3.utils.decorators import (
5353
combomethod,
54+
deprecated_for,
5455
)
5556
from web3.utils.empty import empty
5657
from web3.utils.encoding import (
@@ -132,16 +133,22 @@ def providers(self, providers):
132133
self.manager.providers = providers
133134

134135
@staticmethod
136+
@deprecated_for("This method has been renamed to keccak")
135137
@apply_to_return_value(HexBytes)
136138
def sha3(primitive=None, text=None, hexstr=None):
139+
return Web3.keccak(primitive, text, hexstr)
140+
141+
@staticmethod
142+
@apply_to_return_value(HexBytes)
143+
def keccak(primitive=None, text=None, hexstr=None):
137144
if isinstance(primitive, (bytes, int, type(None))):
138145
input_bytes = to_bytes(primitive, hexstr=hexstr, text=text)
139-
return keccak(input_bytes)
146+
return eth_utils_keccak(input_bytes)
140147

141148
raise TypeError(
142-
"You called sha3 with first arg %r and keywords %r. You must call it with one of "
143-
"these approaches: sha3(text='txt'), sha3(hexstr='0x747874'), "
144-
"sha3(b'\\x74\\x78\\x74'), or sha3(0x747874)." % (
149+
"You called keccak with first arg %r and keywords %r. You must call it with one of "
150+
"these approaches: keccak(text='txt'), keccak(hexstr='0x747874'), "
151+
"keccak(b'\\x74\\x78\\x74'), or keccak(0x747874)." % (
145152
primitive,
146153
{'text': text, 'hexstr': hexstr}
147154
)

0 commit comments

Comments
 (0)