import time from flask_classy import route from modules import DBModel, cbpi from modules.core.baseview import BaseView class Actor(DBModel): __fields__ = ["name","type", "config", "hide"] __table_name__ = "actor" __json_fields__ = ["config"] class ActorView(BaseView): model = Actor cache_key = "actors" @classmethod def post_init_callback(self, obj): obj.state = 0 obj.power = 100 def _post_post_callback(self, m): self.api.init_actor(m.id) def _post_put_callback(self, m): self.api.init_actor(m.id) @route("/switch/on", methods=["POST"]) def on(self, id): self.api.switch_actor_on(id) return ('', 204) @route("/switch/off", methods=["POST"]) def off(self, id): self.api.switch_actor_off(id) return ('', 204) @route("/power/", methods=["POST"]) def power(self, id, power): self.api.actor_power(id, power) return ('', 204) @route("/toggle", methods=["POST"]) def toggle(self, id): if self.api.cache.get("actors").get(id).state == 0: self.on(id) else: self.off(id) return ('', 204) def toggleTimeJob(self, id, t): self.api.cache.get("actors").get(int(id)).timer = int(time.time()) + int(t) self.toggle(int(id)) self.api.socketio.sleep(t) self.api.cache.get("actors").get(int(id)).timer = None self.toggle(int(id)) @route("//toggle/", methods=["POST"]) def toggleTime(self, id, t): t = self.api.socketio.start_background_task(target=self.toggleTimeJob, id=id, t=t) return ('', 204) @cbpi.initalizer(order=1000) def init(cbpi): ActorView.register(cbpi.app, route_base='/api/actor') ActorView.init_cache() cbpi.init_actors()