FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Mention Ellipsis pickling in the docs by sterliakov · Pull Request #103660 · python/cpython · GitHub

Repository navigation

Mention Ellipsis pickling in the docs - #103660

Merged
hauntsaninja merged 4 commits into
python:mainfrom
sterliakov:docs/st-ellipsis-serializable
Aug 30, 2023
Merged

hauntsaninja merged 4 commits into
python:mainfrom
sterliakov:docs/st-ellipsis-serializable

Conversation

Copy link
Copy Markdown
Contributor

I literally came to docs to check if Ellipsis can be pickled and unpickled, but had to try it in REPL instead. This micro PR updates the documentation page to mention that Ellipsis is picklable. (no issue code, since this is a minor doc-only change)

Needs backport to all maintained versions, because this behaviour did not change (at least it's picklable in versions 3.7 to 3.12, I haven't checked earlier versions).

Copy link
Copy Markdown
Member

Is this covered by ‘classes accessible from the top level of a module’? For example, NotImplemented isn’t contained in this list. Perhaps the ‘special’ thing about Ellipsis is the relation to ...?

A

Copy link
Copy Markdown
Contributor Author

Oh, I'd rather add NotImplemented too, thanks for the reminder! Just checked, and it's picklable as well.

Neither Ellipsis nor NotImplemented are covered by "classes accessible from..." at least because they are not classes... These five builtin singletons (with None, True, and False) are special due to their nature. In fact ... and NotImplemented are covered by "instances of such classes whose the result of calling __getstate__() is picklable", but this finding requires treating them in slightly unusual way (Ellipsis is not "instance of type types.EllipsisType" from the developer point of view, but a builtin truthy literal singleton, and the same logic applies to NotImplemented - instance of types.NotImplementedType).

Comment thread Doc/library/pickle.rst Outdated

Copy link
Copy Markdown
Member

Oh, I'd rather add NotImplemented too, thanks for the reminder!

Just added a review suggestion on that point.

Good points about classes vs singleton instances of the types!

A

Comment thread Doc/library/pickle.rst Outdated

hauntsaninja left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

If we're documenting this behaviour, ideally we should make sure it's tested as well.

Copy link
Copy Markdown
Contributor Author

Sorry for having abandoned this PR for a while. All these cases (both NotImplemented and Ellipsis) are already covered by tests introduced in BPO6477 9 years ago together with None pickling test.

def test_singleton_types(self):
# Issue #6477: Test that types of built-in singletons can be pickled.
singletons = [None, ..., NotImplemented]
for singleton in singletons:
for proto in protocols:
s = self.dumps(type(singleton), proto)
u = self.loads(s)
self.assertIs(type(singleton), u)

hauntsaninja added the needs backport to 3.12 only security fixes label Aug 30, 2023

Copy link
Copy Markdown
Member

@hauntsaninja I've merged HEAD as the branch was out-of-date, so the checks would never succeed (& hence auto-merge would never happen)

A

hauntsaninja merged commit 14ec0bb into python:main Aug 30, 2023

Copy link
Copy Markdown
Contributor

Thanks @sterliakov for the PR, and @hauntsaninja for merging it 🌮🎉.. I'm working now to backport this PR to: 3.11, 3.12.
🐍🍒⛏🤖 I'm not a witch! I'm not a witch!

Copy link
Copy Markdown

GH-108661 is a backport of this pull request to the 3.12 branch.

bedevere-bot removed the needs backport to 3.12 only security fixes label Aug 30, 2023
miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Aug 30, 2023
(cherry picked from commit 14ec0bb)

Co-authored-by: sterliakov <50529348+sterliakov@users.noreply.github.com>

Copy link
Copy Markdown

GH-108662 is a backport of this pull request to the 3.11 branch.

bedevere-bot removed the needs backport to 3.11 only security fixes label Aug 30, 2023
miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Aug 30, 2023
(cherry picked from commit 14ec0bb)

Co-authored-by: sterliakov <50529348+sterliakov@users.noreply.github.com>
hauntsaninja pushed a commit that referenced this pull request Aug 30, 2023
Mention Ellipsis pickling in the docs (GH-103660)
(cherry picked from commit 14ec0bb)

Co-authored-by: sterliakov <50529348+sterliakov@users.noreply.github.com>
Yhg1s pushed a commit that referenced this pull request Aug 30, 2023
Mention Ellipsis pickling in the docs (GH-103660)
(cherry picked from commit 14ec0bb)

Co-authored-by: sterliakov <50529348+sterliakov@users.noreply.github.com>
carljm added a commit to carljm/cpython that referenced this pull request Aug 30, 2023
* main:
  pythongh-108520: Fix bad fork detection in nested multiprocessing use case (python#108568)
  pythongh-108590: Revert pythongh-108657 (commit 400a1ce) (python#108686)
  pythongh-108494: Argument Clinic: Document how to generate code that uses the limited C API (python#108584)
  Document Python build requirements (python#108646)
  pythongh-101100: Fix Sphinx warnings in the Logging Cookbook (python#108678)
  Fix typo in multiprocessing docs (python#108666)
  pythongh-108669: unittest: Fix documentation for TestResult.collectedDurations (python#108670)
  pythongh-108590: Fix sqlite3.iterdump for invalid Unicode in TEXT columns (python#108657)
  Revert "pythongh-103224: Use the realpath of the Python executable in `test_venv` (pythonGH-103243)" (pythonGH-108667)
  pythongh-106320: Remove private _Py_ForgetReference() (python#108664)
  Mention Ellipsis pickling in the docs (python#103660)
  Revert "Use non alternate name for Kyiv (pythonGH-108533)" (pythonGH-108649)
  pythongh-108278: Deprecate passing the first param of sqlite3.Connection callback APIs by keyword (python#108632)
  pythongh-108455: peg_generator: install two stubs packages before running mypy (python#108637)
  pythongh-107801: Improve the accuracy of io.IOBase.seek docs (python#108268)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Documentation in the Doc dir skip issue skip news

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants


Back | FazBrowse Home | New Git URL