dataclass-extensions 0.2.7__py3-none-any.whl → 0.2.9__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.
@@ -41,7 +41,9 @@ class Encoder:
41
41
  def iter_fields(d) -> Generator[tuple[str, Any], None, None]:
42
42
  for field in dataclasses.fields(d):
43
43
  value = getattr(d, field.name)
44
- if exclude_none and value is None:
44
+ if not field.init:
45
+ continue
46
+ elif exclude_none and value is None:
45
47
  continue
46
48
  elif exclude_private_fields and field.name.startswith("_"):
47
49
  continue
@@ -17,6 +17,8 @@ if sys.version_info < (3, 11):
17
17
  class Registrable:
18
18
  _registry: ClassVar[dict[str, Type[Registrable]]]
19
19
  _default_type: ClassVar[str | None]
20
+ registered_name: ClassVar[str | None]
21
+ registered_base: ClassVar[Type[Registrable] | None]
20
22
 
21
23
  type: dataclasses.InitVar[str | None] = dataclasses.field(
22
24
  default=None, kw_only=True, repr=False
@@ -24,16 +26,14 @@ class Registrable:
24
26
 
25
27
  def __new__(cls, *args, type: str | None = None, **kwargs):
26
28
  del args, kwargs
27
- if type is not None and (
28
- not hasattr(cls, "registered_name") or type != cls.registered_name # type: ignore
29
- ):
29
+ if type is not None and type != cls.registered_name:
30
30
  if type not in cls._registry:
31
31
  raise KeyError(
32
32
  f"'{type}' is not registered name for {cls.__name__}. "
33
33
  f"Available choices are: {list(cls._registry.keys())}"
34
34
  )
35
35
  return super().__new__(cls._registry[type])
36
- elif cls._default_type is not None and not hasattr(cls, "registered_name"):
36
+ elif cls._default_type is not None and cls.registered_name is None:
37
37
  return super().__new__(cls._registry[cls._default_type])
38
38
  else:
39
39
  return super().__new__(cls)
@@ -44,6 +44,10 @@ class Registrable:
44
44
  cls._registry = {}
45
45
  if not hasattr(cls, "_default_type"):
46
46
  cls._default_type = None
47
+ if not hasattr(cls, "registered_name"):
48
+ cls.registered_name = None
49
+ if not hasattr(cls, "registered_base"):
50
+ cls.registered_base = None
47
51
 
48
52
  @classmethod
49
53
  def register(cls, name: str, default: bool = False) -> Callable[[Type[R]], Type[R]]:
@@ -64,28 +68,18 @@ class Registrable:
64
68
  else:
65
69
  cls._default_type = name
66
70
 
67
- fields = [
68
- (f.name, f.type, f) for f in dataclasses.fields(subclass) if f.name != "type" # type: ignore
69
- ] + [
70
- ("registered_name", ClassVar[str], name), # type: ignore
71
- ("registered_base", ClassVar[R], cls), # type: ignore
72
- ("type", dataclasses.InitVar[str | None], dataclasses.field(default=name, kw_only=True, repr=False)), # type: ignore
73
- ]
74
- subclass = dataclasses.make_dataclass(
75
- subclass.__name__,
76
- fields, # type: ignore
77
- bases=(subclass,),
78
- )
79
71
  cls._registry[name] = subclass
80
- return subclass
72
+ subclass.registered_name = name
73
+ subclass.registered_base = cls
74
+ return subclass # type: ignore
81
75
 
82
76
  return register_subclass
83
77
 
84
78
  @classmethod
85
79
  def get_registered_name(cls: Type[R], subclass: Type[R] | None = None) -> str:
86
80
  if subclass is None:
87
- if hasattr(cls, "registered_name"):
88
- return cls.registered_name # type: ignore
81
+ if cls.registered_name is not None:
82
+ return cls.registered_name
89
83
  else:
90
84
  raise ValueError(
91
85
  f"class {cls.__name__} is not a registered subclass of any base registrable class"
@@ -1 +1 @@
1
- VERSION = "0.2.7"
1
+ VERSION = "0.2.9"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataclass-extensions
3
- Version: 0.2.7
3
+ Version: 0.2.9
4
4
  Summary: Additional functionality for Python dataclasses
5
5
  Author-email: Pete Walsh <epwalsh10@gmail.com>
6
6
  License: Apache License
@@ -0,0 +1,13 @@
1
+ dataclass_extensions/__init__.py,sha256=jpgRh5jjj9jM1tkhTVvB-aDThI2v4tAlq_WpR0-NOSI,255
2
+ dataclass_extensions/decode.py,sha256=U23hy4qVcWR1wrXjrhVorsqp7OG1r1ZfEFhO4cANM7A,8159
3
+ dataclass_extensions/encode.py,sha256=GJJKcO38pI20x20KvPz9EgUmxohnTpeJ08k8pwBHr0c,3390
4
+ dataclass_extensions/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ dataclass_extensions/registrable.py,sha256=-f9PinrHX0f_dX0EikhTh9lCJXb8foGNOlnsJBIYpo8,4261
6
+ dataclass_extensions/types.py,sha256=UwSV0MKjFDaK4dlgm72vJHHr6-8QNe8jMhbTZGOMIJM,247
7
+ dataclass_extensions/utils.py,sha256=8cigzY9JDEWexWXlcMxXyf27S50-1ZPMNmn4zUSrc6k,935
8
+ dataclass_extensions/version.py,sha256=xcHqQCfqvl5HQQt-xKKyKY65g0JwSXvtJ6TusOLm7no,18
9
+ dataclass_extensions-0.2.9.dist-info/licenses/LICENSE,sha256=YvuKOpYh3COIF0yqq-nCMXtpS7mh1GyYvPVlW2j1G-M,11359
10
+ dataclass_extensions-0.2.9.dist-info/METADATA,sha256=XBOZv6Ff0lYFRGg8HefNuoNpvi3UPfmUI8E_rs5CNDY,15925
11
+ dataclass_extensions-0.2.9.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
12
+ dataclass_extensions-0.2.9.dist-info/top_level.txt,sha256=njfdeqLtTThNGwqnoKu4JV8J1287xGAeEwyESpoU-k8,21
13
+ dataclass_extensions-0.2.9.dist-info/RECORD,,
@@ -1,13 +0,0 @@
1
- dataclass_extensions/__init__.py,sha256=jpgRh5jjj9jM1tkhTVvB-aDThI2v4tAlq_WpR0-NOSI,255
2
- dataclass_extensions/decode.py,sha256=U23hy4qVcWR1wrXjrhVorsqp7OG1r1ZfEFhO4cANM7A,8159
3
- dataclass_extensions/encode.py,sha256=7mLHmZrHThQMbC0wY5voHx3mOHgsRbq59kw_JdwgOOg,3324
4
- dataclass_extensions/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- dataclass_extensions/registrable.py,sha256=TWdJ0vLkOTsw5Zm8uOk7Ueh6ZODn-q_2jht1uWRkpzE,4608
6
- dataclass_extensions/types.py,sha256=UwSV0MKjFDaK4dlgm72vJHHr6-8QNe8jMhbTZGOMIJM,247
7
- dataclass_extensions/utils.py,sha256=8cigzY9JDEWexWXlcMxXyf27S50-1ZPMNmn4zUSrc6k,935
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,,