def post(self, action):
        #url = 'http://143.248.49.87:88/api/XAI8Yvp26NTLSxP0uGurWuI091Qxj65C2VFjSsr2/lights/2/state'

        # I don't know exact reason but, when I don't call action by 'self', hueAPI can't recognize redis variable in superclass
        '''
        if action == "on":
            on_message_body = {"on": True, "sat": 254, "bri": 254, "hue": 10000}
            res = requests.put(url, data=json.dumps(on_message_body))
            if res.status_code == 200:
                return jsonify(res.text), 200
            else: abort(400, description="abort in post() for on")

        elif action == "off":
            off_message_body = {"on": False}
            res = requests.put(url, data=json.dumps(off_message_body))
            if res.status_code == 200:
                return jsonify(res.text), 200
            else: abort(400, description="abort in post() for off")

        else: abort(400, description="wrong action name")
        '''
        if action == "on":
            return self.on()

        elif action == "off":
            return self.off()

        else:
            #abort(400, description="Invalid action")
            abort_json(HTTPStatus.BAD_REQUEST, "Invalid action.")
 def status(self): # not used -> deprecated
     try:
         res = requests.get(self.hue_urls['status'])
         text_res = res.text
     except:
         abort_json(HTTPStatus.BAD_REQUEST, "abort in status()")
     return make_response(jsonify(text_res), HTTPStatus.OK)
 def get(self):
     #url = 'http://143.248.49.87:88/api/XAI8Yvp26NTLSxP0uGurWuI091Qxj65C2VFjSsr2/lights'
     try: 
         #return self.status()
         return self.status_newV()
     except:
         #abort(400, description="abort in get()")
         abort_json(HTTPStatus.BAD_REQUEST, "abort in get()")
    def off(self):
        off_message_body = {"on": False}
        #res = requests.put('http://143.248.49.87:88/api/XAI8Yvp26NTLSxP0uGurWuI091Qxj65C2VFjSsr2/lights/2/state',data=json.dumps(off_message_body))
        
        res = requests.put(self.hue_urls['action'],data=json.dumps(off_message_body))

        self.redis.set('status', "Off")
        if res.status_code == 200:
            #return make_response(jsonify(res.text), HTTPStatus.OK)
            return make_response(jsonify({"status": self.redis.get('status')}), 200)
        else:
            #abort(400, description="abort in post() for off")
            abort_json(HTTPStatus.BAD_REQUEST, "abort in post() about off func")
    def unbind(self):
        # Read user id from HTTP request header
        user_id = request.headers.get('USER-ID')

        # Raise 401 error if the resource is not bound
        if not self.redis.exists('user_id'):
            abort_json(HTTPStatus.UNAUTHORIZED, "Resource not bound.")

        # Unbind user successfully
        else:
            user_id = self.redis.get('user_id')
            self.redis.delete('user_id')

            response = make_response(jsonify({"userId": user_id}),
                                     HTTPStatus.OK)
            return response
    def bind(self):
        # Read user id from HTTP request header
        user_id = request.headers.get('USER-ID')

        # Raise 409 Conflict error if the resource is already bound to another user
        if self.redis.exists(
                'user_id') and self.redis.get('user_id') != user_id:
            abort_json(HTTPStatus.CONFLICT, "Resource bound to another user.")

        # Bind user successfully
        else:
            self.redis.set('user_id', user_id)

            response = make_response(
                jsonify({"userId": self.redis.get('user_id')}), HTTPStatus.OK)
            return response
    def post(self, action):
        """
        post: receive bind or unbind action from users
        :param action: command on the resource, which is specified on URL
        :return: [flask HTTP response in JSON] action acceptance result
        """
        # Bind action
        if action == "bind":
            return self.bind()

        # Unbind action
        elif action == "unbind":
            return self.unbind()

        # Reject other actions
        else:
            abort_json(HTTPStatus.BAD_REQUEST, "Invalid action.")
    def status_newV(self):
        res = requests.get(self.hue_urls['status'])
        if res.status_code == 200:
            #res_dict = json.loads(res) # error
            content = res.content
            content.decode('utf-8')
            res_dict = json.loads(content)

            hueState = res_dict['2']
            state = hueState['state']
            if state['on'] == True:
                self.redis.set('status', "On")
                return make_response(jsonify({"status": self.redis.get('status')}), 200)
            else:
                self.redis.set('status', "Off")
                return make_response(jsonify({"status": self.redis.get('status')}), 200)
        else:
            abort_json(HTTPStatus.BAD_REQUEST, "abort in status()")
Exemple #9
0
 def post(self, action):
     print(action)
     if action == "fake":
         return self.fake()
     else:
         return abort_json(HTTPStatus.BAD_REQUEST, "Invalid action.")