)]}'
{"cloudkitty/collector/prometheus.py":[{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"b8a6bdc59c0038e6d0cd8c43a1da921c46ed6fae","unresolved":false,"context_lines":[{"line_number":32,"context_line":"decimal.getcontext().prec \u003d 9"},{"line_number":33,"context_line":"decimal.getcontext().rounding \u003d decimal.ROUND_HALF_UP"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Decimal \u003d decimal.Decimal"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class PrometheusClient(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_4ce8037a","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":25},"updated":"2018-07-19 09:43:49.000000000","message":"from decimal import Decimal","commit_id":"55d6a5ec6f926f257c8c835dc345e8ae495d0135"},{"author":{"_account_id":23173,"name":"Maxime Cottret","email":"maxime.cottret@gmail.com","username":"aolwas"},"change_message_id":"1bab3d69936cab736f26d64ef13ae8d71bf7818b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                query, {\u0027period\u0027: str(period) + \u0027s\u0027},"},{"line_number":69,"context_line":"            )"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if not query:"},{"line_number":72,"context_line":"            raise collector.NoDataCollected("},{"line_number":73,"context_line":"                collector.collector_name,"},{"line_number":74,"context_line":"                metric_name"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_60123065","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":21},"updated":"2018-08-17 08:18:37.000000000","message":"If this only occurs due to the ck_utils function, I don\u0027t see the point of the ck_utils template function: you may just catch the exception from the standard template subst function and raise a custom one if needed.","commit_id":"9d0fe37294d0ba958e1fe5dad3df58b83d07decf"},{"author":{"_account_id":26767,"name":"Martin CAMEY","email":"martin.camey@objectif-libre.com","username":"MC"},"change_message_id":"8771a22a8cfe14b55f44e33ba3b4369ed981ae6b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                query, {\u0027period\u0027: str(period) + \u0027s\u0027},"},{"line_number":69,"context_line":"            )"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if not query:"},{"line_number":72,"context_line":"            raise collector.NoDataCollected("},{"line_number":73,"context_line":"                collector.collector_name,"},{"line_number":74,"context_line":"                metric_name"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_0d1b7473","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":21},"in_reply_to":"3f79a3b5_60123065","updated":"2018-08-17 08:56:46.000000000","message":"Hello Maxime! Thanks for the review! In fact, I wrote this code initially both for the raises and for the query missing in conf (this code was older than our Voluptuous usage in Cloudkitty). I changed things, to fit globally what you suggested: the utils function still catch exceptions first, just to make a first common log for the debug, then reraise the exception, so we have to handle it for each usage. In the Prometheus Collector, I now catch the exception, and raise a NoDataCollected, to be consistent with what happened with this metric collection :)","commit_id":"9d0fe37294d0ba958e1fe5dad3df58b83d07decf"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"e8957ac8515443aeeb129f9e370e3be63d54c6ea","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"CONF \u003d cfg.CONF"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"getcontext().prec \u003d 9"},{"line_number":49,"context_line":"getcontext().rounding \u003d ROUND_HALF_UP"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"PROMETHEUS_EXTRA_SCHEMA \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_36f4575b","line":49,"range":{"start_line":48,"start_character":0,"end_line":49,"end_character":37},"updated":"2018-08-20 12:26:16.000000000","message":"please use a local context","commit_id":"53ce03ea4d4f515f9051b8a8f08ea51803aeb7b7"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"e8957ac8515443aeeb129f9e370e3be63d54c6ea","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            output[metric_name] \u003d metric_schema(metric)"},{"line_number":113,"context_line":"        return {\u0027metrics\u0027: output}"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def format_data(self, metric_name, project_id,"},{"line_number":116,"context_line":"                    start, end, data, group_by, metadata):"},{"line_number":117,"context_line":"        values \u003d []"},{"line_number":118,"context_line":"        for item in data[\u0027data\u0027][\u0027result\u0027]:"},{"line_number":119,"context_line":"            value \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_1cf85dc2","line":116,"range":{"start_line":115,"start_character":3,"end_line":116,"end_character":58},"updated":"2018-08-20 12:26:16.000000000","message":"You should use the cloudkitty transformer for item formatting. It would avoid to have maintain data formatting in several parts of the code. And it avoids errors. Here for example, \"metadata\" and \"groupby\" aren\u0027t part of \"desc\".","commit_id":"53ce03ea4d4f515f9051b8a8f08ea51803aeb7b7"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"e8957ac8515443aeeb129f9e370e3be63d54c6ea","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                },"},{"line_number":128,"context_line":"            }"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"            if group_by:"},{"line_number":131,"context_line":"                value[\u0027desc\u0027][\u0027group_by\u0027] \u003d group_by"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"            if metadata:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_dc62e5d8","line":130,"range":{"start_line":130,"start_character":12,"end_line":130,"end_character":23},"updated":"2018-08-20 12:26:16.000000000","message":"this is a list containing at least one element","commit_id":"53ce03ea4d4f515f9051b8a8f08ea51803aeb7b7"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"e8957ac8515443aeeb129f9e370e3be63d54c6ea","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            }"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"            if group_by:"},{"line_number":131,"context_line":"                value[\u0027desc\u0027][\u0027group_by\u0027] \u003d group_by"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"            if metadata:"},{"line_number":134,"context_line":"                value[\u0027desc\u0027][\u0027metadata\u0027] \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_d66ba3ee","line":131,"range":{"start_line":131,"start_character":31,"end_line":131,"end_character":38},"updated":"2018-08-20 12:26:16.000000000","message":"groupby","commit_id":"53ce03ea4d4f515f9051b8a8f08ea51803aeb7b7"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"e8957ac8515443aeeb129f9e370e3be63d54c6ea","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            if group_by:"},{"line_number":131,"context_line":"                value[\u0027desc\u0027][\u0027group_by\u0027] \u003d group_by"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"            if metadata:"},{"line_number":134,"context_line":"                value[\u0027desc\u0027][\u0027metadata\u0027] \u003d {}"},{"line_number":135,"context_line":"                for meta in metadata:"},{"line_number":136,"context_line":"                    value[\u0027desc\u0027][\u0027metadata\u0027][meta] \u003d item[\u0027metric\u0027][meta]"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_fc5d6115","line":133,"range":{"start_line":133,"start_character":12,"end_line":133,"end_character":23},"updated":"2018-08-20 12:26:16.000000000","message":"this is a list containing at least one element","commit_id":"53ce03ea4d4f515f9051b8a8f08ea51803aeb7b7"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"e8957ac8515443aeeb129f9e370e3be63d54c6ea","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            start,"},{"line_number":162,"context_line":"            end,"},{"line_number":163,"context_line":"            res,"},{"line_number":164,"context_line":"            self.conf[\u0027metrics\u0027][metric_name][\u0027extra_args\u0027].get(\u0027group_by\u0027),"},{"line_number":165,"context_line":"            self.conf[\u0027metrics\u0027][metric_name][\u0027extra_args\u0027].get(\u0027metadata\u0027),"},{"line_number":166,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_767c0fb5","line":164,"range":{"start_line":164,"start_character":65,"end_line":164,"end_character":72},"updated":"2018-08-20 12:26:16.000000000","message":"groupby","commit_id":"53ce03ea4d4f515f9051b8a8f08ea51803aeb7b7"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"e8957ac8515443aeeb129f9e370e3be63d54c6ea","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            end,"},{"line_number":163,"context_line":"            res,"},{"line_number":164,"context_line":"            self.conf[\u0027metrics\u0027][metric_name][\u0027extra_args\u0027].get(\u0027group_by\u0027),"},{"line_number":165,"context_line":"            self.conf[\u0027metrics\u0027][metric_name][\u0027extra_args\u0027].get(\u0027metadata\u0027),"},{"line_number":166,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_b6094732","line":165,"range":{"start_line":165,"start_character":12,"end_line":165,"end_character":21},"updated":"2018-08-20 12:26:16.000000000","message":"metadata and groupby aren\u0027t in extra_args. .get() is not necessary, because the data has been validated, so groupby and metadata are lists containing at least one element","commit_id":"53ce03ea4d4f515f9051b8a8f08ea51803aeb7b7"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"be43de22194c018b8356559681cc20355f697fb4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"PROMETHEUS_COLLECTOR_OPTS \u003d \u0027prometheus_collector\u0027"},{"line_number":37,"context_line":"pcollector_collector_opts \u003d ["},{"line_number":38,"context_line":"    cfg.StrOpt("},{"line_number":39,"context_line":"        \u0027url\u0027,"},{"line_number":40,"context_line":"        default\u003d\u0027\u0027,"},{"line_number":41,"context_line":"        help\u003d\u0027Prometheus service URL\u0027,"},{"line_number":42,"context_line":"    ),"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_c9abec72","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":12},"updated":"2018-08-21 12:30:00.000000000","message":"wouldn\u0027t \"prometheus_url\" be more explicit ? Not mandatory though","commit_id":"3b7bfcd324cc9cd0d0ae67e66bb6fabe112362d2"},{"author":{"_account_id":26767,"name":"Martin CAMEY","email":"martin.camey@objectif-libre.com","username":"MC"},"change_message_id":"8e97795b8f2bf1eb45bffab08810d9eb265554bb","unresolved":false,"context_lines":[{"line_number":36,"context_line":"PROMETHEUS_COLLECTOR_OPTS \u003d \u0027prometheus_collector\u0027"},{"line_number":37,"context_line":"pcollector_collector_opts \u003d ["},{"line_number":38,"context_line":"    cfg.StrOpt("},{"line_number":39,"context_line":"        \u0027url\u0027,"},{"line_number":40,"context_line":"        default\u003d\u0027\u0027,"},{"line_number":41,"context_line":"        help\u003d\u0027Prometheus service URL\u0027,"},{"line_number":42,"context_line":"    ),"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_245ac54f","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":12},"in_reply_to":"3f79a3b5_c9abec72","updated":"2018-08-21 17:46:55.000000000","message":"The more explicit we are, the best it is! Thanks Luka!","commit_id":"3b7bfcd324cc9cd0d0ae67e66bb6fabe112362d2"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"be43de22194c018b8356559681cc20355f697fb4","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        end \u003d ck_utils.iso8601_from_timestamp(end)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if \u0027$period\u0027 in query:"},{"line_number":63,"context_line":"            try:"},{"line_number":64,"context_line":"                query \u003d ck_utils.template_str_substitute("},{"line_number":65,"context_line":"                    query, {\u0027period\u0027: str(period) + \u0027s\u0027},"},{"line_number":66,"context_line":"                )"},{"line_number":67,"context_line":"            except (KeyError, ValueError):"},{"line_number":68,"context_line":"                raise collector.NoDataCollected("},{"line_number":69,"context_line":"                    collector.collector_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_2939403e","line":66,"range":{"start_line":63,"start_character":15,"end_line":66,"end_character":17},"updated":"2018-08-21 12:30:00.000000000","message":"Does the $ sign stay in the query ?","commit_id":"3b7bfcd324cc9cd0d0ae67e66bb6fabe112362d2"},{"author":{"_account_id":26767,"name":"Martin CAMEY","email":"martin.camey@objectif-libre.com","username":"MC"},"change_message_id":"8e97795b8f2bf1eb45bffab08810d9eb265554bb","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        end \u003d ck_utils.iso8601_from_timestamp(end)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if \u0027$period\u0027 in query:"},{"line_number":63,"context_line":"            try:"},{"line_number":64,"context_line":"                query \u003d ck_utils.template_str_substitute("},{"line_number":65,"context_line":"                    query, {\u0027period\u0027: str(period) + \u0027s\u0027},"},{"line_number":66,"context_line":"                )"},{"line_number":67,"context_line":"            except (KeyError, ValueError):"},{"line_number":68,"context_line":"                raise collector.NoDataCollected("},{"line_number":69,"context_line":"                    collector.collector_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_249de556","line":66,"range":{"start_line":63,"start_character":15,"end_line":66,"end_character":17},"in_reply_to":"3f79a3b5_2939403e","updated":"2018-08-21 17:46:55.000000000","message":"Of course not. Please, see https://docs.python.org/3/library/string.html#template-strings for more information about Template Strings.","commit_id":"3b7bfcd324cc9cd0d0ae67e66bb6fabe112362d2"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"be43de22194c018b8356559681cc20355f697fb4","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def _format_data(self, metric_name, project_id,"},{"line_number":112,"context_line":"                     start, end, data, metadata):"},{"line_number":113,"context_line":"        getcontext().prec \u003d 9"},{"line_number":114,"context_line":"        getcontext().rounding \u003d ROUND_HALF_UP"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        data_metadata \u003d {}"},{"line_number":117,"context_line":"        for meta in metadata:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_6ee97eb5","line":114,"range":{"start_line":113,"start_character":8,"end_line":114,"end_character":21},"updated":"2018-08-21 12:30:00.000000000","message":"Please use a local context.\n\nwith decimal.localcontext() as ctx:\n    ctx.prec \u003d 9\n\netc...","commit_id":"3b7bfcd324cc9cd0d0ae67e66bb6fabe112362d2"},{"author":{"_account_id":26767,"name":"Martin CAMEY","email":"martin.camey@objectif-libre.com","username":"MC"},"change_message_id":"8e97795b8f2bf1eb45bffab08810d9eb265554bb","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def _format_data(self, metric_name, project_id,"},{"line_number":112,"context_line":"                     start, end, data, metadata):"},{"line_number":113,"context_line":"        getcontext().prec \u003d 9"},{"line_number":114,"context_line":"        getcontext().rounding \u003d ROUND_HALF_UP"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        data_metadata \u003d {}"},{"line_number":117,"context_line":"        for meta in metadata:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_04946943","line":114,"range":{"start_line":113,"start_character":8,"end_line":114,"end_character":21},"in_reply_to":"3f79a3b5_6ee97eb5","updated":"2018-08-21 17:46:55.000000000","message":"I was not aware about Decimal localcontext function, thanks!","commit_id":"3b7bfcd324cc9cd0d0ae67e66bb6fabe112362d2"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"be43de22194c018b8356559681cc20355f697fb4","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        value \u003d ck_utils.convert_unit("},{"line_number":121,"context_line":"            +Decimal(data[\u0027value\u0027][1]),"},{"line_number":122,"context_line":"            self.conf[metric_name].get(\u0027factor\u0027, 1),"},{"line_number":123,"context_line":"            self.conf[metric_name].get(\u0027offset\u0027, 0),"},{"line_number":124,"context_line":"        )"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_69117804","line":122,"range":{"start_line":122,"start_character":34,"end_line":122,"end_character":39},"updated":"2018-08-21 12:30:00.000000000","message":"Don\u0027t do a get(). Factor and offset WILL be available. It is voluptuous\u0027 role to provide a default value.","commit_id":"3b7bfcd324cc9cd0d0ae67e66bb6fabe112362d2"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"be43de22194c018b8356559681cc20355f697fb4","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        value \u003d ck_utils.convert_unit("},{"line_number":121,"context_line":"            +Decimal(data[\u0027value\u0027][1]),"},{"line_number":122,"context_line":"            self.conf[metric_name].get(\u0027factor\u0027, 1),"},{"line_number":123,"context_line":"            self.conf[metric_name].get(\u0027offset\u0027, 0),"},{"line_number":124,"context_line":"        )"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return data_metadata, value"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_29f380e9","line":123,"range":{"start_line":123,"start_character":34,"end_line":123,"end_character":39},"updated":"2018-08-21 12:30:00.000000000","message":"ditto","commit_id":"3b7bfcd324cc9cd0d0ae67e66bb6fabe112362d2"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"be43de22194c018b8356559681cc20355f697fb4","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            )"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"            item \u003d self.t_cloudkitty.format_item("},{"line_number":163,"context_line":"                {},"},{"line_number":164,"context_line":"                metadata,"},{"line_number":165,"context_line":"                self.conf[metric_name][\u0027unit\u0027],"},{"line_number":166,"context_line":"                qty\u003dqty,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_ae64764a","line":163,"range":{"start_line":163,"start_character":16,"end_line":163,"end_character":17},"updated":"2018-08-21 12:30:00.000000000","message":"What ?","commit_id":"3b7bfcd324cc9cd0d0ae67e66bb6fabe112362d2"},{"author":{"_account_id":23060,"name":"Luka Peschke","email":"mail@lukapeschke.com","username":"lukapeschke"},"change_message_id":"be43de22194c018b8356559681cc20355f697fb4","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                qty\u003dqty,"},{"line_number":167,"context_line":"            )"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        formatted_resources.append(item)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        return formatted_resources"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_2ed5c6b7","line":169,"range":{"start_line":169,"start_character":8,"end_line":169,"end_character":40},"updated":"2018-08-21 12:30:00.000000000","message":"Wrong indentation ?","commit_id":"3b7bfcd324cc9cd0d0ae67e66bb6fabe112362d2"},{"author":{"_account_id":26767,"name":"Martin CAMEY","email":"martin.camey@objectif-libre.com","username":"MC"},"change_message_id":"8e97795b8f2bf1eb45bffab08810d9eb265554bb","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                qty\u003dqty,"},{"line_number":167,"context_line":"            )"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        formatted_resources.append(item)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        return formatted_resources"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_64ce7db5","line":169,"range":{"start_line":169,"start_character":8,"end_line":169,"end_character":40},"in_reply_to":"3f79a3b5_2ed5c6b7","updated":"2018-08-21 17:46:55.000000000","message":"Bad rebase before pushing this last patchset, my bad!","commit_id":"3b7bfcd324cc9cd0d0ae67e66bb6fabe112362d2"}],"cloudkitty/utils.py":[{"author":{"_account_id":23173,"name":"Maxime Cottret","email":"maxime.cottret@gmail.com","username":"aolwas"},"change_message_id":"1bab3d69936cab736f26d64ef13ae8d71bf7818b","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    except (KeyError, ValueError):"},{"line_number":313,"context_line":"        LOG.error(\"Error when trying to substitute the string placeholders. \\"},{"line_number":314,"context_line":"                   Please, check your metrics configuration.\")"},{"line_number":315,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_3b3789e6","line":315,"range":{"start_line":315,"start_character":15,"end_line":315,"end_character":20},"updated":"2018-08-17 08:18:37.000000000","message":"You should return None instead","commit_id":"9d0fe37294d0ba958e1fe5dad3df58b83d07decf"}]}
