cloudpipe / cloudpipe/cloudpickle

Cloudpickle and data classes do not play well together

Open
#424 3 comments 1 reaction 0 assignees View on GitHub
Dominant language
Python
Stars
1.9k
Forks
195
Avg merge
1d 10h
Merged PRs (30d)
1

Description

When restoring a value of a `dataclass` with cloudpickle, it breaks:

Example
```
import dataclasses
from dataclasses import dataclass

@dataclass
class Range:
start: int
end: int

v = Range(1, 2)
print("defined")
print(dataclasses.fields(v))

import cloudpickle

print("imported cloudpickle")
print(dataclasses.fields(v))

v_dumped = cloudpickle.dumps(v)

print("dumped with cloudpickle")
print(dataclasses.fields(v))

vv = cloudpickle.loads(v_dumped)
print("loaded with cloudpickle")
print(dataclasses.fields(v))

print("restored value")
print(dataclasses.fields(vv))
```

Leads to
```
defined
(Field(name='start',type=,default=,default_factory=,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD), Field(name='end',type=,default=,default_factory=,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD))
imported cloudpickle
(Field(name='start',type=,default=,default_factory=,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD), Field(name='end',type=,default=,default_factory=,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD))
dumped with cloudpickle
(Field(name='start',type=,default=,default_factory=,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD), Field(name='end',type=,default=,default_factory=,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD))
loaded with cloudpickle
()
restored value
()
```

I.e. as soon as we restore, the type of the data class is destroyed

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.