From e4087c70adfae9be6314651a67c11a5023c8b9d9 Mon Sep 17 00:00:00 2001 From: Alexander Belopolsky Date: Sun, 20 Sep 2015 23:17:33 -0400 Subject: [PATCH] PEP 495: New pickle format. --- pep-0495.txt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pep-0495.txt b/pep-0495.txt index fd46613e7..ca8f4b357 100644 --- a/pep-0495.txt +++ b/pep-0495.txt @@ -288,14 +288,18 @@ The ``datetime.datetime.time()`` method will copy the value of the Pickles ....... +The value of the fold attribute will only be saved in pickles created +with protocol version 4 (introduced in Python 3.4) or greater. + Pickle sizes for the ``datetime.datetime`` and ``datetime.time`` objects will not change. The ``fold`` value will be encoded in the -first bit of the 5th byte of the ``datetime.datetime`` pickle payload -or the 2nd byte of the datetime.time. In the `current implementation`_ -these bytes are used to store minute value (0-59) and the first bit is -always 0. (This change only affects pickle format. In the C -implementation, the ``fold`` attribute will get a full byte to store its -value.) +first bit of the 3rd (1st) byte of ``datetime.datetime`` +(``datetime.time``) pickle payload. In the `current implementation`_ +these byte are used to store the month (1-12) and hour (0-23) values +and the first bit is always 0. We picked these bytes because they are +the only bytes that are checked by the current unpickle code. Thus +loading post-PEP ``fold=1`` pickles in a pre-PEP Python will result in +an exception rather than an instance with out of range components. .. _current implementation: https://hg.python.org/cpython/file/d3b20bff9c5d/Include/datetime.h#l17