|  | 
| 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