From cf8c8788c904cce68b0ab1d39900483f50983301 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Sat, 20 Nov 2021 15:46:56 -0800 Subject: Added kw_only parameter to make_dataclasses. (GH-29679) (cherry picked from commit f7638dd0f90b2afd9295ee179119f4a29859953a) Co-authored-by: Eric V. Smith --- Lib/dataclasses.py | 4 ++-- Lib/test/test_dataclasses.py | 11 +++++++++++ .../next/Library/2021-11-20-17-04-25.bpo-45803.wSgFOy.rst | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2021-11-20-17-04-25.bpo-45803.wSgFOy.rst diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index aa84f1b..4f4aa3d 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1326,7 +1326,7 @@ def _astuple_inner(obj, tuple_factory): def make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, - frozen=False, match_args=True, slots=False): + frozen=False, match_args=True, kw_only=False, slots=False): """Return a new dynamically created dataclass. The dataclass name will be 'cls_name'. 'fields' is an iterable @@ -1393,7 +1393,7 @@ def make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, # Apply the normal decorator. return dataclass(cls, init=init, repr=repr, eq=eq, order=order, unsafe_hash=unsafe_hash, frozen=frozen, - match_args=match_args, slots=slots) + match_args=match_args, kw_only=kw_only, slots=slots) def replace(obj, /, **changes): diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index bbbb8e6..b00d048 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3864,5 +3864,16 @@ class TestKeywordArgs(unittest.TestCase): c: int = 1 d: int + def test_make_dataclass(self): + A = make_dataclass("A", ['a'], kw_only=True) + self.assertTrue(fields(A)[0].kw_only) + + B = make_dataclass("B", + ['a', ('b', int, field(kw_only=False))], + kw_only=True) + self.assertTrue(fields(B)[0].kw_only) + self.assertFalse(fields(B)[1].kw_only) + + if __name__ == '__main__': unittest.main() diff --git a/Misc/NEWS.d/next/Library/2021-11-20-17-04-25.bpo-45803.wSgFOy.rst b/Misc/NEWS.d/next/Library/2021-11-20-17-04-25.bpo-45803.wSgFOy.rst new file mode 100644 index 0000000..77479d7 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-11-20-17-04-25.bpo-45803.wSgFOy.rst @@ -0,0 +1 @@ +Added missing kw_only parameter to dataclasses.make_dataclass(). -- cgit v0.12