def test_validation_complex_valid_no_reason(self): accepted_keys = { "mandatory": [ "job", "kernel" ], "accepted": [ "foo", "bar", "baz", "job", "kernel", ] } json_obj = { "job": "job", "kernel": "kernel", "foo": "foo" } valid, reason = utilsv.is_valid_json(json_obj, accepted_keys) self.assertTrue(valid) self.assertIsNone(reason)
def _put(self, *args, **kwargs): response = None # PUT and POST request require the same content type. valid_request = handlers.common.request.valid_post_request( self.request.headers, self.request.remote_ip) if valid_request == 200: doc_id = kwargs.get("id", None) if doc_id: try: json_obj = json.loads(self.request.body.decode("utf8")) valid_json, errors = validator.is_valid_json( json_obj, self._valid_keys("PUT")) if valid_json: response = self._update_data(doc_id, json_obj) response.errors = errors else: response = hresponse.HandlerResponse(400) response.reason = "Provided JSON is not valid" response.errors = errors except ValueError, ex: self.log.exception(ex) error = "No JSON data found in the PUT request" self.log.error(error) response = hresponse.HandlerResponse(422) response.reason = error else: response = hresponse.HandlerResponse(400) response.reason = "Missing token ID"
def _put(self, *args, **kwargs): response = None # PUT and POST request require the same content type. valid_request = self._valid_post_request() if valid_request == 200: doc_id = kwargs.get("id", None) if doc_id: try: json_obj = json.loads(self.request.body.decode("utf8")) valid_json, errors = validator.is_valid_json( json_obj, self._valid_keys("PUT")) if valid_json: response = self._update_data(doc_id, json_obj) response.errors = errors else: response = hresponse.HandlerResponse(400) response.reason = "Provided JSON is not valid" response.errors = errors except ValueError, ex: self.log.exception(ex) error = "No JSON data found in the PUT request" self.log.error(error) response = hresponse.HandlerResponse(422) response.reason = error else: response = hresponse.HandlerResponse(400) response.reason = "Missing token ID"
def test_valid_json_with_more_valid_keys(self): json_string = '{"kernel": "kernel"}' accepted_keys = ['job', 'kernel', "defconfig", "foo"] valid, reason = utilsv.is_valid_json( json.loads(json_string), accepted_keys ) self.assertTrue(valid) self.assertIsNone(reason)
def test_valid_json_valid(self): json_string = '{"job": "job", "kernel": "kernel"}' accepted_keys = ['job', 'kernel'] valid, reason = utilsv.is_valid_json( json.loads(json_string), accepted_keys ) self.assertTrue(valid) self.assertIsNone(reason)
def test_remove_all_keys(self): json_obj = { "job": "job", "kernel": "kernel", } accepted_keys = ["foo", "bar"] valid, reason = utilsv.is_valid_json(json_obj, accepted_keys) self.assertFalse(valid) self.assertIsNotNone(reason)
def test_no_accepted_keys(self): json_obj = { "kernel": "foo", "job": "job", "foo": "bar" } accepted_keys = None valid, reason = utilsv.is_valid_json(json_obj, accepted_keys) self.assertFalse(valid) self.assertIsNotNone(reason)
def execute_put(self, *args, **kwargs): """Execute the PUT pre-operations.""" response = None valid_token, token = self.validate_req_token("PUT") if valid_token: if kwargs.get("id", None): valid_request = handlers.common.request.valid_post_request( self.request.headers, self.request.remote_ip) if valid_request == 200: try: json_obj = json.loads(self.request.body.decode("utf8")) valid_json, j_reason = validator.is_valid_json( json_obj, self._valid_keys("PUT")) if valid_json: kwargs["json_obj"] = json_obj kwargs["reason"] = j_reason kwargs["token"] = token response = self._put(*args, **kwargs) else: response = hresponse.HandlerResponse(400) if j_reason: response.reason = ( "Provided JSON is not valid: %s" % j_reason) else: response.reason = "Provided JSON is not valid" except ValueError, ex: self.log.exception(ex) error = "No JSON data found in the PUT request" self.log.error(error) response = hresponse.HandlerResponse(422) response.reason = error else: response = hresponse.HandlerResponse(valid_request) response.reason = ( "%s: %s" % ( self._get_status_message(valid_request), "Use %s as the content type" % self.content_type ) ) else: response = hresponse.HandlerResponse(400) response.reason = "No ID specified"
def test_valid_json_with_strange_keys(self): json_obj = { "kernel": "foo", "foo": "bar", "baz": "foo", "job": "job", } expected = { "kernel": "foo", "job": "job", } accepted_keys = ['job', 'kernel'] valid, reason = utilsv.is_valid_json(json_obj, accepted_keys) self.assertTrue(valid) self.assertIsNotNone(reason) self.assertDictEqual(expected, json_obj)
def execute_put(self, *args, **kwargs): """Execute the PUT pre-operations.""" response = None valid_token, token = self.validate_req_token("PUT") if valid_token: if kwargs.get("id", None): valid_request = handlers.common.request.valid_post_request( self.request.headers, self.request.remote_ip) if valid_request == 200: try: json_obj = json.loads(self.request.body.decode("utf8")) valid_json, j_reason = validator.is_valid_json( json_obj, self._valid_keys("PUT")) if valid_json: kwargs["json_obj"] = json_obj kwargs["reason"] = j_reason kwargs["token"] = token response = self._put(*args, **kwargs) else: response = hresponse.HandlerResponse(400) if j_reason: response.reason = ( "Provided JSON is not valid: %s" % j_reason) else: response.reason = "Provided JSON is not valid" except ValueError, ex: self.log.exception(ex) error = "No JSON data found in the PUT request" self.log.error(error) response = hresponse.HandlerResponse(422) response.reason = error else: response = hresponse.HandlerResponse(valid_request) response.reason = ( "%s: %s" % (self._get_status_message(valid_request), "Use %s as the content type" % self.content_type)) else: response = hresponse.HandlerResponse(400) response.reason = "No ID specified"
def execute_post(self, *args, **kwargs): """Execute the POST pre-operations. Checks that everything is OK to perform a POST. """ response = None valid_token, token = self.validate_req_token("POST") if valid_token: valid_request = handlers.common.request.valid_post_request( self.request.headers, self.request.remote_ip) if valid_request == 200: try: json_obj = json.loads(self.request.body.decode("utf8")) valid_json, errors = validator.is_valid_json( json_obj, self._valid_keys("POST")) if valid_json: kwargs["json_obj"] = json_obj kwargs["token"] = token response = self._post(*args, **kwargs) response.errors = errors else: response = hresponse.HandlerResponse(400) response.reason = "Provided JSON is not valid" response.errors = errors except ValueError, ex: self.log.exception(ex) error = "No JSON data found in the POST request" self.log.error(error) response = hresponse.HandlerResponse(422) response.reason = error else: response = hresponse.HandlerResponse(valid_request) response.reason = ( "%s: %s" % ( self._get_status_message(valid_request), "Use %s as the content type" % self.content_type ) )
def execute_post(self, *args, **kwargs): """Execute the POST pre-operations. Checks that everything is OK to perform a POST. """ response = None valid_token, token = self.validate_req_token("POST") if valid_token: valid_request = handlers.common.request.valid_post_request( self.request.headers, self.request.remote_ip) if valid_request == 200: try: json_obj = json.loads(self.request.body.decode("utf8")) valid_json, errors = validator.is_valid_json( json_obj, self._valid_compare_keys("POST")) if valid_json: kwargs["json_obj"] = json_obj kwargs["token"] = token response = self._post(*args, **kwargs) response.errors = errors else: response = hresponse.HandlerResponse(400) response.reason = "Provided JSON is not valid" response.errors = errors except ValueError, ex: self.log.exception(ex) error = "No JSON data found in the POST request" self.log.error(error) response = hresponse.HandlerResponse(422) response.reason = error else: response = hresponse.HandlerResponse(valid_request) response.reason = ( "%s: %s" % ( self._get_status_message(valid_request), "Use %s as the content type" % self.content_type ) )
def _put(self, *args, **kwargs): response = None # PUT and POST request require the same content type. valid_request = handlers.common.request.valid_post_request( self.request.headers, self.request.remote_ip) if valid_request == 200: doc_id = kwargs.get("id", None) if all([doc_id, validator.is_valid_id(doc_id)]): try: json_obj = json.loads(self.request.body.decode("utf8")) valid_json, errors = validator.is_valid_json( json_obj, self._valid_keys("PUT")) if valid_json: response = handlers.common.lab.update_lab( doc_id, json_obj, self._valid_keys("PUT"), self.db) else: response = hresponse.HandlerResponse(400) response.reason = "Provided JSON is not valid" response.errors = errors except ValueError: error = "No JSON data found in the PUT request" self.log.error(error) response = hresponse.HandlerResponse(422) response.reason = error else: response = hresponse.HandlerResponse(400) response.reason = "Wrong or missing lab ID" else: response = hresponse.HandlerResponse(valid_request) response.reason = \ "Wrong content type, must be '%s'" % self.content_type return response
def _put(self, *args, **kwargs): response = None # PUT and POST request require the same content type. valid_request = handlers.common.request.valid_post_request( self.request.headers, self.request.remote_ip) if valid_request == 200: doc_id = kwargs.get("id", None) if all([doc_id, validator.is_valid_id(doc_id)]): try: json_obj = json.loads(self.request.body.decode("utf8")) valid_json, errors = validator.is_valid_json( json_obj, self._valid_keys("PUT")) if valid_json: response = handlers.common.lab.update_lab( doc_id, json_obj, self._valid_keys("PUT"), self.db) else: response = hresponse.HandlerResponse(400) response.reason = "Provided JSON is not valid" response.errors = errors except ValueError: error = "No JSON data found in the PUT request" self.log.error(error) response = hresponse.HandlerResponse(422) response.reason = error else: response = hresponse.HandlerResponse(400) response.reason = "Wrong or missing lab ID" else: response = hresponse.HandlerResponse(valid_request) response.reason = \ "Wrong content type, must be '%s'" % self.content_type return response
def is_valid_json(self, json_obj, **kwargs): return validator.is_valid_json(json_obj, self._valid_keys("POST"))