Shantanu
718e86671f
gh-98886: Fix issues with dataclass fields with special underscore names ( #102032 )
...
This commit prefixes `__dataclass` to several things in the locals dict:
- Names like `_dflt_` (which cause trouble, see first test)
- Names like `_type_` (not known to be able to cause trouble)
- `_return_type` (not known to able to cause trouble)
- `_HAS_DEFAULT_FACTORY` (which causes trouble, see second test)
In addition, this removes `MISSING` from the locals dict. As far as I can tell, this wasn't needed even in the initial implementation of dataclasses.py (and tests on that version passed with it removed). This makes me wary :-)
This is basically a continuation of #96151 , where fixing this was welcomed in https://github.com/python/cpython/pull/98143#issuecomment-1280306360
2023-03-25 14:40:11 -07:00
Nikita Sobolev
8ec6486462
gh-103027: Update `dataclass.make_dataclass` docstring (gh-103028)
...
* gh-103027: Update `dataclass.make_dataclass` docstring
2023-03-25 15:36:38 -04:00
Alex Waygood
baf4eb083c
gh-102947: Improve traceback when calling `fields()` on a non-dataclass ( #102948 )
2023-03-23 14:17:54 +00:00
Nikita Sobolev
d97757f793
gh-102069: Fix `__weakref__` descriptor generation for custom dataclasses ( #102075 )
2023-03-13 15:42:05 -06:00
T
71e37d9079
gh-98169 dataclasses.astuple support DefaultDict ( #98170 )
...
Co-authored-by: Pieter Eendebak <pieter.eendebak@gmail.com>
2023-03-13 14:46:35 -06:00
Ilya V. Schurov
767d3a8f6f
gh-88071: Update docstrings of dataclass' astuple and asdict ( #101806 )
...
Update dataclasses.astuple and dataclasses.asdict docstrings to reflect that they deep copy objects in the field values.
2023-03-10 17:27:41 -07:00
Nikita Sobolev
b48be8fa18
gh-102103: add `module` argument to `dataclasses.make_dataclass` ( #102104 )
2023-03-10 17:26:46 -07:00
Xuehai Pan
ee6f8413a9
gh-102578: Optimise setting and deleting mutable attributes on non-dataclass subclasses of frozen dataclasses (gh-102573)
2023-03-10 19:21:22 -05:00
Alex Waygood
401d7a7f00
gh-102515: Remove unused imports in the `Lib/` directory ( #102516 )
2023-03-08 11:45:38 +00:00
Carl Meyer
0a7936a38f
gh-90104: avoid RecursionError on recursive dataclass field repr (gh-100756)
...
Avoid RecursionError on recursive dataclass field repr
2023-01-05 19:19:40 -05:00
Shantanu
29f98b46b7
gh-96151: Use a private name for passing builtins to dataclass. This now allows for a field named BUILTIN (gh-98143)
2022-10-31 08:31:01 -04:00
Tiger
c46a423a52
bpo-35540 dataclasses.asdict now supports defaultdict fields (gh-32056)
2022-10-06 17:11:59 -07:00
Nikita Sobolev
4f380db1a5
gh-96142: add missing params to `dataclass._DataclassParams` (gh-96382)
2022-10-04 09:53:28 -07:00
Shantanu
72b5a55bc8
Add comment to subtle dataclass code (gh-96133)
...
In the PR that made this change, 1st1 left a "note to self: add a
comment explaining this". This comment was never added.
https://github.com/python/cpython/pull/9518/files#r280608117
I was reading this code and it wasn't obvious to me why we weren't
exec-ing directly into locals. So I got to learn something new :-)
https://docs.python.org/3/reference/executionmodel.html#interaction-with-dynamic-features
2022-10-03 17:30:04 -07:00
larryhastings
00b5a08c80
gh-97799: use inspect.get_annotations in dataclass ( #97800 )
...
dataclass used to get the annotations on a class object using
cls.__dict__.get('__annotations__'). Now that it always imports
inspect, it can use inspect.get_annotations, which is modern
best practice for coping with annotations.
2022-10-03 15:46:09 -07:00
Roman Novak
b8c528694e
Fix minor docstring issues in `dataclasses.py`. (gh-93024)
...
Previously, when using `functools.wrap` around them (and inherit their docstrings), sphinx renders the docstrings badly and raises warnings about wrong indent.
2022-07-26 10:48:58 -04:00
Tom Fryers
a10cf2f6b3
Improve dataclass docstring (gh-94686)
2022-07-09 14:26:24 -04:00
Serhiy Storchaka
f9433fff47
gh-89828: Do not relay the __class__ attribute in GenericAlias ( #93754 )
...
list[int].__class__ returned type, and isinstance(list[int], type)
returned True. It caused numerous problems in code that checks
isinstance(x, type).
2022-06-18 11:34:57 +03:00
Bluenix
5849af7a80
GH-93521: For dataclasses, filter out `__weakref__` slot if present in bases (GH-93535)
2022-06-07 20:53:08 -04:00
Eric V. Smith
5f9c0f5ddf
Add weakref_slot to dataclass decorator, to allow instances with slots to be weakref-able. ( #92160 )
2022-05-02 10:36:39 -06:00
Hugo van Kemenade
6881ea936e
bpo-47126: Update to canonical PEP URLs specified by PEP 676 (GH-32124)
2022-03-30 12:00:27 +01:00
Arie Bovenberg
82e9b0bb0a
bpo-46382 dataclass(slots=True) now takes inherited slots into account (GH-31980)
...
Do not include any members in __slots__ that are already in a base class's __slots__.
2022-03-19 17:01:17 -04:00
Eric V. Smith
e029c53e1a
bpo-44674: Use unhashability as a proxy for mutability for default dataclass __init__ arguments. (GH-29867)
...
`@dataclass` in 3.10 prohibits using list, dict, or set as default values. It does this to avoid the mutable default problem. This test is both too strict, and not strict enough. Too strict, because some immutable subclasses should be safe, and not strict enough, because other mutable types should be prohibited. With this change applied, `@dataclass` now uses unhashability as a proxy for mutability: if objects aren't hashable, they're assumed to be mutable.
2021-12-11 16:12:17 -05:00
Serhiy Storchaka
446be16686
bpo-45663: Fix is_dataclass() for dataclasses which are subclasses of types.GenericAlias (GH-29294)
2021-12-05 22:42:50 +02:00
Serhiy Storchaka
1fd4de5bdd
bpo-45662: Fix the repr of InitVar with a type alias to the built-in class (GH-29291)
...
For example, InitVar[list[int]].
2021-12-05 22:41:58 +02:00
Eric V. Smith
d3062f672c
bpo-44649: Fix dataclasses(slots=True) with a field with a default, but init=False (GH-29692)
...
Special handling is needed, because for non-slots dataclasses the instance attributes are not set: reading from a field just references the class's attribute of the same name, which contains the default value. But this doesn't work for classes using __slots__: they don't read the class's attribute. So in that case (and that case only), initialize the instance attribute. Handle this for both normal defaults, and for fields using default_factory.
2021-11-22 08:26:12 -05:00
Eric V. Smith
f7638dd0f9
Added kw_only parameter to make_dataclasses. (GH-29679)
2021-11-20 18:25:56 -05:00
Landon Yarrington
5b4a7675bc
Fix dataclassses spelling (GH-28837)
2021-10-09 15:17:52 -04:00
Binbin
17b16e13bb
Fix typos in multiple files (GH-26689)
...
Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
2021-06-12 22:47:44 -04:00
Sean Grady
7e6f237569
Fix dataclass comment typo _eq__ -> __eq__ (GH-26433)
2021-05-28 16:57:18 -04:00
Eric V. Smith
99ad742ea9
bpo-44015: dataclasses should allow KW_ONLY to be specified only once per class (GH-25841)
...
bpo-44015: Raise a TypeError if KW_ONLY is specified more than once.
2021-05-03 03:24:53 -04:00
Eric V. Smith
823fbf4e0e
If using a frozen class with slots, add __getstate__ and __setstate__ to set the instance values. (GH-25786)
2021-05-01 13:27:30 -04:00
Yurii Karabas
c24199184b
bpo-42269: Add slots parameter to dataclass decorator (GH-24171)
...
Add slots parameter to dataclass decorator and make_dataclass function.
2021-04-30 22:14:30 -04:00
Eric V. Smith
c0280532dc
Add keyword-only fields to dataclasses. (GH=25608)
2021-04-25 20:42:39 -04:00
Pablo Galindo
b0544ba77c
bpo-38605: Revert making 'from __future__ import annotations' the default (GH-25490)
...
This reverts commits 044a1048ca
and 1be456ae9d
, adapting the code to changes that happened after it.
2021-04-21 12:41:19 +01:00
Eric V. Smith
76beadb8ff
Fix typo in a dataclasses comment. (GH-25454)
2021-04-17 09:53:24 -04:00
Eric V. Smith
c1a66bdd6f
Remove an unnecessary copy of the 'namespace' parameter to make_dataclass(). (GH-25372)
2021-04-12 21:02:02 -04:00
Eric V. Smith
750f484752
bpo-43764: Add match_args=False parameter to dataclass decorator and to make_dataclasses function. (GH-25337)
...
Add match_args=False parameter to dataclass decorator and to make_dataclass function.
2021-04-10 21:28:42 -04:00
Brandt Bucher
d92c59f486
bpo-43764: Fix `__match_args__` generation logic for dataclasses (GH-25284)
2021-04-08 12:54:34 -07:00
Iurii Kemaev
376ffc6ac4
bpo-43176: Fix processing of empty dataclasses (GH-24484)
...
When a dataclass inherits from an empty base, all immutability checks are omitted. This PR fixes this and adds tests for it.
Automerge-Triggered-By: GH:ericvsmith
2021-04-05 22:14:01 -07:00
Zackery Spytz
75220674c0
bpo-36470: Allow dataclasses.replace() to handle InitVars with default values (GH-20867)
...
Co-Authored-By: Claudiu Popa <pcmanticore@gmail.com>
Automerge-Triggered-By: GH:ericvsmith
2021-04-05 12:41:01 -07:00
Brandt Bucher
145bf269df
bpo-42128: Structural Pattern Matching (PEP 634) (GH-22917)
...
Co-authored-by: Guido van Rossum <guido@python.org>
Co-authored-by: Talin <viridia@gmail.com>
Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
2021-02-26 14:51:55 -08:00
Batuhan Taskaya
c7437e2c02
bpo-41747: Ensure all dataclass methods uses their parents' qualname (GH-22155)
...
* bpo-41747: Ensure all dataclass methods uses their parents' qualname
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
2020-10-21 09:49:22 -04:00
Batuhan Taskaya
044a1048ca
bpo-38605: Make 'from __future__ import annotations' the default (GH-20434)
...
The hard part was making all the tests pass; there are some subtle issues here, because apparently the future import wasn't tested very thoroughly in previous Python versions.
For example, `inspect.signature()` returned type objects normally (except for forward references), but strings with the future import. We changed it to try and return type objects by calling `typing.get_type_hints()`, but fall back on returning strings if that function fails (which it may do if there are future references in the annotations that require passing in a specific namespace to resolve).
2020-10-06 13:03:02 -07:00
Ben Avrahami
bef7d299eb
bpo-41905: Add abc.update_abstractmethods() (GH-22485)
...
This function recomputes `cls.__abstractmethods__`.
Also update `@dataclass` to use it.
2020-10-06 10:40:50 -07:00
Jürgen Gmach
80526f6841
Fix typo in dataclasses module (GH-21109)
...
Automerge-Triggered-By: @matrixise
2020-06-24 03:46:52 -07:00
Ethan Smith
d01628e411
bpo-39481: PEP 585 for dataclasses, mailbox, contextvars (GH-19425)
2020-04-14 16:14:15 -07:00
Yury Selivanov
d219cc4180
bpo-34776: Fix dataclasses to support __future__ "annotations" mode ( #9518 )
2019-12-09 15:54:20 +01:00
Samuel Colvin
793cb85437
bpo-38431: Fix __repr__ method of InitVar to work with typing objects. (GH-16702)
2019-10-13 14:45:36 +03:00
Serhiy Storchaka
b4d0b39a9b
bpo-38209: Simplify dataclasses.InitVar by using __class_getitem__(). (GH-16255)
2019-09-22 13:32:41 +03:00