view piecrust/records.py @ 95:cb6eadea0845

Fixed a bug with the `shallow` source. Add unit tests.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 07 Sep 2014 21:37:10 -0700
parents e88e330eb8dc
children 133845647083
line wrap: on
line source

import os
import os.path
import pickle
import logging
from piecrust.events import Event


logger = logging.getLogger(__name__)


class Record(object):
    def __init__(self):
        self.entries = []
        self.entry_added = Event()

    def addEntry(self, entry):
        self.entries.append(entry)
        self.entry_added.fire(entry)

    def save(self, path):
        path_dir = os.path.dirname(path)
        if not os.path.isdir(path_dir):
            os.makedirs(path_dir, 0o755)

        with open(path, 'wb') as fp:
            pickle.dump(self, fp, pickle.HIGHEST_PROTOCOL)

    def __getstate__(self):
        odict = self.__dict__.copy()
        del odict['entry_added']
        return odict

    def __setstate__(self, state):
        for k, v in state.items():
            setattr(self, k, v)
        self.entry_added = Event()

    @staticmethod
    def load(path):
        logger.debug("Loading bake record from: %s" % path)
        with open(path, 'rb') as fp:
            return pickle.load(fp)