Skip to content

Commit

Permalink
gh-99957: Add frozen_default parameter on dataclass_transform (#9…
Browse files Browse the repository at this point in the history
  • Loading branch information
debonte committed Dec 6, 2022
1 parent bed15f8 commit 5c19050
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 1 deletion.
4 changes: 4 additions & 0 deletions Doc/library/typing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2575,6 +2575,10 @@ Functions and decorators
assumed to be True or False if it is omitted by the caller.
* ``kw_only_default`` indicates whether the ``kw_only`` parameter is
assumed to be True or False if it is omitted by the caller.
* ``frozen_default`` indicates whether the ``frozen`` parameter is
assumed to be True or False if it is omitted by the caller.

.. versionadded:: 3.12
* ``field_specifiers`` specifies a static list of supported classes
or functions that describe fields, similar to ``dataclasses.field()``.
* Arbitrary other keyword arguments are accepted in order to allow for
Expand Down
5 changes: 4 additions & 1 deletion Lib/test/test_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -7719,6 +7719,7 @@ class CustomerModel:
"eq_default": True,
"order_default": False,
"kw_only_default": True,
"frozen_default": False,
"field_specifiers": (),
"kwargs": {},
}
Expand Down Expand Up @@ -7749,6 +7750,7 @@ class CustomerModel(Decorated, frozen=True):
"eq_default": True,
"order_default": True,
"kw_only_default": False,
"frozen_default": False,
"field_specifiers": (),
"kwargs": {"make_everything_awesome": True},
}
Expand All @@ -7765,7 +7767,7 @@ def __new__(
return super().__new__(cls, name, bases, namespace)

Decorated = dataclass_transform(
order_default=True, field_specifiers=(Field,)
order_default=True, frozen_default=True, field_specifiers=(Field,)
)(ModelMeta)

class ModelBase(metaclass=Decorated): ...
Expand All @@ -7780,6 +7782,7 @@ class CustomerModel(ModelBase, init=False):
"eq_default": True,
"order_default": True,
"kw_only_default": False,
"frozen_default": True,
"field_specifiers": (Field,),
"kwargs": {},
}
Expand Down
4 changes: 4 additions & 0 deletions Lib/typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -3363,6 +3363,7 @@ def dataclass_transform(
eq_default: bool = True,
order_default: bool = False,
kw_only_default: bool = False,
frozen_default: bool = False,
field_specifiers: tuple[type[Any] | Callable[..., Any], ...] = (),
**kwargs: Any,
) -> Callable[[T], T]:
Expand Down Expand Up @@ -3416,6 +3417,8 @@ class CustomerModel(ModelBase):
assumed to be True or False if it is omitted by the caller.
- ``kw_only_default`` indicates whether the ``kw_only`` parameter is
assumed to be True or False if it is omitted by the caller.
- ``frozen_default`` indicates whether the ``frozen`` parameter is
assumed to be True or False if it is omitted by the caller.
- ``field_specifiers`` specifies a static list of supported classes
or functions that describe fields, similar to ``dataclasses.field()``.
- Arbitrary other keyword arguments are accepted in order to allow for
Expand All @@ -3432,6 +3435,7 @@ def decorator(cls_or_fn):
"eq_default": eq_default,
"order_default": order_default,
"kw_only_default": kw_only_default,
"frozen_default": frozen_default,
"field_specifiers": field_specifiers,
"kwargs": kwargs,
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add ``frozen_default`` parameter to :func:`typing.dataclass_transform`.

0 comments on commit 5c19050

Please sign in to comment.