)]}'
{"monasca_common/validation/metrics.py":[{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"5eb23f492ab690020a819a90e2be77da99a96527","unresolved":false,"context_lines":[{"line_number":43,"context_line":"NUMERIC_VALUES \u003d tuple(NUMERIC_VALUES)  # convert to tuple for instance call"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class InvalidMetricName(Exception):"},{"line_number":47,"context_line":"    pass"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class InvalidDimensionKey(Exception):"},{"line_number":51,"context_line":"    pass"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class InvalidDimensionValue(Exception):"},{"line_number":55,"context_line":"    pass"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class InvalidValue(Exception):"},{"line_number":59,"context_line":"    pass"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class InvalidValueMeta(Exception):"},{"line_number":63,"context_line":"    pass"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class InvalidTimeStamp(Exception):"},{"line_number":67,"context_line":"    pass"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_caf7258e","line":66,"range":{"start_line":46,"start_character":0,"end_line":66,"end_character":34},"updated":"2018-10-24 10:06:08.000000000","message":"How about introducing `ValidationException` and inheriting from it? Then you could write a try-catch block in `validate_metric` and log all the relevant information.","commit_id":"144529f62aff6c682c3c3026db395a1c30b7d406"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"5eb23f492ab690020a819a90e2be77da99a96527","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        validate_value_meta(metric[\u0027value_meta\u0027], metric[\u0027name\u0027])"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def validate_value_meta(value_meta, name):"},{"line_number":89,"context_line":"    if value_meta is None:"},{"line_number":90,"context_line":"        return"},{"line_number":91,"context_line":"    if len(value_meta) \u003e VALUE_META_MAX_NUMBER:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_6abe11cf","line":88,"range":{"start_line":88,"start_character":36,"end_line":88,"end_character":40},"updated":"2018-10-24 10:06:08.000000000","message":"These functions are also called from monasca-api and potentially monasca-log-api. For tempest tests to pass you would have to declare the argument as optional.","commit_id":"144529f62aff6c682c3c3026db395a1c30b7d406"},{"author":{"_account_id":10311,"name":"Joseph Davis","email":"joseph.davis@suse.com","username":"joadavis"},"change_message_id":"6d6503bf5684890ddeb371272f7efc23a7c118ab","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        validate_value_meta(metric[\u0027value_meta\u0027], metric[\u0027name\u0027])"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def validate_value_meta(value_meta, name):"},{"line_number":89,"context_line":"    if value_meta is None:"},{"line_number":90,"context_line":"        return"},{"line_number":91,"context_line":"    if len(value_meta) \u003e VALUE_META_MAX_NUMBER:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_9393a159","line":88,"range":{"start_line":88,"start_character":36,"end_line":88,"end_character":40},"in_reply_to":"3f79a3b5_6abe11cf","updated":"2018-10-24 14:35:19.000000000","message":"I was surprised the individual functions were called directly from other code rather than just calling validate_metric.\n\nI was also considering leaving the function parameters alone and instead adding a large try/except around the calls in validate_metric where the exceptions could be caught, the additional information of the metric name could be added, then the exceptions thrown again.  However that seemed more complicated.\nI also considered a complete refactor and combining all the individual validations back in to the validate_metric function, but that would break the other places where they are called from monasca-api and monasca-log-api.","commit_id":"144529f62aff6c682c3c3026db395a1c30b7d406"}]}
