This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2014年02月18日 21:13 by serhiy.storchaka, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| socket_enums_pickle_by_name.patch | serhiy.storchaka, 2014年02月18日 21:13 | review | ||
| socket_enums_pickle_by_name_2.patch | serhiy.storchaka, 2015年02月08日 23:13 | review | ||
| Messages (9) | |||
|---|---|---|---|
| msg211559 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2014年02月18日 21:13 | |
As far as socked enums are platform depending, pickling them by value makes not much sense. Here is a patch which makes AddressFamily and SocketType members be pickled by name. |
|||
| msg235548 - (view) | Author: Ethan Furman (ethan.furman) * (Python committer) | Date: 2015年02月08日 05:08 | |
To make sure I understand correctly: On platform ABC the value 1 could mean SOCK_STREAM but on platform XYZ SOCK_STREAM is value 32? Assuming the need to pickle socket types is not new, then people have been doing it, possibly with painful workarounds, on the integer values until now, and suddenly changing the pickle of a socket type from an integer into a string is going to break code. Or am I missing something? |
|||
| msg235549 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年02月08日 07:34 | |
I don't see how it can break code. If people use workaround that were not broken by changing SOCK_STREAM from int to enum, it shouldn't break by changing pickle representation of SOCK_STREAM. |
|||
| msg235561 - (view) | Author: Ethan Furman (ethan.furman) * (Python committer) | Date: 2015年02月08日 17:43 | |
An IntEnum is just a fancy int. You can add them, subtract them, multiply them, all that kind of thing. If you attempt to unpickle a 3.4 _PickleByNameIntEnum on a 3.3 system, what's going to happen? |
|||
| msg235562 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年02月08日 17:53 | |
> If you attempt to unpickle a 3.4 _PickleByNameIntEnum on a 3.3 system, > what's going to happen? The same as if you attempt to unpickle a 3.4 IntEnum on a 3.3 system -- AttributeError. |
|||
| msg235576 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年02月08日 23:13 | |
For the socket module constants there is even better way, which supports forward compatibility, i.e. SOCK_STREAM pickled in 3.5 could be unpickled on 3.3 (replacing ints with enums breaks forward compatibility). Here is a patch. |
|||
| msg238146 - (view) | Author: Ethan Furman (ethan.furman) * (Python committer) | Date: 2015年03月15日 14:22 | |
Serhiy, sorry for taking so long to get back to this -- we spent so much time making sure pickling worked I had no idea that unpickling didn't work in prior versions. |
|||
| msg238485 - (view) | Author: Ethan Furman (ethan.furman) * (Python committer) | Date: 2015年03月19日 00:35 | |
Enum members that are replacing constants now pickle by name (see issue23673). |
|||
| msg238490 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年03月19日 06:09 | |
Thanks Ethan. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:58 | admin | set | github: 64879 |
| 2015年03月19日 06:09:47 | serhiy.storchaka | set | messages: + msg238490 |
| 2015年03月19日 00:35:04 | ethan.furman | set | status: open -> closed superseder: IntEnum is unpicklable by previous Python versions messages: + msg238485 resolution: duplicate stage: patch review -> resolved |
| 2015年03月15日 14:22:59 | ethan.furman | set | messages: + msg238146 |
| 2015年02月08日 23:13:21 | serhiy.storchaka | set | files:
+ socket_enums_pickle_by_name_2.patch messages: + msg235576 |
| 2015年02月08日 17:53:23 | serhiy.storchaka | set | messages: + msg235562 |
| 2015年02月08日 17:43:39 | ethan.furman | set | messages: + msg235561 |
| 2015年02月08日 07:34:17 | serhiy.storchaka | set | messages: + msg235549 |
| 2015年02月08日 05:08:12 | ethan.furman | set | messages: + msg235548 |
| 2015年01月15日 05:07:28 | ethan.furman | set | assignee: ethan.furman |
| 2014年02月18日 21:13:59 | serhiy.storchaka | create | |