|
9 | 9 | from enum import Enum
|
10 | 10 | from math import inf, isinf, isnan, nan
|
11 | 11 | from pathlib import Path
|
12 |
| -from typing import ClassVar, Literal |
| 12 | +from typing import ClassVar |
13 | 13 |
|
14 | 14 | import pytest
|
15 | 15 | from dirty_equals import HasRepr, IsList
|
@@ -177,85 +177,132 @@ def test_any_with_timedelta_serializer():
|
177 | 177 | ]
|
178 | 178 |
|
179 | 179 |
|
180 |
| -@pytest.mark.parametrize('mode', ['float', 'seconds_float']) |
181 |
| -def test_any_config_timedelta_float(mode: Literal['float', 'seconds_float']): |
182 |
| - s = SchemaSerializer(core_schema.any_schema(), config={'ser_json_timedelta': mode}) |
183 |
| - h2 = timedelta(hours=2) |
184 |
| - assert s.to_python(h2) == h2 |
185 |
| - assert s.to_python(h2, mode='json') == 7200.0 |
186 |
| - assert s.to_json(h2) == b'7200.0' |
187 |
| - |
188 |
| - assert s.to_python({h2: 'foo'}) == {h2: 'foo'} |
189 |
| - assert s.to_python({h2: 'foo'}, mode='json') == {'7200': 'foo'} |
190 |
| - assert s.to_json({h2: 'foo'}) == b'{"7200":"foo"}' |
191 |
| - |
192 |
| - |
193 |
| -@pytest.mark.parametrize('mode', ['float', 'seconds_float']) |
194 |
| -def test_any_config_timedelta_float_faction(mode): |
195 |
| - s = SchemaSerializer(core_schema.any_schema(), config={'ser_json_timedelta': mode}) |
196 |
| - one_half_s = timedelta(seconds=1.5) |
197 |
| - assert s.to_python(one_half_s) == one_half_s |
198 |
| - assert s.to_python(one_half_s, mode='json') == 1.5 |
199 |
| - assert s.to_json(one_half_s) == b'1.5' |
200 |
| - |
201 |
| - assert s.to_python({one_half_s: 'foo'}) == {one_half_s: 'foo'} |
202 |
| - assert s.to_python({one_half_s: 'foo'}, mode='json') == {'1.5': 'foo'} |
203 |
| - assert s.to_json({one_half_s: 'foo'}) == b'{"1.5":"foo"}' |
204 |
| - |
205 |
| - |
206 |
| -@pytest.mark.parametrize('mode', ['float', 'seconds_float']) |
207 |
| -def test_any_config_timedelta_float_negative(mode): |
208 |
| - s = SchemaSerializer(core_schema.any_schema(), config={'ser_json_timedelta': mode}) |
209 |
| - one_half_s = timedelta(seconds=-1.5) |
210 |
| - assert s.to_python(one_half_s) == one_half_s |
211 |
| - assert s.to_python(one_half_s, mode='json') == -1.5 |
212 |
| - assert s.to_json(one_half_s) == b'-1.5' |
213 |
| - |
214 |
| - assert s.to_python({one_half_s: 'foo'}) == {one_half_s: 'foo'} |
215 |
| - assert s.to_python({one_half_s: 'foo'}, mode='json') == {'-1.5': 'foo'} |
216 |
| - assert s.to_json({one_half_s: 'foo'}) == b'{"-1.5":"foo"}' |
217 |
| - |
218 |
| - |
219 | 180 | @pytest.mark.parametrize(
|
220 |
| - 'td,expected_to_python,expected_to_json,expected_to_python_dict,expected_to_json_dict', |
| 181 | + 'td,expected_to_python,expected_to_json,expected_to_python_dict,expected_to_json_dict,mode', |
221 | 182 | [
|
222 |
| - (timedelta(hours=2), 7200000.0, b'7200000.0', {'7200000': 'foo'}, b'{"7200000":"foo"}'), |
223 |
| - (timedelta(hours=-2), -7200000.0, b'-7200000.0', {'-7200000': 'foo'}, b'{"-7200000":"foo"}'), |
224 |
| - (timedelta(seconds=1.5), 1500.0, b'1500.0', {'1500': 'foo'}, b'{"1500":"foo"}'), |
225 |
| - (timedelta(seconds=-1.5), -1500.0, b'-1500.0', {'-1500': 'foo'}, b'{"-1500":"foo"}'), |
226 |
| - (timedelta(microseconds=1), 0.001, b'0.001', {'0.001': 'foo'}, b'{"0.001":"foo"}'), |
| 183 | + (timedelta(hours=2), 7200000.0, b'7200000.0', {'7200000': 'foo'}, b'{"7200000":"foo"}', 'milliseconds_float'), |
| 184 | + ( |
| 185 | + timedelta(hours=-2), |
| 186 | + -7200000.0, |
| 187 | + b'-7200000.0', |
| 188 | + {'-7200000': 'foo'}, |
| 189 | + b'{"-7200000":"foo"}', |
| 190 | + 'milliseconds_float', |
| 191 | + ), |
| 192 | + (timedelta(seconds=1.5), 1500.0, b'1500.0', {'1500': 'foo'}, b'{"1500":"foo"}', 'milliseconds_float'), |
| 193 | + (timedelta(seconds=-1.5), -1500.0, b'-1500.0', {'-1500': 'foo'}, b'{"-1500":"foo"}', 'milliseconds_float'), |
| 194 | + (timedelta(microseconds=1), 0.001, b'0.001', {'0.001': 'foo'}, b'{"0.001":"foo"}', 'milliseconds_float'), |
227 | 195 | (
|
228 | 196 | timedelta(microseconds=-1),
|
229 | 197 | -0.0010000000000287557,
|
230 | 198 | b'-0.0010000000000287557',
|
231 | 199 | {'-0.0010000000000287557': 'foo'},
|
232 | 200 | b'{"-0.0010000000000287557":"foo"}',
|
| 201 | + 'milliseconds_float', |
| 202 | + ), |
| 203 | + ( |
| 204 | + timedelta(days=1), |
| 205 | + 86400000.0, |
| 206 | + b'86400000.0', |
| 207 | + {'86400000': 'foo'}, |
| 208 | + b'{"86400000":"foo"}', |
| 209 | + 'milliseconds_float', |
| 210 | + ), |
| 211 | + ( |
| 212 | + timedelta(days=-1), |
| 213 | + -86400000.0, |
| 214 | + b'-86400000.0', |
| 215 | + {'-86400000': 'foo'}, |
| 216 | + b'{"-86400000":"foo"}', |
| 217 | + 'milliseconds_float', |
| 218 | + ), |
| 219 | + ( |
| 220 | + timedelta(days=1, seconds=1), |
| 221 | + 86401000.0, |
| 222 | + b'86401000.0', |
| 223 | + {'86401000': 'foo'}, |
| 224 | + b'{"86401000":"foo"}', |
| 225 | + 'milliseconds_float', |
| 226 | + ), |
| 227 | + ( |
| 228 | + timedelta(days=-1, seconds=-1), |
| 229 | + -86401000.0, |
| 230 | + b'-86401000.0', |
| 231 | + {'-86401000': 'foo'}, |
| 232 | + b'{"-86401000":"foo"}', |
| 233 | + 'milliseconds_float', |
| 234 | + ), |
| 235 | + ( |
| 236 | + timedelta(days=1, seconds=-1), |
| 237 | + 86399000.0, |
| 238 | + b'86399000.0', |
| 239 | + {'86399000': 'foo'}, |
| 240 | + b'{"86399000":"foo"}', |
| 241 | + 'milliseconds_float', |
233 | 242 | ),
|
234 |
| - (timedelta(days=1), 86400000.0, b'86400000.0', {'86400000': 'foo'}, b'{"86400000":"foo"}'), |
235 |
| - (timedelta(days=-1), -86400000.0, b'-86400000.0', {'-86400000': 'foo'}, b'{"-86400000":"foo"}'), |
236 |
| - (timedelta(days=1, seconds=1), 86401000.0, b'86401000.0', {'86401000': 'foo'}, b'{"86401000":"foo"}'), |
237 |
| - (timedelta(days=-1, seconds=-1), -86401000.0, b'-86401000.0', {'-86401000': 'foo'}, b'{"-86401000":"foo"}'), |
238 |
| - (timedelta(days=1, seconds=-1), 86399000.0, b'86399000.0', {'86399000': 'foo'}, b'{"86399000":"foo"}'), |
239 | 243 | (
|
240 | 244 | timedelta(days=1, seconds=1, microseconds=1),
|
241 | 245 | 86401000.00099999,
|
242 | 246 | b'86401000.00099999',
|
243 | 247 | {'86401000.00099999': 'foo'},
|
244 | 248 | b'{"86401000.00099999":"foo"}',
|
| 249 | + 'milliseconds_float', |
245 | 250 | ),
|
246 | 251 | (
|
247 | 252 | timedelta(days=-1, seconds=-1, microseconds=-1),
|
248 | 253 | -86401000.00099999,
|
249 | 254 | b'-86401000.00099999',
|
250 | 255 | {'-86401000.00099999': 'foo'},
|
251 | 256 | b'{"-86401000.00099999":"foo"}',
|
| 257 | + 'milliseconds_float', |
| 258 | + ), |
| 259 | + (timedelta(hours=2), 7200.0, b'7200.0', {'7200': 'foo'}, b'{"7200":"foo"}', 'seconds_float'), |
| 260 | + (timedelta(hours=-2), -7200.0, b'-7200.0', {'-7200': 'foo'}, b'{"-7200":"foo"}', 'seconds_float'), |
| 261 | + (timedelta(seconds=1.5), 1.5, b'1.5', {'1.5': 'foo'}, b'{"1.5":"foo"}', 'seconds_float'), |
| 262 | + (timedelta(seconds=-1.5), -1.5, b'-1.5', {'-1.5': 'foo'}, b'{"-1.5":"foo"}', 'seconds_float'), |
| 263 | + (timedelta(microseconds=1), 1e-6, b'1e-6', {'0.000001': 'foo'}, b'{"0.000001":"foo"}', 'seconds_float'), |
| 264 | + ( |
| 265 | + timedelta(microseconds=-1), |
| 266 | + -1.0000000000287557e-6, |
| 267 | + b'-1.0000000000287557e-6', |
| 268 | + {'-0.0000010000000000287557': 'foo'}, |
| 269 | + b'{"-0.0000010000000000287557":"foo"}', |
| 270 | + 'seconds_float', |
| 271 | + ), |
| 272 | + (timedelta(days=1), 86400.0, b'86400.0', {'86400': 'foo'}, b'{"86400":"foo"}', 'seconds_float'), |
| 273 | + (timedelta(days=-1), -86400.0, b'-86400.0', {'-86400': 'foo'}, b'{"-86400":"foo"}', 'seconds_float'), |
| 274 | + (timedelta(days=1, seconds=1), 86401.0, b'86401.0', {'86401': 'foo'}, b'{"86401":"foo"}', 'seconds_float'), |
| 275 | + ( |
| 276 | + timedelta(days=-1, seconds=-1), |
| 277 | + -86401.0, |
| 278 | + b'-86401.0', |
| 279 | + {'-86401': 'foo'}, |
| 280 | + b'{"-86401":"foo"}', |
| 281 | + 'seconds_float', |
| 282 | + ), |
| 283 | + (timedelta(days=1, seconds=-1), 86399.0, b'86399.0', {'86399': 'foo'}, b'{"86399":"foo"}', 'seconds_float'), |
| 284 | + ( |
| 285 | + timedelta(days=1, seconds=1, microseconds=1), |
| 286 | + 86401.000001, |
| 287 | + b'86401.000001', |
| 288 | + {'86401.000001': 'foo'}, |
| 289 | + b'{"86401.000001":"foo"}', |
| 290 | + 'seconds_float', |
| 291 | + ), |
| 292 | + ( |
| 293 | + timedelta(days=-1, seconds=-1, microseconds=-1), |
| 294 | + -86401.000001, |
| 295 | + b'-86401.000001', |
| 296 | + {'-86401.000001': 'foo'}, |
| 297 | + b'{"-86401.000001":"foo"}', |
| 298 | + 'seconds_float', |
252 | 299 | ),
|
253 | 300 | ],
|
254 | 301 | )
|
255 |
| -def test_any_config_timedelta_millisecond( |
256 |
| - td: timedelta, expected_to_python, expected_to_json, expected_to_python_dict, expected_to_json_dict |
| 302 | +def test_any_config_timedelta( |
| 303 | + td: timedelta, expected_to_python, expected_to_json, expected_to_python_dict, expected_to_json_dict, mode |
257 | 304 | ):
|
258 |
| - s = SchemaSerializer(core_schema.any_schema(), config={'ser_json_timedelta': 'milliseconds_float'}) |
| 305 | + s = SchemaSerializer(core_schema.any_schema(), config={'ser_json_timedelta': mode}) |
259 | 306 | assert s.to_python(td) == td
|
260 | 307 | assert s.to_python(td, mode='json') == expected_to_python
|
261 | 308 | assert s.to_json(td) == expected_to_json
|
|
0 commit comments