示例#1
0
class WriteTemplate(Transaction, LoggerChild):
    def __init__(self, logger, filename, content):
        LoggerChild.__init__(self, logger)
        self.filename = filename
        self.new = File(self.filename + ".new", False)
        self.old = File(self.filename + ".old", False)
        self.content = content

    def prepare(self):
        umask(0077)
        with self.new.open("wb") as f:
            f.write(self.content)

    def save(self):
        umask(0077)
        self.old.copyFrom(self.filename)

    def apply(self):
        self.critical("Write the new multisite template")
        self.new.renameTo(self.filename)

    def rollback(self):
        if self.old.exist:
            self.old.renameTo(self.filename)
        else:
            unlinkQuiet(self.filename)

    def cleanup(self):
        self.old.unlink(quiet=True)
        self.new.unlink(quiet=True)
示例#2
0
class WriteRules(Transaction, LoggerChild):
    def __init__(self, logger, ufwi_ruleset_rules):
        LoggerChild.__init__(self, logger)
        self.ufwi_ruleset_rules = ufwi_ruleset_rules
        self.filename = RULES_FILENAME
        self.old_rules = File(self.filename + ".old", False)
        self.new_rules = File(self.filename + ".new", False)

    def prepare(self):
        self.info("Write new rules")
        umask(0077)
        with self.new_rules.open("wb") as fp:
            pickle.dump(self.ufwi_ruleset_rules, fp, pickle.HIGHEST_PROTOCOL)

    def save(self):
        self.info("Keep current rules")
        umask(0077)
        self.old_rules.copyFrom(self.filename)

    def apply(self):
        self.error("Write rules to disk")
        try:
            self.new_rules.renameTo(self.filename)
        except OSError:
            self.error("No new rules to rename.")

    def rollback(self):
        self.error("Restore old rules")
        try:
            self.old_rules.renameTo(self.filename)
        except OSError:
            self.error("No old rules to rename.")


    def cleanup(self):
        self.error("Remove temp files")
        try:
            self.old_rules.unlink(quiet=True)
        except OSError:
            self.error("No old rules to clean.")
        try:
            self.new_rules.unlink(quiet=True)
        except OSError:
            self.error("No new rules to clean.")