)]}'
{"cinder/api/schemas/clusters.py":[{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"81776d9fcf57a7b3fb6086c6eb1c7a79de3969ca","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \u0027name\u0027: parameter_types.name,"},{"line_number":29,"context_line":"        \u0027binary\u0027: parameter_types.nullable_string,"},{"line_number":30,"context_line":"        \u0027disabled_reason\u0027: {"},{"line_number":31,"context_line":"            \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027minLength\u0027: 0,"},{"line_number":32,"context_line":"            \u0027maxLength\u0027: 255, \u0027format\u0027: \u0027disabled_reason\u0027"},{"line_number":33,"context_line":"        }"},{"line_number":34,"context_line":"    },"},{"line_number":35,"context_line":"    \u0027required\u0027: [\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_311d1673","line":32,"range":{"start_line":31,"start_character":40,"end_line":32,"end_character":29},"updated":"2018-03-22 02:43:08.000000000","message":"Format validation takes place before minLength and maxLength checks in jsonschema validation. \n\nIf disabled_reason is not null, then in that case you are already validating min and max length in the format validation so you can safely remove the minLength and maxLength checks from here.","commit_id":"0d5b62757f9e56155d37cac2d284b05e68667b7a"}],"cinder/api/validation/validators.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"7517862748bafe889f14b28799f4919e04b9fad6","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027reason\u0027)"},{"line_number":108,"context_line":"def _validate_reason(param_value):"},{"line_number":109,"context_line":"    if not param_value:"},{"line_number":110,"context_line":"        msg \u003d _(\"The \u0027reason\u0027 can not be None.\")"},{"line_number":111,"context_line":"        raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":112,"context_line":"    elif len(param_value.strip()) \u003d\u003d 0:"},{"line_number":113,"context_line":"        msg \u003d _(\"The \u0027reason\u0027 can not be empty.\")"},{"line_number":114,"context_line":"        raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_383eaf29","line":111,"range":{"start_line":109,"start_character":3,"end_line":111,"end_character":48},"updated":"2017-12-21 02:47:11.000000000","message":"This is not required as you specified the minLength of \u0027disabled_reason\u0027 is 1.","commit_id":"f58f1bb0c7de56029b21800242459f989f3c4e3a"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"7517862748bafe889f14b28799f4919e04b9fad6","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        msg \u003d _(\"The \u0027reason\u0027 can not be None.\")"},{"line_number":111,"context_line":"        raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":112,"context_line":"    elif len(param_value.strip()) \u003d\u003d 0:"},{"line_number":113,"context_line":"        msg \u003d _(\"The \u0027reason\u0027 can not be empty.\")"},{"line_number":114,"context_line":"        raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":115,"context_line":"    return True"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_9839fb42","line":113,"range":{"start_line":113,"start_character":20,"end_line":113,"end_character":30},"updated":"2017-12-21 02:47:11.000000000","message":"It\u0027s \u0027disabled_reason\u0027 not \u0027reason\u0027, right?","commit_id":"f58f1bb0c7de56029b21800242459f989f3c4e3a"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"81776d9fcf57a7b3fb6086c6eb1c7a79de3969ca","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            del param_value[prop]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def _validate_length_of_string_without_spaces(param_value):"},{"line_number":89,"context_line":"    param_value \u003d param_value.strip()"},{"line_number":90,"context_line":"    if len(param_value) \u003d\u003d 0:"},{"line_number":91,"context_line":"        msg \u003d _(\"The \u0027disabled_reason\u0027 can not be empty.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_7fda75e9","line":88,"range":{"start_line":88,"start_character":0,"end_line":88,"end_character":59},"updated":"2018-03-22 02:43:08.000000000","message":"Maybe you can parameterized this method as below so that it can be used at many other different places.\n\ndef _validate_length_of_string(parameter_name, mandatory\u003dFalse, remove_white_spaces\u003dFalse, min_length\u003dNone, max_length\u003dNone)\n\nparameter_name -\u003e Name of the parameter to be returned in the exception error message.\n\nmandatory -\u003e Shouldn\u0027t accept None, default is False.\n\nremove_white_spaces -\u003e remove leading and trailing whitespaces, default is False.\n\nmin_length : min length of the string, default is None. If not None, check for min length validation.\n\nmax_length : max length of the string, default is None. If not None, check for max length validation.\n\nFor min and max length checks, you can use strutils-\u003echeck_string_length() from oslo.utils.","commit_id":"0d5b62757f9e56155d37cac2d284b05e68667b7a"}]}
