)]}'
{"monasca_log_api/tests/test_log_publisher.py":[{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        log_object \u003d {"},{"line_number":83,"context_line":"            \u0027application_type\u0027: application_type,"},{"line_number":84,"context_line":"            \u0027dimensions\u0027: {"},{"line_number":85,"context_line":"                \u0027disk_usage\u0027: 50,"},{"line_number":86,"context_line":"                \u0027cpu_time\u0027: 60"},{"line_number":87,"context_line":"            }"},{"line_number":88,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_546d47ca","line":85,"updated":"2015-11-19 19:54:18.000000000","message":"nit: could use variables like the above test","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"2134cc7ba05b740e66a69b167698fa73414082e2","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        log_object \u003d {"},{"line_number":83,"context_line":"            \u0027application_type\u0027: application_type,"},{"line_number":84,"context_line":"            \u0027dimensions\u0027: {"},{"line_number":85,"context_line":"                \u0027disk_usage\u0027: 50,"},{"line_number":86,"context_line":"                \u0027cpu_time\u0027: 60"},{"line_number":87,"context_line":"            }"},{"line_number":88,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_888f0b74","line":85,"in_reply_to":"ba8a016a_546d47ca","updated":"2015-11-19 20:34:19.000000000","message":"Correct, that fits better in Python.","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"f36f9c6f68b17be4759d7af91bfc3e46c1f81def","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        log_object \u003d {"},{"line_number":83,"context_line":"            \u0027application_type\u0027: application_type,"},{"line_number":84,"context_line":"            \u0027dimensions\u0027: {"},{"line_number":85,"context_line":"                \u0027disk_usage\u0027: 50,"},{"line_number":86,"context_line":"                \u0027cpu_time\u0027: 60"},{"line_number":87,"context_line":"            }"},{"line_number":88,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_e3a343b0","line":85,"in_reply_to":"ba8a016a_888f0b74","updated":"2015-11-20 08:05:19.000000000","message":"Done","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        instance \u003d log_publisher.LogPublisher()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        instance._kafka_publisher \u003d mock.Mock()"},{"line_number":109,"context_line":"        instance.send_message({})"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        self.assertFalse(instance._kafka_publisher.publish.called)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_809e09b7","line":109,"updated":"2015-11-19 19:54:18.000000000","message":"Looks like the actual caller of the send_message will always pass a non-empty dictionary. The Logs.get_envelope method seems to create a non-empty dict even if the message is empty. Something like below:\n\nfrom monasca_log_api.v1.reference import logs\n\nenvelope \u003d self.logs_resource.get_envelope(\n        log\u003dNone,\n        tenant_id\u003dNone\n    )\n\ninstance.send_message(envelope)\n\nThis would make the test fail. So, even though this is a nice test to make sure kafka is not passed an empty message, I don\u0027t see a practical use for it.","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"2134cc7ba05b740e66a69b167698fa73414082e2","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        instance \u003d log_publisher.LogPublisher()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        instance._kafka_publisher \u003d mock.Mock()"},{"line_number":109,"context_line":"        instance.send_message({})"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        self.assertFalse(instance._kafka_publisher.publish.called)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_c89993c5","line":109,"in_reply_to":"ba8a016a_809e09b7","updated":"2015-11-19 20:34:19.000000000","message":"Hmm, that\u0027s interesting observation. I am not entirely sure that I understand in 100%. I will look at it at work tomorrow morning. Perhaps we could update get_envelope method to reject empty log objects, that obviously makes no sense to create such envelope. What do you think ?","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"b3c2245dd3519d9a44d2ecf93327c0c46f524306","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        instance \u003d log_publisher.LogPublisher()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        instance._kafka_publisher \u003d mock.Mock()"},{"line_number":109,"context_line":"        instance.send_message({})"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        self.assertFalse(instance._kafka_publisher.publish.called)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_a9b8d111","line":109,"in_reply_to":"ba8a016a_c89993c5","updated":"2015-11-19 21:57:04.000000000","message":"Thanks. Updating get_envelope method to reject empty log objects sounds good to me.","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"}],"monasca_log_api/tests/test_logs.py":[{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def before(self):"},{"line_number":29,"context_line":"        self.conf \u003d base.mock_config(self)"},{"line_number":30,"context_line":"        self.logs_resource \u003d logs.Logs()"},{"line_number":31,"context_line":"        self.api.add_route("},{"line_number":32,"context_line":"            \u0027/logs/single\u0027,"},{"line_number":33,"context_line":"            self.logs_resource"},{"line_number":34,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_205ddd46","line":31,"updated":"2015-11-19 19:54:18.000000000","message":"/log/single","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"2134cc7ba05b740e66a69b167698fa73414082e2","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def before(self):"},{"line_number":29,"context_line":"        self.conf \u003d base.mock_config(self)"},{"line_number":30,"context_line":"        self.logs_resource \u003d logs.Logs()"},{"line_number":31,"context_line":"        self.api.add_route("},{"line_number":32,"context_line":"            \u0027/logs/single\u0027,"},{"line_number":33,"context_line":"            self.logs_resource"},{"line_number":34,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_c86bd3b5","line":31,"in_reply_to":"ba8a016a_205ddd46","updated":"2015-11-19 20:34:19.000000000","message":"Correct, thx.","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_should_fail_not_delegate_ok_cross_tenant_id(self):"},{"line_number":37,"context_line":"        self.simulate_request("},{"line_number":38,"context_line":"            \u0027/logs/single\u0027,"},{"line_number":39,"context_line":"            method\u003d\u0027POST\u0027,"},{"line_number":40,"context_line":"            query_string\u003d\u0027tenant_id\u003d1\u0027,"},{"line_number":41,"context_line":"            headers\u003d{"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_c0573124","line":38,"updated":"2015-11-19 19:54:18.000000000","message":"/log/single","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.logs_resource._kafka_publisher \u003d kafka_publisher"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.simulate_request("},{"line_number":56,"context_line":"            \u0027/logs/single\u0027,"},{"line_number":57,"context_line":"            method\u003d\u0027POST\u0027,"},{"line_number":58,"context_line":"            headers\u003d{"},{"line_number":59,"context_line":"                headers.X_ROLES.name: \u0027some_role\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_a0378dfd","line":56,"updated":"2015-11-19 19:54:18.000000000","message":"/log/single","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.logs_resource._kafka_publisher \u003d kafka_publisher"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        self.simulate_request("},{"line_number":79,"context_line":"            \u0027/logs/single\u0027,"},{"line_number":80,"context_line":"            method\u003d\u0027POST\u0027,"},{"line_number":81,"context_line":"            headers\u003d{"},{"line_number":82,"context_line":"                headers.X_ROLES.name: logs_api.MONITORING_DELEGATE_ROLE,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_b63353f5","line":79,"updated":"2015-11-19 19:54:18.000000000","message":"/log/single","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.logs_resource._kafka_publisher \u003d log_publisher"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.simulate_request("},{"line_number":102,"context_line":"            \u0027/logs/single\u0027,"},{"line_number":103,"context_line":"            method\u003d\u0027POST\u0027,"},{"line_number":104,"context_line":"            query_string\u003d\u0027tenant_id\u003d1\u0027,"},{"line_number":105,"context_line":"            headers\u003d{"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_76508b0b","line":102,"updated":"2015-11-19 19:54:18.000000000","message":"/log/single","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        rest_utils.read_body.return_value \u003d True"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        self.simulate_request("},{"line_number":122,"context_line":"            \u0027/logs/single\u0027,"},{"line_number":123,"context_line":"            method\u003d\u0027POST\u0027,"},{"line_number":124,"context_line":"            headers\u003d{"},{"line_number":125,"context_line":"                headers.X_ROLES.name: logs_api.MONITORING_DELEGATE_ROLE,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_9653af16","line":122,"updated":"2015-11-19 19:54:18.000000000","message":"/log/single","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_should_fail_for_invalid_content_type(self):"},{"line_number":133,"context_line":"        self.simulate_request("},{"line_number":134,"context_line":"            \u0027/logs/single\u0027,"},{"line_number":135,"context_line":"            method\u003d\u0027POST\u0027,"},{"line_number":136,"context_line":"            headers\u003d{"},{"line_number":137,"context_line":"                headers.X_ROLES.name: logs_api.MONITORING_DELEGATE_ROLE,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_36568306","line":134,"updated":"2015-11-19 19:54:18.000000000","message":"/log/single","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"}],"monasca_log_api/v1/common/log_publisher.py":[{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            :param b: dimension_b, tuple with properties name,value"},{"line_number":62,"context_line":"            :return: sorting result"},{"line_number":63,"context_line":"            \"\"\""},{"line_number":64,"context_line":"            # if a.name \u003d\u003d b.name:"},{"line_number":65,"context_line":"            #     return (a.value \u003e b.value) - (a.value \u003c b.value)"},{"line_number":66,"context_line":"            # return (a.name \u003e b.name) - (a.name \u003c b.name)"},{"line_number":67,"context_line":"            return (a \u003e b) - (a \u003c b)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_746164d2","line":64,"updated":"2015-11-19 19:54:18.000000000","message":"I see that these commented lines are removed in your other patch for docs","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"2134cc7ba05b740e66a69b167698fa73414082e2","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            :param b: dimension_b, tuple with properties name,value"},{"line_number":62,"context_line":"            :return: sorting result"},{"line_number":63,"context_line":"            \"\"\""},{"line_number":64,"context_line":"            # if a.name \u003d\u003d b.name:"},{"line_number":65,"context_line":"            #     return (a.value \u003e b.value) - (a.value \u003c b.value)"},{"line_number":66,"context_line":"            # return (a.name \u003e b.name) - (a.name \u003c b.name)"},{"line_number":67,"context_line":"            return (a \u003e b) - (a \u003c b)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_687ae789","line":64,"in_reply_to":"ba8a016a_746164d2","updated":"2015-11-19 20:34:19.000000000","message":"Yes, I will remove them from here as well. Also I need to update doc for comparator, it longer matches the implementation.","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"            if \u0027dimensions\u0027 in obj and obj[\u0027dimensions\u0027]:"},{"line_number":79,"context_line":"                dims \u003d obj[\u0027dimensions\u0027]"},{"line_number":80,"context_line":"                sorted_dims \u003d sorted(dims, cmp\u003dcomparator)"},{"line_number":81,"context_line":"                for name in sorted_dims:"},{"line_number":82,"context_line":"                    str_list +\u003d name"},{"line_number":83,"context_line":"                    str_list +\u003d str(dims[name])"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_17b6daf8","line":80,"updated":"2015-11-19 19:54:18.000000000","message":"Looks like sorting by keys now. Is the comparator method even required ?","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"2134cc7ba05b740e66a69b167698fa73414082e2","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"            if \u0027dimensions\u0027 in obj and obj[\u0027dimensions\u0027]:"},{"line_number":79,"context_line":"                dims \u003d obj[\u0027dimensions\u0027]"},{"line_number":80,"context_line":"                sorted_dims \u003d sorted(dims, cmp\u003dcomparator)"},{"line_number":81,"context_line":"                for name in sorted_dims:"},{"line_number":82,"context_line":"                    str_list +\u003d name"},{"line_number":83,"context_line":"                    str_list +\u003d str(dims[name])"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_a82e8f89","line":80,"in_reply_to":"ba8a016a_17b6daf8","updated":"2015-11-19 20:34:19.000000000","message":"AFAIK dict is not sorted by itself and yes sorting is needed. It was original blueprint. Basically I compared that to java implementation and basically I believe that sorting by key is the one that should be here and only that.\n\nIt\u0027s because that in Java that\u0027s a HashMap, so there are no duplicates in keys therefore there won\u0027t be a situation that keys are the same when sorting this map, right ? When it comes to python, you also cannot put two identical keys into the dictionary. Basically my conclusion is that if there wont be two identical keys therefore we wont need to sort by values therefore is is not needed.\n\nTo be honest I believe Java implementation should be revised under that angle as well.","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"b3c2245dd3519d9a44d2ecf93327c0c46f524306","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"            if \u0027dimensions\u0027 in obj and obj[\u0027dimensions\u0027]:"},{"line_number":79,"context_line":"                dims \u003d obj[\u0027dimensions\u0027]"},{"line_number":80,"context_line":"                sorted_dims \u003d sorted(dims, cmp\u003dcomparator)"},{"line_number":81,"context_line":"                for name in sorted_dims:"},{"line_number":82,"context_line":"                    str_list +\u003d name"},{"line_number":83,"context_line":"                    str_list +\u003d str(dims[name])"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_e96b391c","line":80,"in_reply_to":"ba8a016a_a82e8f89","updated":"2015-11-19 21:57:04.000000000","message":"Ok. I have not looked at the Java code. I understand sorting is needed. My comment was only about the comparator method, as the following python code sorts by keys without the comparator method:\n\nprint sorted({\"a\":1,\"c\":2,\"b\":3})\n\n[\u0027a\u0027, \u0027b\u0027, \u0027c\u0027]","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"f36f9c6f68b17be4759d7af91bfc3e46c1f81def","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"            if \u0027dimensions\u0027 in obj and obj[\u0027dimensions\u0027]:"},{"line_number":79,"context_line":"                dims \u003d obj[\u0027dimensions\u0027]"},{"line_number":80,"context_line":"                sorted_dims \u003d sorted(dims, cmp\u003dcomparator)"},{"line_number":81,"context_line":"                for name in sorted_dims:"},{"line_number":82,"context_line":"                    str_list +\u003d name"},{"line_number":83,"context_line":"                    str_list +\u003d str(dims[name])"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_3ebc12ba","line":80,"in_reply_to":"ba8a016a_e96b391c","updated":"2015-11-20 08:05:19.000000000","message":"Yes, you\u0027re right.","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        try:"},{"line_number":109,"context_line":"            for topic in self._topics:"},{"line_number":110,"context_line":"                self._publisher().publish(topic, msg)"},{"line_number":111,"context_line":"        except Exception as ex:"},{"line_number":112,"context_line":"            LOG.error(ex.message)"},{"line_number":113,"context_line":"            raise ex"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_97be4aac","line":110,"updated":"2015-11-19 19:54:18.000000000","message":"The key is not passed. Is that what you are referring to as a TODO feature of monasca-common ?","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"2134cc7ba05b740e66a69b167698fa73414082e2","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        try:"},{"line_number":109,"context_line":"            for topic in self._topics:"},{"line_number":110,"context_line":"                self._publisher().publish(topic, msg)"},{"line_number":111,"context_line":"        except Exception as ex:"},{"line_number":112,"context_line":"            LOG.error(ex.message)"},{"line_number":113,"context_line":"            raise ex"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_3d989f1b","line":110,"in_reply_to":"ba8a016a_97be4aac","updated":"2015-11-19 20:34:19.000000000","message":"Yes, some time ago I created a change that addresses that. It has been already merged so I am waiting for that to be published to pypi.","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"5d195f2212ef3a9bcbfbb63526ccd05e7496050e","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\"Validates message before sending."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        Methods checks if message is :py:class:`dict`."},{"line_number":87,"context_line":"        If so dictionary is verified againts having following keys:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        * meta"},{"line_number":90,"context_line":"        * log"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_01e3dfd9","line":87,"updated":"2015-11-20 08:58:06.000000000","message":"typo","commit_id":"d7d12c431affd0aa94ae72edefe85be350081e2a"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"39b2c4b4ff943b291daabce0c328eafcfcc22d08","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\"Validates message before sending."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        Methods checks if message is :py:class:`dict`."},{"line_number":87,"context_line":"        If so dictionary is verified againts having following keys:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        * meta"},{"line_number":90,"context_line":"        * log"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_bc10f800","line":87,"in_reply_to":"ba8a016a_01e3dfd9","updated":"2015-11-20 09:11:57.000000000","message":"Done","commit_id":"d7d12c431affd0aa94ae72edefe85be350081e2a"}],"requirements.txt":[{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"7163395a733c210f91a9df19b9678adf6d735d52","unresolved":false,"context_lines":[{"line_number":12,"context_line":"six\u003e\u003d1.9.0"},{"line_number":13,"context_line":"simplejson\u003e\u003d3.8.0"},{"line_number":14,"context_line":"simport"},{"line_number":15,"context_line":"monasca-common\u003e\u003d0.0.2"}],"source_content_type":"text/plain","patch_set":2,"id":"ba8a016a_f76b16ef","line":15,"updated":"2015-11-19 19:54:18.000000000","message":"eventlet needs to be added to monasca-common","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":7874,"name":"Venkat Sundaram","email":"tsv@hp.com","username":"tsv"},"change_message_id":"b3c2245dd3519d9a44d2ecf93327c0c46f524306","unresolved":false,"context_lines":[{"line_number":12,"context_line":"six\u003e\u003d1.9.0"},{"line_number":13,"context_line":"simplejson\u003e\u003d3.8.0"},{"line_number":14,"context_line":"simport"},{"line_number":15,"context_line":"monasca-common\u003e\u003d0.0.2"}],"source_content_type":"text/plain","patch_set":2,"id":"ba8a016a_c94e753a","line":15,"in_reply_to":"ba8a016a_7ddaa718","updated":"2015-11-19 21:57:04.000000000","message":"cool","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"2134cc7ba05b740e66a69b167698fa73414082e2","unresolved":false,"context_lines":[{"line_number":12,"context_line":"six\u003e\u003d1.9.0"},{"line_number":13,"context_line":"simplejson\u003e\u003d3.8.0"},{"line_number":14,"context_line":"simport"},{"line_number":15,"context_line":"monasca-common\u003e\u003d0.0.2"}],"source_content_type":"text/plain","patch_set":2,"id":"ba8a016a_7ddaa718","line":15,"in_reply_to":"ba8a016a_f76b16ef","updated":"2015-11-19 20:34:19.000000000","message":"I replied to that statement in another change. Let\u0027s keep it cool and if adding eventlet will be needed let\u0027s first try to add that just to the monasca-log-api.","commit_id":"372d8b2118e85f6f94b7f37f0c9ea8cd56f96905"}]}
