예제 #1
0
    def __init__(self, registrar):
        super(Schedule, self).__init__(registrar)
        self.settings = ConfigParser.SafeConfigParser()
        self.settings.read(utils.get_plugin_settings_paths(__name__))

        if not self.settings.has_option("Settings", "queue_file"):
            self.settings.set("Settings", "queue_file",
                              autoplatform.get_existing_file("schedule.queue"))
        else:
            if not os.access(self.settings.get("Settings", "queue_file"),
                             os.W_OK):
                self.settings.set("Settings", "queue_file", None)

        self.queue = PersistentPriorityQueue(
            storagefile=self.settings.get("Settings", "queue_file"))

        if (not self.settings.has_option("Settings", "queue_file")
                or self.settings.get("Settings", "queue_file") is None):
            logger.log(
                "Scheduler could not find an existing queue file and "
                "no write access to create a new one. Any scheduled tasks "
                "will disappear once server is stopped.")

        self.event = threading.Event()
        thread = threading.Thread(target=self._executionthread)
        thread.setDaemon(True)
        thread.start()

        self.registrar.register_service(
            "schedule",
            self.execute,
            grammar={
                "at": ["at"],
                "in": ["in"],
                "command": [],
            },
            usage=
            ("USAGE: schedule WHAT [at WHEN] | [in WHEN]\n"
             "Schedules a command to be run at a specific time, repeating if\n"
             "necessary."),
            namespace=__name__)