16
16
# under the License.
17
17
from __future__ import annotations
18
18
19
- import io
20
19
import itertools
21
20
import struct
22
21
from io import SEEK_SET
32
31
from pyiceberg .io import InputStream
33
32
from pyiceberg .types import DoubleType , FloatType
34
33
35
- AVAILABLE_DECODERS = [StreamingBinaryDecoder , lambda stream : CythonBinaryDecoder (stream .read ())]
36
-
37
- CALLABLE_DECODER = Callable [[InputStream ], ReadableDecoder ]
34
+ AVAILABLE_DECODERS = [StreamingBinaryDecoder , CythonBinaryDecoder ]
38
35
39
36
40
37
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
41
- def test_read_boolean_true (decoder_class : CALLABLE_DECODER ) -> None :
42
- mis = io .BytesIO (b"\x01 " )
43
- decoder = decoder_class (mis )
38
+ def test_read_boolean_true (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
39
+ decoder = decoder_class (b"\x01 " )
44
40
assert decoder .read_boolean () is True
45
41
46
42
47
43
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
48
- def test_read_boolean_false (decoder_class : CALLABLE_DECODER ) -> None :
49
- mis = io .BytesIO (b"\x00 " )
50
- decoder = decoder_class (mis )
44
+ def test_read_boolean_false (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
45
+ decoder = decoder_class (b"\x00 " )
51
46
assert decoder .read_boolean () is False
52
47
53
48
54
49
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
55
- def test_skip_boolean (decoder_class : CALLABLE_DECODER ) -> None :
56
- mis = io .BytesIO (b"\x00 " )
57
- decoder = decoder_class (mis )
50
+ def test_skip_boolean (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
51
+ decoder = decoder_class (b"\x00 " )
58
52
assert decoder .tell () == 0
59
53
decoder .skip_boolean ()
60
54
assert decoder .tell () == 1
61
55
62
56
63
57
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
64
- def test_read_int (decoder_class : CALLABLE_DECODER ) -> None :
65
- mis = io .BytesIO (b"\x18 " )
66
- decoder = decoder_class (mis )
58
+ def test_read_int (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
59
+ decoder = decoder_class (b"\x18 " )
67
60
assert decoder .read_int () == 12
68
61
69
62
70
63
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
71
- def test_read_int_longer (decoder_class : CALLABLE_DECODER ) -> None :
72
- mis = io .BytesIO (b"\x8e \xd1 \x87 \x01 " )
73
- decoder = decoder_class (mis )
64
+ def test_read_int_longer (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
65
+ decoder = decoder_class (b"\x8e \xd1 \x87 \x01 " )
74
66
assert decoder .read_int () == 1111111
75
67
76
68
@@ -88,27 +80,24 @@ def zigzag_encode(datum: int) -> bytes:
88
80
"decoder_class, expected_value" ,
89
81
list (itertools .product (AVAILABLE_DECODERS , [0 , - 1 , 2 ** 32 , - (2 ** 32 ), (2 ** 63 - 1 ), - (2 ** 63 )])),
90
82
)
91
- def test_read_int_custom_encode (decoder_class : CALLABLE_DECODER , expected_value : int ) -> None :
83
+ def test_read_int_custom_encode (decoder_class : Callable [[ bytes ], ReadableDecoder ] , expected_value : int ) -> None :
92
84
encoded = zigzag_encode (expected_value )
93
- mis = io .BytesIO (encoded )
94
- decoder = decoder_class (mis )
85
+ decoder = decoder_class (encoded )
95
86
decoded = decoder .read_int ()
96
87
assert decoded == expected_value , f"Decoded value does not match decoded={ decoded } expected={ expected_value } "
97
88
98
89
99
90
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
100
- def test_skip_int (decoder_class : CALLABLE_DECODER ) -> None :
101
- mis = io .BytesIO (b"\x18 " )
102
- decoder = decoder_class (mis )
91
+ def test_skip_int (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
92
+ decoder = decoder_class (b"\x18 " )
103
93
assert decoder .tell () == 0
104
94
decoder .skip_int ()
105
95
assert decoder .tell () == 1
106
96
107
97
108
98
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
109
- def test_read_negative_bytes (decoder_class : CALLABLE_DECODER ) -> None :
110
- mis = io .BytesIO (b"" )
111
- decoder = decoder_class (mis )
99
+ def test_read_negative_bytes (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
100
+ decoder = decoder_class (b"" )
112
101
113
102
with pytest .raises (ValueError ) as exc_info :
114
103
decoder .read (- 1 )
@@ -148,70 +137,62 @@ def __exit__(
148
137
149
138
# InMemoryBinaryDecoder doesn't work for a byte at a time reading
150
139
@pytest .mark .parametrize ("decoder_class" , [StreamingBinaryDecoder ])
151
- def test_read_single_byte_at_the_time (decoder_class : CALLABLE_DECODER ) -> None :
152
- decoder = decoder_class (OneByteAtATimeInputStream ())
140
+ def test_read_single_byte_at_the_time (decoder_class : Callable [[ bytes ], ReadableDecoder ] ) -> None :
141
+ decoder = decoder_class (OneByteAtATimeInputStream ()) # type: ignore
153
142
assert decoder .read (2 ) == b"\x01 \x02 "
154
143
155
144
156
145
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
157
- def test_read_float (decoder_class : CALLABLE_DECODER ) -> None :
158
- mis = io .BytesIO (b"\x00 \x00 \x9A \x41 " )
159
- decoder = decoder_class (mis )
146
+ def test_read_float (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
147
+ decoder = decoder_class (b"\x00 \x00 \x9A \x41 " )
160
148
assert decoder .read_float () == 19.25
161
149
162
150
163
151
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
164
- def test_skip_float (decoder_class : CALLABLE_DECODER ) -> None :
165
- mis = io .BytesIO (b"\x00 \x00 \x9A \x41 " )
166
- decoder = decoder_class (mis )
152
+ def test_skip_float (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
153
+ decoder = decoder_class (b"\x00 \x00 \x9A \x41 " )
167
154
assert decoder .tell () == 0
168
155
decoder .skip_float ()
169
156
assert decoder .tell () == 4
170
157
171
158
172
159
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
173
- def test_read_double (decoder_class : CALLABLE_DECODER ) -> None :
174
- mis = io .BytesIO (b"\x00 \x00 \x00 \x00 \x00 \x40 \x33 \x40 " )
175
- decoder = decoder_class (mis )
160
+ def test_read_double (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
161
+ decoder = decoder_class (b"\x00 \x00 \x00 \x00 \x00 \x40 \x33 \x40 " )
176
162
assert decoder .read_double () == 19.25
177
163
178
164
179
165
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
180
- def test_skip_double (decoder_class : CALLABLE_DECODER ) -> None :
181
- mis = io .BytesIO (b"\x00 \x00 \x00 \x00 \x00 \x40 \x33 \x40 " )
182
- decoder = decoder_class (mis )
166
+ def test_skip_double (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
167
+ decoder = decoder_class (b"\x00 \x00 \x00 \x00 \x00 \x40 \x33 \x40 " )
183
168
assert decoder .tell () == 0
184
169
decoder .skip_double ()
185
170
assert decoder .tell () == 8
186
171
187
172
188
173
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
189
- def test_read_bytes (decoder_class : CALLABLE_DECODER ) -> None :
190
- mis = io .BytesIO (b"\x08 \x01 \x02 \x03 \x04 " )
191
- decoder = decoder_class (mis )
174
+ def test_read_bytes (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
175
+ decoder = decoder_class (b"\x08 \x01 \x02 \x03 \x04 " )
192
176
actual = decoder .read_bytes ()
193
177
assert actual == b"\x01 \x02 \x03 \x04 "
194
178
195
179
196
180
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
197
- def test_read_utf8 (decoder_class : CALLABLE_DECODER ) -> None :
198
- mis = io .BytesIO (b"\x04 \x76 \x6F " )
199
- decoder = decoder_class (mis )
181
+ def test_read_utf8 (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
182
+ decoder = decoder_class (b"\x04 \x76 \x6F " )
200
183
assert decoder .read_utf8 () == "vo"
201
184
202
185
203
186
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
204
- def test_skip_utf8 (decoder_class : CALLABLE_DECODER ) -> None :
205
- mis = io .BytesIO (b"\x04 \x76 \x6F " )
206
- decoder = decoder_class (mis )
187
+ def test_skip_utf8 (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
188
+ decoder = decoder_class (b"\x04 \x76 \x6F " )
207
189
assert decoder .tell () == 0
208
190
decoder .skip_utf8 ()
209
191
assert decoder .tell () == 3
210
192
211
193
212
194
@pytest .mark .parametrize ("decoder_class" , AVAILABLE_DECODERS )
213
- def test_read_int_as_float (decoder_class : CALLABLE_DECODER ) -> None :
214
- mis = io .BytesIO (b"\x00 \x00 \x9A \x41 " )
215
- decoder = decoder_class (mis )
195
+ def test_read_int_as_float (decoder_class : Callable [[bytes ], ReadableDecoder ]) -> None :
196
+ decoder = decoder_class (b"\x00 \x00 \x9A \x41 " )
216
197
reader = resolve (FloatType (), DoubleType ())
217
198
assert reader .read (decoder ) == 19.25
0 commit comments