[issue35960] dataclasses.field does not preserve empty metadata object

2019-02-12 Thread Eric V. Smith


Eric V. Smith  added the comment:

Thanks for the patch!

--
resolution:  -> fixed
stage: patch review -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35960] dataclasses.field does not preserve empty metadata object

2019-02-12 Thread Eric V. Smith


Eric V. Smith  added the comment:


New changeset 0a834c18cdafa5447d4436878e64aa7a4e4dc817 by Eric V. Smith (Miss 
Islington (bot)) in branch '3.7':
bpo-35960: Fix dataclasses.field throwing away empty metadata.  (GH-11815) 
(GH-11826)
https://github.com/python/cpython/commit/0a834c18cdafa5447d4436878e64aa7a4e4dc817


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35960] dataclasses.field does not preserve empty metadata object

2019-02-12 Thread miss-islington


Change by miss-islington :


--
pull_requests: +11857

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35960] dataclasses.field does not preserve empty metadata object

2019-02-12 Thread Eric V. Smith


Eric V. Smith  added the comment:


New changeset b01786c8812c4cc24dd561b5941025bdd6f444c0 by Eric V. Smith 
(Christopher Hunt) in branch 'master':
 bpo-35960: Fix dataclasses.field throwing away empty metadata.  (GH-11815)
https://github.com/python/cpython/commit/b01786c8812c4cc24dd561b5941025bdd6f444c0


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35960] dataclasses.field does not preserve empty metadata object

2019-02-11 Thread Eric V. Smith


Change by Eric V. Smith :


--
assignee:  -> eric.smith

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35960] dataclasses.field does not preserve empty metadata object

2019-02-10 Thread Karthikeyan Singaravelan


Change by Karthikeyan Singaravelan :


--
nosy: +eric.smith

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35960] dataclasses.field does not preserve empty metadata object

2019-02-10 Thread Christopher Hunt


Change by Christopher Hunt :


--
keywords: +patch, patch, patch
pull_requests: +11831, 11832, 11833
stage:  -> patch review

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35960] dataclasses.field does not preserve empty metadata object

2019-02-10 Thread Christopher Hunt


Change by Christopher Hunt :


--
keywords: +patch, patch
pull_requests: +11831, 11832
stage:  -> patch review

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35960] dataclasses.field does not preserve empty metadata object

2019-02-10 Thread Christopher Hunt


Change by Christopher Hunt :


--
keywords: +patch
pull_requests: +11831
stage:  -> patch review

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35960] dataclasses.field does not preserve empty metadata object

2019-02-10 Thread Christopher Hunt

New submission from Christopher Hunt :

The metadata argument to dataclasses.field is not preserved in the resulting 
Field.metadata attribute if the argument is a mapping with length 0.

The docs for dataclasses.field state:

> metadata: This can be a mapping or None. None is treated as an empty dict. 
> This value is wrapped in MappingProxyType() to make it read-only, and exposed 
> on the Field object.

The docs for MappingProxyType() state:

> Read-only proxy of a mapping. It provides a dynamic view on the mapping’s 
> entries, which means that when the mapping changes, the view reflects these 
> changes.

I assumed that the mapping provided could be updated after class initialization 
and the changes would reflect in the field's metadata attribute. Indeed this is 
the case when the mapping is non-empty, but not when the mapping is initially 
empty.

For example:

$ python
Python 3.8.0a1+ (heads/master:9db56fb8fa, Feb 10 2019, 19:54:10)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from dataclasses import field
>>> d = {}
>>> v = field(metadata=d)
>>> d['i'] = 1
>>> v.metadata
mappingproxy({})
>>> v = field(metadata=d)
>>> v.metadata
mappingproxy({'i': 1})
>>> d['j'] = 2
>>> v.metadata
mappingproxy({'i': 1, 'j': 2})

In my case I have a LazyDict into which I was trying to save partial(callback, 
field). I could not have the field before it was initialized so I tried:

d = {}
member: T = field(metadata=d)
d['key'] = partial(callback, field)

and it failed same as above.

As a workaround, one can set a dummy value in the mapping prior to calling 
dataclasses.field and then remove/overwrite it afterwards.

--
components: Library (Lib)
messages: 335184
nosy: chrahunt
priority: normal
severity: normal
status: open
title: dataclasses.field does not preserve empty metadata object
type: behavior
versions: Python 3.7, Python 3.8

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com