dataclass-extensions 0.2.6__py3-none-any.whl → 0.2.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -115,6 +115,17 @@ def _coerce(
115
115
  except ValueError:
116
116
  pass
117
117
 
118
+ if allowed_type is int:
119
+ if _safe_isinstance(value, (int, float)) and (value_as_int := int(value)) == value:
120
+ return value_as_int
121
+ elif _safe_isinstance(value, str):
122
+ try:
123
+ value_as_float = float(value)
124
+ if (value_as_int := int(value_as_float)) == value_as_float:
125
+ return value_as_int
126
+ except ValueError:
127
+ pass
128
+
118
129
  origin = getattr(allowed_type, "__origin__", None)
119
130
  args = getattr(allowed_type, "__args__", None)
120
131
  if (origin is list or origin is collections.abc.MutableSequence) and _safe_isinstance(
@@ -1 +1 @@
1
- VERSION = "0.2.6"
1
+ VERSION = "0.2.7"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataclass-extensions
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: Additional functionality for Python dataclasses
5
5
  Author-email: Pete Walsh <epwalsh10@gmail.com>
6
6
  License: Apache License
@@ -263,7 +263,6 @@ assert decode(FruitBasket, encode(basket)) == basket
263
263
 
264
264
  You can also define how to encode/decode non-dataclass types:
265
265
 
266
-
267
266
  ```python
268
267
  from dataclasses import dataclass
269
268
  from dataclass_extensions import decode, encode
@@ -280,11 +279,12 @@ class Bar:
280
279
  encode.register_encoder(lambda foo: {"x": foo.x}, Foo)
281
280
  decode.register_decoder(lambda d: Foo(d["x"]), Foo)
282
281
 
283
- encode(Bar(foo=Foo(10))) # {'foo': {'x': 10}}
284
- decode(Bar, {"foo": {"x": 10}})
282
+ bar = Bar(foo=Foo(10))
283
+ assert encode(bar) == {"foo": {"x": 10}}
284
+ assert decode(Bar, encode(bar)) == bar
285
285
  ```
286
286
 
287
- ### Registrable subclasses
287
+ ### Polymorphism through registrable subclasses
288
288
 
289
289
  ```python
290
290
  from dataclasses import dataclass
@@ -307,6 +307,7 @@ class Banana(Fruit):
307
307
  class Apple(Fruit):
308
308
  calories: int = 150
309
309
  price: float = 1.50
310
+ variety: str = "Granny Smith"
310
311
 
311
312
  @dataclass
312
313
  class FruitBasket:
@@ -314,7 +315,14 @@ class FruitBasket:
314
315
  count: int
315
316
 
316
317
  basket = FruitBasket(fruit=Apple(), count=2)
317
- # note the additional "type" field, which corresponds to the registered name of the subclass
318
- assert encode(basket) == {"fruit": {"calories": 150, "price": 1.5, "type": "apple"}, "count": 2}
318
+ assert encode(basket) == {
319
+ "fruit": {
320
+ "type": "apple", # corresponds to the registered name
321
+ "calories": 150,
322
+ "price": 1.5,
323
+ "variety": "Granny Smith",
324
+ },
325
+ "count": 2,
326
+ }
319
327
  assert decode(FruitBasket, encode(basket)) == basket
320
328
  ```
@@ -1,13 +1,13 @@
1
1
  dataclass_extensions/__init__.py,sha256=jpgRh5jjj9jM1tkhTVvB-aDThI2v4tAlq_WpR0-NOSI,255
2
- dataclass_extensions/decode.py,sha256=Oxhf7WrF1A_KF6MyCQAzOvyEeHCSyCSLeqo2Orfa7IA,7692
2
+ dataclass_extensions/decode.py,sha256=U23hy4qVcWR1wrXjrhVorsqp7OG1r1ZfEFhO4cANM7A,8159
3
3
  dataclass_extensions/encode.py,sha256=7mLHmZrHThQMbC0wY5voHx3mOHgsRbq59kw_JdwgOOg,3324
4
4
  dataclass_extensions/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  dataclass_extensions/registrable.py,sha256=TWdJ0vLkOTsw5Zm8uOk7Ueh6ZODn-q_2jht1uWRkpzE,4608
6
6
  dataclass_extensions/types.py,sha256=UwSV0MKjFDaK4dlgm72vJHHr6-8QNe8jMhbTZGOMIJM,247
7
7
  dataclass_extensions/utils.py,sha256=8cigzY9JDEWexWXlcMxXyf27S50-1ZPMNmn4zUSrc6k,935
8
- dataclass_extensions/version.py,sha256=XC2MYZybet-wsd8zs6MBULy8nzAc7dUW0vmpI8ttNTI,18
9
- dataclass_extensions-0.2.6.dist-info/licenses/LICENSE,sha256=YvuKOpYh3COIF0yqq-nCMXtpS7mh1GyYvPVlW2j1G-M,11359
10
- dataclass_extensions-0.2.6.dist-info/METADATA,sha256=PdNKa09RNSyMauDXbjgVrlcsgJCdCjtxuAn9mxbQg8U,15825
11
- dataclass_extensions-0.2.6.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
12
- dataclass_extensions-0.2.6.dist-info/top_level.txt,sha256=njfdeqLtTThNGwqnoKu4JV8J1287xGAeEwyESpoU-k8,21
13
- dataclass_extensions-0.2.6.dist-info/RECORD,,
8
+ dataclass_extensions/version.py,sha256=ZQLNbaBb3Roa6Z5LEm--iZickCQhYJVSrDpqf4YBbzc,18
9
+ dataclass_extensions-0.2.7.dist-info/licenses/LICENSE,sha256=YvuKOpYh3COIF0yqq-nCMXtpS7mh1GyYvPVlW2j1G-M,11359
10
+ dataclass_extensions-0.2.7.dist-info/METADATA,sha256=p7mMDdiaL_eT0yZDbMKLS9dh47Gj4rspEnw8tvXvdu0,15925
11
+ dataclass_extensions-0.2.7.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
12
+ dataclass_extensions-0.2.7.dist-info/top_level.txt,sha256=njfdeqLtTThNGwqnoKu4JV8J1287xGAeEwyESpoU-k8,21
13
+ dataclass_extensions-0.2.7.dist-info/RECORD,,