)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"4c2ea5403364760c73222823eb51d5bbe98ac2d9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Pavel Boldin \u003cpboldin@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-16 19:16:55 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add `LogCatcher\u0027 useful to test logging"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add `LogCatcher\u0027 context that can be used to check whether the code"},{"line_number":10,"context_line":"inside the context is issuing some particular message."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dac4157f_3f772f04","line":7,"updated":"2015-04-18 22:57:27.000000000","message":"rewrite it completely","commit_id":"3470649c76ad53e5975d6bf212e48575f486a69c"}],"rally/common/log.py":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"217670cf79f1d6f731e41fd991d093a447bc7d60","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class LogCatcher(object):"},{"line_number":120,"context_line":"    \"\"\"Context that catches logging and can assert on them."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    Usage::"},{"line_number":123,"context_line":"        LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dac4157f_f9031775","line":120,"updated":"2015-04-18 16:16:01.000000000","message":"Context that catches log messages.\n\nUser can make an assertion on their content or fetch them all.","commit_id":"3470649c76ad53e5975d6bf212e48575f486a69c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"217670cf79f1d6f731e41fd991d093a447bc7d60","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        self.logger.removeHandler(self.handler)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def assertInLogs(self, msg):"},{"line_number":144,"context_line":"        \"\"\"Assert that `msg\u0027 is a part of logged messages."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        :param msg: Message to look for."},{"line_number":147,"context_line":"        :return: Logs where the `msg\u0027 was found. Raises AssertionError if none."}],"source_content_type":"text/x-python","patch_set":1,"id":"dac4157f_99b41bd2","line":144,"updated":"2015-04-18 16:16:01.000000000","message":"a substring at least of one logged message.","commit_id":"3470649c76ad53e5975d6bf212e48575f486a69c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"217670cf79f1d6f731e41fd991d093a447bc7d60","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                                 % {\"expected\": msg})"},{"line_number":154,"context_line":"        return in_logs"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def fetchLogs(self):"},{"line_number":157,"context_line":"        \"\"\"Returns all logged Records.\"\"\""},{"line_number":158,"context_line":"        return self.handler.buffer"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dac4157f_79ca6751","line":156,"range":{"start_line":156,"start_character":16,"end_line":156,"end_character":17},"updated":"2015-04-18 16:16:01.000000000","message":"fetchLogRecords","commit_id":"3470649c76ad53e5975d6bf212e48575f486a69c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"217670cf79f1d6f731e41fd991d093a447bc7d60","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        \"\"\"Returns all logged Records.\"\"\""},{"line_number":158,"context_line":"        return self.handler.buffer"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def fetchLogMessages(self):"},{"line_number":161,"context_line":"        \"\"\"Returns all logged messages.\"\"\""},{"line_number":162,"context_line":"        return [record.msg for record in self.handler.buffer]"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dac4157f_39c4ef3e","line":160,"updated":"2015-04-18 16:16:01.000000000","message":"fetchLogs","commit_id":"3470649c76ad53e5975d6bf212e48575f486a69c"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"5e1d48cc7a1ce90240dc67955aff0e110b9bfdab","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class CatcherHandler(logging.handlers.BufferingHandler):"},{"line_number":109,"context_line":"    def __init__(self):"},{"line_number":110,"context_line":"        logging.handlers.BufferingHandler.__init__(self, 0)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def shouldFlush(self):"},{"line_number":113,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_8e3b419c","line":110,"updated":"2015-04-24 15:11:09.000000000","message":"Why not super()?\n\n super(CatcherHandler, self).__init__(0)","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"7944e4e44ac552184cbfffedb42ce09d72427079","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class CatcherHandler(logging.handlers.BufferingHandler):"},{"line_number":109,"context_line":"    def __init__(self):"},{"line_number":110,"context_line":"        logging.handlers.BufferingHandler.__init__(self, 0)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def shouldFlush(self):"},{"line_number":113,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abe1de1_2bc5b15a","line":110,"in_reply_to":"bab921fb_8b32080f","updated":"2015-04-27 10:13:36.000000000","message":"Of course super() must be used in this case.\n\nhttps://docs.python.org/2/library/functions.html#super\n\nCalling base class methods explicitly is for old-style classes.","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"4b642fd6fb29cdd49fb08a6dd67c561e9d89737f","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class CatcherHandler(logging.handlers.BufferingHandler):"},{"line_number":109,"context_line":"    def __init__(self):"},{"line_number":110,"context_line":"        logging.handlers.BufferingHandler.__init__(self, 0)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def shouldFlush(self):"},{"line_number":113,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_8b32080f","line":110,"in_reply_to":"bab921fb_8e3b419c","updated":"2015-04-24 18:25:47.000000000","message":"super() is for implementing diamond inheritance. There is no point to use it when the class has a single base.","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"5e1d48cc7a1ce90240dc67955aff0e110b9bfdab","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class LogCatcher(object):"},{"line_number":120,"context_line":"    \"\"\"Context that catches log messages."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    User can make an assertion on their content or fetch them all."},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_cefff9a8","line":120,"updated":"2015-04-24 15:11:09.000000000","message":"s/Context/Context manager/","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"5e1d48cc7a1ce90240dc67955aff0e110b9bfdab","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        \"\"\"Assert that `msg\u0027 is a substring at least of one logged message."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        :param msg: Substring to look for."},{"line_number":149,"context_line":"        :return: Logs where the `msg\u0027 was found. Raises AssertionError if none."},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        in_logs \u003d [record.msg"},{"line_number":152,"context_line":"                   for record in self.handler.buffer if msg in record.msg]"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_11cbd073","line":149,"updated":"2015-04-24 15:11:09.000000000","message":"What is `Logs\u0027? list of what objects? Please add type definition","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"4b642fd6fb29cdd49fb08a6dd67c561e9d89737f","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        \"\"\"Assert that `msg\u0027 is a substring at least of one logged message."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        :param msg: Substring to look for."},{"line_number":149,"context_line":"        :return: Logs where the `msg\u0027 was found. Raises AssertionError if none."},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        in_logs \u003d [record.msg"},{"line_number":152,"context_line":"                   for record in self.handler.buffer if msg in record.msg]"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_eb8504ad","line":149,"in_reply_to":"bab921fb_11cbd073","updated":"2015-04-24 18:25:47.000000000","message":"Strings. It returns strings.\n\nWell, Python is a ducktyping-language so there is no point in that. Strings are either `str\u0027 or `unicode\u0027 depending on the Python version.","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"5e1d48cc7a1ce90240dc67955aff0e110b9bfdab","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        :param msg: Substring to look for."},{"line_number":149,"context_line":"        :return: Logs where the `msg\u0027 was found. Raises AssertionError if none."},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        in_logs \u003d [record.msg"},{"line_number":152,"context_line":"                   for record in self.handler.buffer if msg in record.msg]"},{"line_number":153,"context_line":"        if not in_logs:"},{"line_number":154,"context_line":"            raise AssertionError(\"Expected `%(expected)s\u0027 is not in logs\""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_515b882e","line":151,"updated":"2015-04-24 15:11:09.000000000","message":"This must be an iterator - imagine that message is found in first occurrence in 1000","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"4b642fd6fb29cdd49fb08a6dd67c561e9d89737f","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        :param msg: Substring to look for."},{"line_number":149,"context_line":"        :return: Logs where the `msg\u0027 was found. Raises AssertionError if none."},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        in_logs \u003d [record.msg"},{"line_number":152,"context_line":"                   for record in self.handler.buffer if msg in record.msg]"},{"line_number":153,"context_line":"        if not in_logs:"},{"line_number":154,"context_line":"            raise AssertionError(\"Expected `%(expected)s\u0027 is not in logs\""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_8bbd686a","line":151,"in_reply_to":"bab921fb_515b882e","updated":"2015-04-24 18:25:47.000000000","message":"What? Can you please be more clear?","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"7944e4e44ac552184cbfffedb42ce09d72427079","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        :param msg: Substring to look for."},{"line_number":149,"context_line":"        :return: Logs where the `msg\u0027 was found. Raises AssertionError if none."},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        in_logs \u003d [record.msg"},{"line_number":152,"context_line":"                   for record in self.handler.buffer if msg in record.msg]"},{"line_number":153,"context_line":"        if not in_logs:"},{"line_number":154,"context_line":"            raise AssertionError(\"Expected `%(expected)s\u0027 is not in logs\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9abe1de1_cb9e3507","line":151,"in_reply_to":"bab921fb_8bbd686a","updated":"2015-04-27 10:13:36.000000000","message":"My mistake. Sorry","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"5e1d48cc7a1ce90240dc67955aff0e110b9bfdab","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def fetchLogs(self):"},{"line_number":163,"context_line":"        \"\"\"Returns all logged messages.\"\"\""},{"line_number":164,"context_line":"        return [record.msg for record in self.handler.buffer]"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"def is_debug():"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_916240ac","line":164,"updated":"2015-04-24 15:11:09.000000000","message":"I think that iterator is better - that\u0027s all about performance","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"4b642fd6fb29cdd49fb08a6dd67c561e9d89737f","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def fetchLogs(self):"},{"line_number":163,"context_line":"        \"\"\"Returns all logged messages.\"\"\""},{"line_number":164,"context_line":"        return [record.msg for record in self.handler.buffer]"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"def is_debug():"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_6b4e9497","line":164,"in_reply_to":"bab921fb_916240ac","updated":"2015-04-24 18:25:47.000000000","message":"I think you are trying to overcomplicate the code. Premature optimization is a sin.\n\nCan you please imagine the following use case:\n\n logs \u003d catcher.fetchLogs()\n self.assertEqual(4, len(logs))\n self.assertIn(\"SomeLogMessage\", logs)","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"0ebfa77bc0e9d1b9b3e92138e0121ec81e46e776","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class CatcherHandler(logging.handlers.BufferingHandler):"},{"line_number":109,"context_line":"    def __init__(self):"},{"line_number":110,"context_line":"        logging.handlers.BufferingHandler.__init__(self, 0)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def shouldFlush(self):"},{"line_number":113,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abe1de1_e66250ad","line":110,"updated":"2015-04-27 10:23:23.000000000","message":"Use super() here","commit_id":"982b70b938524a5bda1a048fa3154bb8feab022e"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"10fbc4c07ee9439a54e3f952c910083396939cf4","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class CatcherHandler(logging.handlers.BufferingHandler):"},{"line_number":109,"context_line":"    def __init__(self):"},{"line_number":110,"context_line":"        logging.handlers.BufferingHandler.__init__(self, 0)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def shouldFlush(self):"},{"line_number":113,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abe1de1_b116d053","line":110,"in_reply_to":"9abe1de1_e66250ad","updated":"2015-04-27 11:04:59.000000000","message":"No.\n\n /usr/lib/python2.7/logging$ grep \u0027super(\u0027 *.py | wc -l\n1\n/usr/lib/python2.7/logging$ grep \u0027\\.__init__\u0027 *.py | wc -l\n21\n\n /usr/lib/python3.4/logging$ grep \u0027super(\u0027 *.py | wc -l\n1\n/usr/lib/python3.4/logging$ grep \u0027\\.__init__\u0027 *.py | wc -l\n23","commit_id":"982b70b938524a5bda1a048fa3154bb8feab022e"}],"tests/unit/test_log.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"5e1d48cc7a1ce90240dc67955aff0e110b9bfdab","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertEqual(e.exception, exception)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class LogCatcherTestCase(test.TestCase):"},{"line_number":108,"context_line":"    def test_logcatcher(self):"},{"line_number":109,"context_line":"        LOG \u003d log.getLogger(\"testlogger\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_51d5c8b6","line":106,"updated":"2015-04-24 15:11:09.000000000","message":"Missed class CatcherHandlerTestCase","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"4b642fd6fb29cdd49fb08a6dd67c561e9d89737f","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertEqual(e.exception, exception)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class LogCatcherTestCase(test.TestCase):"},{"line_number":108,"context_line":"    def test_logcatcher(self):"},{"line_number":109,"context_line":"        LOG \u003d log.getLogger(\"testlogger\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_ab738c14","line":106,"in_reply_to":"bab921fb_51d5c8b6","updated":"2015-04-24 18:25:47.000000000","message":"This is checked by the code below, see coverage.","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"9f7939b4dc56e20b6a759b3ad78a52b820fc9186","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertEqual(e.exception, exception)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class LogCatcherTestCase(test.TestCase):"},{"line_number":108,"context_line":"    def test_logcatcher(self):"},{"line_number":109,"context_line":"        LOG \u003d log.getLogger(\"testlogger\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abe1de1_461d7c65","line":106,"in_reply_to":"bab921fb_ab738c14","updated":"2015-04-27 10:15:41.000000000","message":"This is not a functional test","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"5e1d48cc7a1ce90240dc67955aff0e110b9bfdab","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        catcher.assertInLogs(\"Warning\")"},{"line_number":118,"context_line":"        self.assertRaises(AssertionError, catcher.assertInLogs, \"Error\")"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        self.assertEqual([\"Warning\", \"Info\"], catcher.fetchLogs())"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab921fb_d14af8ab","line":120,"updated":"2015-04-24 15:11:09.000000000","message":"Missed check for catcher.fetchLogRecords()","commit_id":"3472028ef2ac3c087c269b02246519cd43a152a1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"0ebfa77bc0e9d1b9b3e92138e0121ec81e46e776","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertEqual(e.exception, exception)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class LogCatcherTestCase(test.TestCase):"},{"line_number":108,"context_line":"    def test_logcatcher(self):"},{"line_number":109,"context_line":"        LOG \u003d log.getLogger(\"testlogger\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abe1de1_86f954cb","line":106,"updated":"2015-04-27 10:23:23.000000000","message":"Again, this file is about unit testing, so CatcherHandlerTestCase must be added","commit_id":"982b70b938524a5bda1a048fa3154bb8feab022e"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"10fbc4c07ee9439a54e3f952c910083396939cf4","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertEqual(e.exception, exception)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class LogCatcherTestCase(test.TestCase):"},{"line_number":108,"context_line":"    def test_logcatcher(self):"},{"line_number":109,"context_line":"        LOG \u003d log.getLogger(\"testlogger\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abe1de1_ec034f0c","line":106,"in_reply_to":"9abe1de1_86f954cb","updated":"2015-04-27 11:04:59.000000000","message":"To test what? list append?","commit_id":"982b70b938524a5bda1a048fa3154bb8feab022e"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"8b970bf628abc4ca3642802a9af56e1fdf1eb419","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertEqual(e.exception, exception)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class LogCatcherTestCase(test.TestCase):"},{"line_number":108,"context_line":"    def test_logcatcher(self):"},{"line_number":109,"context_line":"        LOG \u003d log.getLogger(\"testlogger\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abe1de1_0cba03e2","line":106,"in_reply_to":"9abe1de1_ec034f0c","updated":"2015-04-27 11:15:38.000000000","message":"To test all 3 methods of CatcherHandler (including __init__), or at least 2 of them. If these methods are simple, then test case will be simple too, but these tests are required","commit_id":"982b70b938524a5bda1a048fa3154bb8feab022e"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"eb02f0ec929ad81bba09dce23ff6d2030dafcb94","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        self.logger.logger.removeHandler.assert_called_once_with("},{"line_number":175,"context_line":"            self.catcher_handler.return_value)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def test_assertInLogs(self):"},{"line_number":178,"context_line":"        catcher \u003d log.LogCatcher(self.logger)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        self.assertEqual([\"foo\"], catcher.assertInLogs(\"foo\"))"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ad32947_364bd85b","line":177,"updated":"2015-04-27 13:32:04.000000000","message":"should add method \u0027test_assertInLogs_contains\u0027","commit_id":"b954e74005a385e44c1ce769140243f25bf53ee9"}]}
