
    x[h
                          " S  S5      r g)c                   F    \ rS rSrSrSrS rS\SS4S jrS	\	SS4S
 jr
Srg)CloudInitPickleMixin   a  Scaffolding for versioning of pickles.

This class implements ``__getstate__`` and ``__setstate__`` to provide
lightweight versioning of the pickles that are generated for classes which
use it.  Versioning is done at the class level.

The current version of a class's pickle should be set in the class variable
``_ci_pkl_version``, as an int.  If not overridden, it will default to 0.

On unpickle, the object's state will be restored and then
``self._unpickle`` is called with the version of the stored pickle as the
only argument: this is where classes should implement any deserialization
fixes they require.  (If the stored pickle has no version, 0 is passed.)
    c                 j    U R                   R                  5       n[        U 5      R                  US'   U$ )a$  Persist instance state, adding a pickle version attribute.

This adds a ``_ci_pkl_version`` attribute to ``self.__dict__`` and
returns that for serialisation.  The attribute is stripped out in
``__setstate__`` on unpickle.

The value of ``_ci_pkl_version`` is ``type(self)._ci_pkl_version``.
_ci_pkl_version)__dict__copytyper   )selfstates     7/usr/lib/python3/dist-packages/cloudinit/persistence.py__getstate__!CloudInitPickleMixin.__getstate__   s0     ""$#':#=#=     r   returnNc                     UR                  SS5      nU R                  R                  U5        U R                  U5        g)a  Restore instance state and handle missing attributes on upgrade.

This will be called when an instance of this class is unpickled; the
previous instance's ``__dict__`` is passed as ``state``.  This method
removes the pickle version from the stored state, restores the
remaining state into the current instance, and then calls
``self._unpickle`` with the version (or 0, if no version is found in
the stored state).

See https://docs.python.org/3/library/pickle.html#object.__setstate__
for further background.
r   r   N)popr   update	_unpickle)r   r   versions      r   __setstate__!CloudInitPickleMixin.__setstate__'   s3     ))-q1U#wr   ci_pkl_versionc                     g)a  Perform any deserialization fixes required.

By default, this does nothing.  Classes using this mixin should
override this method if they have fixes they need to apply.

``ci_pkl_version`` will be the version stored in the pickle for this
object, or 0 if no version is present.
N )r   r   s     r   r   CloudInitPickleMixin._unpickle8   s    r   r   )__name__
__module____qualname____firstlineno____doc__r   r   dictr   intr   __static_attributes__r   r   r   r   r      s9     O $  4  "  r   r   N)r   r   r   r   <module>r%      s   8 8r   