)]}'
{"heat/engine/parameters.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4a0f359ba9d544ce45d18669aeecd1835abe2d1b","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            if val:"},{"line_number":452,"context_line":"                return jsonutils.loads(val)"},{"line_number":453,"context_line":"        except (ValueError, TypeError) as err:"},{"line_number":454,"context_line":"            message \u003d _(\u0027Value %s must be valid JSON: %s\u0027) % ( val, err )"},{"line_number":455,"context_line":"            raise ValueError(message)"},{"line_number":456,"context_line":"        return value"},{"line_number":457,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_d6f735d4","line":454,"updated":"2020-07-25 13:30:40.000000000","message":"pep8: E201 whitespace after \u0027(\u0027","commit_id":"e96a67623b74e5c8570a26f643960aa0a46665d1"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4a0f359ba9d544ce45d18669aeecd1835abe2d1b","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            if val:"},{"line_number":452,"context_line":"                return jsonutils.loads(val)"},{"line_number":453,"context_line":"        except (ValueError, TypeError) as err:"},{"line_number":454,"context_line":"            message \u003d _(\u0027Value %s must be valid JSON: %s\u0027) % ( val, err )"},{"line_number":455,"context_line":"            raise ValueError(message)"},{"line_number":456,"context_line":"        return value"},{"line_number":457,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_b6f441d1","line":454,"updated":"2020-07-25 13:30:40.000000000","message":"pep8: E202 whitespace before \u0027)\u0027","commit_id":"e96a67623b74e5c8570a26f643960aa0a46665d1"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4aa9b33986914f79e60a3733bcb8f545b0f63588","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from heat.common import param_utils"},{"line_number":25,"context_line":"from heat.engine import constraints as constr"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"PARAMETER_KEYS \u003d ("},{"line_number":30,"context_line":"    TYPE, DEFAULT, NO_ECHO, ALLOWED_VALUES, ALLOWED_PATTERN,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_54d67d51","line":27,"updated":"2020-07-26 13:41:06.000000000","message":"pep8: F821 undefined name \u0027logging\u0027","commit_id":"28dcde7ffd3e8948eb4714bbfac99b2f41ce59f5"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"abd2505312dc9f5678c1afc56669a9808a42b50d","unresolved":false,"context_lines":[{"line_number":453,"context_line":"            if val:"},{"line_number":454,"context_line":"                return jsonutils.loads(val)"},{"line_number":455,"context_line":"        except (ValueError, TypeError) as err:"},{"line_number":456,"context_line":"            LOG.error(\"%s is not valid JSON\", str(value)[:62])"},{"line_number":457,"context_line":"            message \u003d _(\u0027Value must be valid JSON: %s\u0027) % err"},{"line_number":458,"context_line":"            raise ValueError(message)"},{"line_number":459,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_8803cc0d","line":456,"updated":"2020-07-27 16:26:09.000000000","message":"Error-level logs mean an administrator should be paged; they\u0027re not appropriate for badly-formatted user input, which is a completely expected thing.\n\nhttps://specs.openstack.org/openstack/openstack-specs/specs/log-guidelines.html#definition-of-log-levels\n\nParameters marked as hidden may be stored encrypted in the database, and probably shouldn\u0027t be logged. It would be safer to just log the parameter name.","commit_id":"baf69847d6d29ece0e1ff8a9bdf2178136e8297f"},{"author":{"_account_id":7130,"name":"David Hill","email":"davidchill@hotmail.com","username":"dhill"},"change_message_id":"8ac682b04a383783df6d0496de7f3653abb269e6","unresolved":false,"context_lines":[{"line_number":453,"context_line":"            if val:"},{"line_number":454,"context_line":"                return jsonutils.loads(val)"},{"line_number":455,"context_line":"        except (ValueError, TypeError) as err:"},{"line_number":456,"context_line":"            LOG.error(\"%s is not valid JSON\", str(value)[:62])"},{"line_number":457,"context_line":"            message \u003d _(\u0027Value must be valid JSON: %s\u0027) % err"},{"line_number":458,"context_line":"            raise ValueError(message)"},{"line_number":459,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_dc89fd26","line":456,"in_reply_to":"9f560f44_8803cc0d","updated":"2020-07-27 23:44:23.000000000","message":"I think my latest patch set adresses all of your concerns...","commit_id":"baf69847d6d29ece0e1ff8a9bdf2178136e8297f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"25c2e14c669c357e5f2a02cfc74fc544f3ab624a","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                if pd_name in self.params:"},{"line_number":524,"context_line":"                    self.params[pd_name].set_default(param_default)"},{"line_number":525,"context_line":"        except (ValueError, TypeError) as err:"},{"line_number":526,"context_line":"            message \u003d _(\u0027Value for %s param was invalid: %s\u0027) % ( param, err )"},{"line_number":527,"context_line":"            raise ValueError(message)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def validate(self, validate_value\u003dTrue, context\u003dNone):"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_87bc5206","line":526,"updated":"2020-07-28 01:07:27.000000000","message":"pep8: E201 whitespace after \u0027(\u0027","commit_id":"80b8cea0e2774efe268b31521e3a737c14943d92"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"25c2e14c669c357e5f2a02cfc74fc544f3ab624a","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                if pd_name in self.params:"},{"line_number":524,"context_line":"                    self.params[pd_name].set_default(param_default)"},{"line_number":525,"context_line":"        except (ValueError, TypeError) as err:"},{"line_number":526,"context_line":"            message \u003d _(\u0027Value for %s param was invalid: %s\u0027) % ( param, err )"},{"line_number":527,"context_line":"            raise ValueError(message)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def validate(self, validate_value\u003dTrue, context\u003dNone):"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_c73bea99","line":526,"updated":"2020-07-28 01:07:27.000000000","message":"pep8: E202 whitespace before \u0027)\u0027","commit_id":"80b8cea0e2774efe268b31521e3a737c14943d92"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"25c2e14c669c357e5f2a02cfc74fc544f3ab624a","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                if pd_name in self.params:"},{"line_number":524,"context_line":"                    self.params[pd_name].set_default(param_default)"},{"line_number":525,"context_line":"        except (ValueError, TypeError) as err:"},{"line_number":526,"context_line":"            message \u003d _(\u0027Value for %s param was invalid: %s\u0027) % ( param, err )"},{"line_number":527,"context_line":"            raise ValueError(message)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def validate(self, validate_value\u003dTrue, context\u003dNone):"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_e736eeb4","line":526,"updated":"2020-07-28 01:07:27.000000000","message":"pep8: F821 undefined name \u0027param\u0027","commit_id":"80b8cea0e2774efe268b31521e3a737c14943d92"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"603ddef49c8289125bd28767ca3bfc279221b8a1","unresolved":false,"context_lines":[{"line_number":524,"context_line":"                    self.params[pd_name].set_default(param_default)"},{"line_number":525,"context_line":"        except (ValueError, TypeError) as err:"},{"line_number":526,"context_line":"            message \u003d _(\u0027Value for %s param was invalid: %s\u0027) % ( param, err )"},{"line_number":527,"context_line":"            raise ValueError(message)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def validate(self, validate_value\u003dTrue, context\u003dNone):"},{"line_number":530,"context_line":"        \"\"\"Validates all parameters."}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_c7648abc","line":527,"updated":"2020-07-28 01:12:19.000000000","message":"We\u0027ll need to create a new exception type in heat/common/exceptions.py (and appropriate mappings in the APIs) to prevent this causing a 500 error.","commit_id":"80b8cea0e2774efe268b31521e3a737c14943d92"},{"author":{"_account_id":7130,"name":"David Hill","email":"davidchill@hotmail.com","username":"dhill"},"change_message_id":"c6bddf60c3e2f9a6fb98d3ba468f82ec08b81712","unresolved":false,"context_lines":[{"line_number":524,"context_line":"                    self.params[pd_name].set_default(param_default)"},{"line_number":525,"context_line":"        except (ValueError, TypeError) as err:"},{"line_number":526,"context_line":"            message \u003d _(\u0027Value for %s param was invalid: %s\u0027) % ( param, err )"},{"line_number":527,"context_line":"            raise ValueError(message)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def validate(self, validate_value\u003dTrue, context\u003dNone):"},{"line_number":530,"context_line":"        \"\"\"Validates all parameters."}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_754f1fbd","line":527,"in_reply_to":"9f560f44_c7648abc","updated":"2020-07-28 11:35:12.000000000","message":"So https://review.opendev.org/#/c/743029/20/heat/engine/service.py is not what we want ?","commit_id":"80b8cea0e2774efe268b31521e3a737c14943d92"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3dd5398a9d5db3f4279c0c9ade8bddccf63c8186","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                if pd_name in self.params:"},{"line_number":524,"context_line":"                    self.params[pd_name].set_default(param_default)"},{"line_number":525,"context_line":"        except (ValueError, TypeError) as err:"},{"line_number":526,"context_line":"            message \u003d _(\u0027Value for %s param was invalid: %s\u0027) % (param, err)"},{"line_number":527,"context_line":"            raise exception.StackValidationFailed(message\u003dstr(message))"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_662bf793","line":526,"updated":"2020-07-28 14:11:00.000000000","message":"pep8: F821 undefined name \u0027param\u0027","commit_id":"a2ce93ca9c9c1dd704c01f80da6c999667a1e9d2"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3dd5398a9d5db3f4279c0c9ade8bddccf63c8186","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            raise exception.StackValidationFailed(message\u003dstr(message))"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def validate(self, validate_value\u003dTrue, context\u003dNone):"},{"line_number":531,"context_line":"        \"\"\"Validates all parameters."},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        This method validates if all user-provided parameters are actually"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_c6192389","line":530,"updated":"2020-07-28 14:11:00.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"a2ce93ca9c9c1dd704c01f80da6c999667a1e9d2"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"a484cad6c53febaed4b5af2b5a98f8fd894e3627","unresolved":false,"context_lines":[{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def __init__(self, name, schema, value\u003dNone):"},{"line_number":375,"context_line":"        super(ParsedParameter, self).__init__(name, schema, value)"},{"line_number":376,"context_line":"        self._update_parsed()"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def set_default(self, value):"},{"line_number":379,"context_line":"        super(ParsedParameter, self).set_default(value)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_c8476d4b","line":376,"updated":"2020-07-28 15:58:31.000000000","message":"Now that I look at it, we have the same problem here - we can fail to even create the Parameter because the user data is invalid.","commit_id":"0e4e60478d7188f1a2058abfea71148f7fa204ad"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"a484cad6c53febaed4b5af2b5a98f8fd894e3627","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def set_default(self, value):"},{"line_number":379,"context_line":"        super(ParsedParameter, self).set_default(value)"},{"line_number":380,"context_line":"        self._update_parsed()"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def _update_parsed(self):"},{"line_number":383,"context_line":"        if self.has_value():"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_a8403937","line":380,"updated":"2020-07-28 15:58:31.000000000","message":"This is the call that is failing in the bug report.","commit_id":"0e4e60478d7188f1a2058abfea71148f7fa204ad"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"a484cad6c53febaed4b5af2b5a98f8fd894e3627","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            if self.user_value is not None:"},{"line_number":385,"context_line":"                self.parsed \u003d self.parse(self.user_value)"},{"line_number":386,"context_line":"            else:"},{"line_number":387,"context_line":"                self.parsed \u003d self.parse(self.default())"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"class CommaDelimitedListParam(ParsedParameter, collections.Sequence):"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_88abb5d4","line":387,"updated":"2020-07-28 15:58:31.000000000","message":"Maybe instead of doing this, we should cache on demand:\n\n   @property\n   def parsed(self):\n       if self._parsed is None:\n           if self.has_value():\n                if self.user_value is not None:\n                    self._parsed \u003d self.parse(self.user_value)\n                else:\n                    self._parsed \u003d self.parse(self.default())\n           else:\n               self._parsed \u003d {}\n       return self._parsed","commit_id":"0e4e60478d7188f1a2058abfea71148f7fa204ad"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"a484cad6c53febaed4b5af2b5a98f8fd894e3627","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        try:"},{"line_number":479,"context_line":"            parsed \u003d self.parse(val)"},{"line_number":480,"context_line":"        except ValueError as ex:"},{"line_number":481,"context_line":"            raise exception.StackValidationFailed(message\u003dstr(ex))"},{"line_number":482,"context_line":"        self.schema.validate_value(parsed, context)"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_08ee8521","line":481,"updated":"2020-07-28 15:58:31.000000000","message":"This function actually does everything we want (the parameter name gets added when it is called from Parameter.validate()), and returns the error at the time we\u0027re expecting it. We\u0027re just not ever getting here, because the exception occurs when we are still constructing the Parameters object.","commit_id":"0e4e60478d7188f1a2058abfea71148f7fa204ad"}],"heat/tests/test_parameters.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"5f97ad16ceeb6b451c12885b05556334969209e6","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        schema \u003d {\u0027Type\u0027: \u0027Json\u0027,"},{"line_number":380,"context_line":"                  \u0027ConstraintDescription\u0027: \u0027wibble\u0027}"},{"line_number":381,"context_line":"        val \u003d {\"foo\": \"bar\", \"not_json\": len}"},{"line_number":382,"context_line":"        err \u003d self.assertRaises(ValueError,"},{"line_number":383,"context_line":"                                new_parameter, \u0027p\u0027, schema, val)"},{"line_number":384,"context_line":"        self.assertIn(\u0027Value must be valid JSON\u0027, str(err))"},{"line_number":385,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9f560f44_9f9df7bd","side":"PARENT","line":382,"updated":"2020-08-07 19:26:02.000000000","message":"Gotta love it when unit tests test for obviously bogus things :/","commit_id":"65de8cb43694bb2063248dff920cc1f0e06c851f"}]}
