def update_pin(self, opts): db = init_db() led = opts["led"] value = opts["output"] device_uuid = opts["device_uuid"] devices = db.execute("SELECT id FROM devices" " WHERE uuid = '{}'" .format(device_uuid)) if not rows_exist(devices): raise UnsupportedDeviceError() pins = db.execute("SELECT pins.id FROM pins, devices" " WHERE pins.device_id = devices.id" " AND pins.name = '{0}'" " AND devices.uuid = '{1}'". format(led, device_uuid)) if not rows_exist(pins): raise UnsupportedPinError() db.execute("UPDATE pins" " JOIN devices ON devices.id = pins.device_id" " SET pins.status = {0}" " WHERE pins.name = '{1}'" " AND devices.uuid = '{2}'". format(int(value), led, device_uuid))
def run(self): self.logger.debug("Starting message pusher") self.amqp_client.open_connection() while True: db = init_db() try: messages = db.execute( "SELECT devices.uuid, messages.params, messages.id" " FROM messages, devices" " WHERE messages.device_id = devices.id" " AND messages.status = 'queued'") for message in messages: self.logger.debug(message) payload = message['params'] queue = message['uuid'] message_id = message['id'] self.amqp_client.publish(queue, payload) db.execute("UPDATE messages SET status = 'pushed'" " WHERE id = {}".format(message_id)) self.logger.debug("Pushed message {0} for device uuid {1}" .format(payload, queue)) except Exception as e: self.logger.debug("Oops! Error :{0}\n{1}" .format(e.message, traceback.format_exc())) db.close() time.sleep(10)