PHP 7.4.33
Preview: persistence.py Size: 2.52 KB
/lib/python3/dist-packages/cloudinit/persistence.py
# Copyright (C) 2020 Canonical Ltd.
#
# Author: Daniel Watkins <oddbloke@ubuntu.com>
#
# This file is part of cloud-init. See LICENSE file for license information.


class CloudInitPickleMixin:
    """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.)
    """

    _ci_pkl_version = 0

    def __getstate__(self):
        """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``.
        """
        state = self.__dict__.copy()
        state["_ci_pkl_version"] = type(self)._ci_pkl_version
        return state

    def __setstate__(self, state: dict) -> None:
        """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.
        """
        version = state.pop("_ci_pkl_version", 0)
        self.__dict__.update(state)
        self._unpickle(version)

    def _unpickle(self, ci_pkl_version: int) -> None:
        """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.
        """

Directory Contents

Dirs: 12 × Files: 31
Name Size Perms Modified Actions
analyze DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
cmd DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
config DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
distros DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
filters DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
handlers DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
log DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
mergers DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
net DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
reporting DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
sources DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
8.30 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
2.79 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
3.22 KB lrw-r--r-- 2025-06-24 21:15:25
Edit Download
7.81 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
2.00 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
5.28 KB lrw-r--r-- 2025-06-24 21:15:25
Edit Download
7.99 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
16.16 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
2.43 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
7.79 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
24.07 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
3.10 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
2.52 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
1022 B lrw-r--r-- 2025-06-24 20:50:00
Edit Download
10.11 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
2.12 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
3.92 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
1.93 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
5.93 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
22.21 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
41.53 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
12.43 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
7.74 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
2.94 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
703 B lrw-r--r-- 2025-06-24 20:50:00
Edit Download
38.15 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
14.44 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
90.38 KB lrw-r--r-- 2025-06-24 21:15:25
Edit Download
568 B lrw-r--r-- 2025-06-24 21:15:25
Edit Download
3.76 KB lrw-r--r-- 2025-06-24 20:50:00
Edit Download
0 B lrw-r--r-- 2025-06-24 20:50:00
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).