)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"da1ed1667e4d5c5b21865361311e2da17faed91a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Isaku Yamahata \u003cisaku.yamahata@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-12-02 11:31:46 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"neutron command: automatically add log to NeutronCommand"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"It is a common pattern to add"},{"line_number":10,"context_line":"class XXXCommand(NeutronCommand):"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAATn%2F%2BIxg%3D","line":7,"updated":"2013-12-02 05:31:58.000000000","message":"I would suggest \"setup logger name of NeutronCommand automatically\".\n\n\"neutron command\" at BOL and NeutronCommand at EOL are duplicated.","commit_id":"00e2ac7e850b9a1284dd8134957931cfa94aa8e7"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"476009b9635e3017721cb26785808118d5b769e5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Isaku Yamahata \u003cisaku.yamahata@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-12-02 11:31:46 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"neutron command: automatically add log to NeutronCommand"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"It is a common pattern to add"},{"line_number":10,"context_line":"class XXXCommand(NeutronCommand):"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAATn%2F%2BIc0%3D","line":7,"in_reply_to":"AAAATn%2F%2BIxg%3D","updated":"2013-12-02 07:47:15.000000000","message":"Done","commit_id":"00e2ac7e850b9a1284dd8134957931cfa94aa8e7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a8ad546b45dcc8db619f32e5fc4b9d515547098","unresolved":false,"context_lines":[{"line_number":12,"context_line":"So introduce a metaclass to do that automatically in order to simplify"},{"line_number":13,"context_line":"the code a bit."},{"line_number":14,"context_line":"The lines were deleted by"},{"line_number":15,"context_line":"sed -i \u0027/ log \u003d logging.getLogger(__name__ + /d\u0027 **/*.py"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I7908e3e2c0f3f04d9e57360f6ba22e153d0d35bd"},{"line_number":18,"context_line":"Signed-off-by: Isaku Yamahata \u003cisaku.yamahata@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F98HY%3D","line":15,"updated":"2013-12-04 08:43:52.000000000","message":"L.14-15 no longer looks correct. How about deleting it?","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a09ab02fb4b8a67c990288396db1b495aa4990e8","unresolved":false,"context_lines":[{"line_number":12,"context_line":"So introduce a metaclass to do that automatically in order to simplify"},{"line_number":13,"context_line":"the code a bit."},{"line_number":14,"context_line":"The lines were deleted by"},{"line_number":15,"context_line":"sed -i \u0027/ log \u003d logging.getLogger(__name__ + /d\u0027 **/*.py"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I7908e3e2c0f3f04d9e57360f6ba22e153d0d35bd"},{"line_number":18,"context_line":"Signed-off-by: Isaku Yamahata \u003cisaku.yamahata@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F93G0%3D","line":15,"in_reply_to":"AAAATn%2F98HY%3D","updated":"2013-12-05 06:29:45.000000000","message":"Done","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a8ad546b45dcc8db619f32e5fc4b9d515547098","unresolved":false,"context_lines":[{"line_number":13,"context_line":"the code a bit."},{"line_number":14,"context_line":"The lines were deleted by"},{"line_number":15,"context_line":"sed -i \u0027/ log \u003d logging.getLogger(__name__ + /d\u0027 **/*.py"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I7908e3e2c0f3f04d9e57360f6ba22e153d0d35bd"},{"line_number":18,"context_line":"Signed-off-by: Isaku Yamahata \u003cisaku.yamahata@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F98HU%3D","line":16,"updated":"2013-12-04 08:43:52.000000000","message":"I hope we have a reference to some bug or bp.","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a09ab02fb4b8a67c990288396db1b495aa4990e8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"the code a bit."},{"line_number":14,"context_line":"The lines were deleted by"},{"line_number":15,"context_line":"sed -i \u0027/ log \u003d logging.getLogger(__name__ + /d\u0027 **/*.py"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I7908e3e2c0f3f04d9e57360f6ba22e153d0d35bd"},{"line_number":18,"context_line":"Signed-off-by: Isaku Yamahata \u003cisaku.yamahata@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F93G4%3D","line":16,"in_reply_to":"AAAATn%2F98HU%3D","updated":"2013-12-05 06:29:45.000000000","message":"Done","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"}],"neutronclient/neutron/v2_0/__init__.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"69a4d53c1d137c7fbaca436abf452ee1fc838221","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            stdout.write(\u0027\\n\u0027)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"class NeutronCommandMeta(abc.ABCMeta):"},{"line_number":339,"context_line":"    def __new__(cls, name, bases, cls_dict):"},{"line_number":340,"context_line":"        if \u0027log\u0027 not in cls_dict:"},{"line_number":341,"context_line":"            cls_dict[\u0027log\u0027] \u003d logging.getLogger("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2Bq6I%3D","line":338,"updated":"2014-02-19 21:40:05.000000000","message":"Why does this need to inherit from abc.ABCMeta?  The proper parent is type.","commit_id":"0e54110fadfe448605a32f7a96975acc1c2ca6b3"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f4bd78f8b3b367c11e58ac444a8260e20707b52b","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            stdout.write(\u0027\\n\u0027)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"class NeutronCommandMeta(abc.ABCMeta):"},{"line_number":339,"context_line":"    def __new__(cls, name, bases, cls_dict):"},{"line_number":340,"context_line":"        if \u0027log\u0027 not in cls_dict:"},{"line_number":341,"context_line":"            cls_dict[\u0027log\u0027] \u003d logging.getLogger("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2BpEM%3D","line":338,"in_reply_to":"AAAAUX%2F%2Bq6I%3D","updated":"2014-02-20 02:29:26.000000000","message":"Because the class OpenStackCommand is already abstract class, it means it has a metaclass.\npython requires that metaclass must be subclass of the metaclasses of all its superclasses. Otherwise metaclass conflict as follows.\n\n\u003e TypeError: metaclass conflict: the metaclass of a derived class must\n\u003e    be a (non-strict) subclass of the metaclasses of all its bases","commit_id":"0e54110fadfe448605a32f7a96975acc1c2ca6b3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b717415ce4988ca95dde7bcc204dbe5248cf5620","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import argparse"},{"line_number":21,"context_line":"import logging"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"import six"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cliff.formatters import table"},{"line_number":26,"context_line":"from cliff import lister"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAWH%2F9SAA%3D","line":23,"updated":"2014-04-07 12:59:45.000000000","message":"Minor nit: six is third party....","commit_id":"de6217ef82c901e0046dc0291cc8e29a4c568e06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"b62c34bfeab37278bb5916c8f752c0fd22659eae","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import argparse"},{"line_number":21,"context_line":"import logging"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"import six"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cliff.formatters import table"},{"line_number":26,"context_line":"from cliff import lister"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAWn%2F%2F%2Fk8%3D","line":23,"in_reply_to":"AAAAWH%2F9SAA%3D","updated":"2014-04-08 02:25:46.000000000","message":"Done","commit_id":"de6217ef82c901e0046dc0291cc8e29a4c568e06"}],"neutronclient/tests/unit/test_command_meta.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a8ad546b45dcc8db619f32e5fc4b9d515547098","unresolved":false,"context_lines":[{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"# @author: Isaku Yamahata, Intel"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import logging"},{"line_number":22,"context_line":"import testtools"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F98HE%3D","line":21,"updated":"2013-12-04 08:43:52.000000000","message":"Need a blank line here","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a09ab02fb4b8a67c990288396db1b495aa4990e8","unresolved":false,"context_lines":[{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"# @author: Isaku Yamahata, Intel"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import logging"},{"line_number":22,"context_line":"import testtools"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F93Go%3D","line":21,"in_reply_to":"AAAATn%2F98HE%3D","updated":"2013-12-05 06:29:45.000000000","message":"Done","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a8ad546b45dcc8db619f32e5fc4b9d515547098","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import logging"},{"line_number":22,"context_line":"import testtools"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from neutronclient.neutron import v2_0 as neutronV20"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F98HI%3D","line":23,"updated":"2013-12-04 08:43:52.000000000","message":"Need only one blank line here.","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a09ab02fb4b8a67c990288396db1b495aa4990e8","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import logging"},{"line_number":22,"context_line":"import testtools"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from neutronclient.neutron import v2_0 as neutronV20"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F93Gk%3D","line":23,"in_reply_to":"AAAATn%2F98HI%3D","updated":"2013-12-05 06:29:45.000000000","message":"Done","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a8ad546b45dcc8db619f32e5fc4b9d515547098","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TestCommandMeta(testtools.TestCase):"},{"line_number":29,"context_line":"    def test_neutron_cmmand_meta_add(self):"},{"line_number":30,"context_line":"        class FakeCommand(neutronV20.NeutronCommand):"},{"line_number":31,"context_line":"            pass"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F98E8%3D","line":29,"updated":"2013-12-04 08:43:52.000000000","message":"typo: command\n\nI prefer to test_neutron_command_meta_defines_log as a method name.","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a09ab02fb4b8a67c990288396db1b495aa4990e8","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TestCommandMeta(testtools.TestCase):"},{"line_number":29,"context_line":"    def test_neutron_cmmand_meta_add(self):"},{"line_number":30,"context_line":"        class FakeCommand(neutronV20.NeutronCommand):"},{"line_number":31,"context_line":"            pass"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F93GY%3D","line":29,"in_reply_to":"AAAATn%2F98E8%3D","updated":"2013-12-05 06:29:45.000000000","message":"Done","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a8ad546b45dcc8db619f32e5fc4b9d515547098","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        class FakeCommand(neutronV20.NeutronCommand):"},{"line_number":31,"context_line":"            pass"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self.assertTrue(hasattr(FakeCommand, \u0027log\u0027))"},{"line_number":34,"context_line":"        self.assertTrue(isinstance(FakeCommand.log, logging.getLoggerClass()))"},{"line_number":35,"context_line":"        self.assertEqual(FakeCommand.log.name, __name__ + \".FakeCommand\")"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F98Fk%3D","line":33,"updated":"2013-12-04 08:43:52.000000000","message":"How about using safe_hasattr?\n\nhttp://testtools.readthedocs.org/en/latest/for-test-authors.html#safe-attribute-testing","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a09ab02fb4b8a67c990288396db1b495aa4990e8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        class FakeCommand(neutronV20.NeutronCommand):"},{"line_number":31,"context_line":"            pass"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self.assertTrue(hasattr(FakeCommand, \u0027log\u0027))"},{"line_number":34,"context_line":"        self.assertTrue(isinstance(FakeCommand.log, logging.getLoggerClass()))"},{"line_number":35,"context_line":"        self.assertEqual(FakeCommand.log.name, __name__ + \".FakeCommand\")"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F92%2Bw%3D","line":33,"in_reply_to":"AAAATn%2F98Fk%3D","updated":"2013-12-05 06:29:45.000000000","message":"Done","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a8ad546b45dcc8db619f32e5fc4b9d515547098","unresolved":false,"context_lines":[{"line_number":31,"context_line":"            pass"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self.assertTrue(hasattr(FakeCommand, \u0027log\u0027))"},{"line_number":34,"context_line":"        self.assertTrue(isinstance(FakeCommand.log, logging.getLoggerClass()))"},{"line_number":35,"context_line":"        self.assertEqual(FakeCommand.log.name, __name__ + \".FakeCommand\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_neutron_cmmand_meta_noadd(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F98GM%3D","line":34,"updated":"2013-12-04 08:43:52.000000000","message":"Consider:\n\n  self.assertThat(FakeCommand.log, matchers.IsInstance(logging.getLoggerClass()))","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a09ab02fb4b8a67c990288396db1b495aa4990e8","unresolved":false,"context_lines":[{"line_number":31,"context_line":"            pass"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self.assertTrue(hasattr(FakeCommand, \u0027log\u0027))"},{"line_number":34,"context_line":"        self.assertTrue(isinstance(FakeCommand.log, logging.getLoggerClass()))"},{"line_number":35,"context_line":"        self.assertEqual(FakeCommand.log.name, __name__ + \".FakeCommand\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_neutron_cmmand_meta_noadd(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F929A%3D","line":34,"in_reply_to":"AAAATn%2F98GM%3D","updated":"2013-12-05 06:29:45.000000000","message":"used assertIsInstance()","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a8ad546b45dcc8db619f32e5fc4b9d515547098","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.assertTrue(isinstance(FakeCommand.log, logging.getLoggerClass()))"},{"line_number":35,"context_line":"        self.assertEqual(FakeCommand.log.name, __name__ + \".FakeCommand\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_neutron_cmmand_meta_noadd(self):"},{"line_number":38,"context_line":"        class FakeCommand(neutronV20.NeutronCommand):"},{"line_number":39,"context_line":"            log \u003d None"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F98Ek%3D","line":37,"updated":"2013-12-04 08:43:52.000000000","message":"how about test_neutron_command_log_defined_explicitly as a method name?","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a09ab02fb4b8a67c990288396db1b495aa4990e8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.assertTrue(isinstance(FakeCommand.log, logging.getLoggerClass()))"},{"line_number":35,"context_line":"        self.assertEqual(FakeCommand.log.name, __name__ + \".FakeCommand\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_neutron_cmmand_meta_noadd(self):"},{"line_number":38,"context_line":"        class FakeCommand(neutronV20.NeutronCommand):"},{"line_number":39,"context_line":"            log \u003d None"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F92%2Bk%3D","line":37,"in_reply_to":"AAAATn%2F98Ek%3D","updated":"2013-12-05 06:29:45.000000000","message":"Done","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a8ad546b45dcc8db619f32e5fc4b9d515547098","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        class FakeCommand(neutronV20.NeutronCommand):"},{"line_number":39,"context_line":"            log \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.assertTrue(hasattr(FakeCommand, \u0027log\u0027))"},{"line_number":42,"context_line":"        self.assertTrue(FakeCommand.log is None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F98Fc%3D","line":41,"updated":"2013-12-04 08:43:52.000000000","message":"Same as the above.","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a09ab02fb4b8a67c990288396db1b495aa4990e8","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        class FakeCommand(neutronV20.NeutronCommand):"},{"line_number":39,"context_line":"            log \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.assertTrue(hasattr(FakeCommand, \u0027log\u0027))"},{"line_number":42,"context_line":"        self.assertTrue(FakeCommand.log is None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F92%2Bg%3D","line":41,"in_reply_to":"AAAATn%2F98Fc%3D","updated":"2013-12-05 06:29:45.000000000","message":"Done","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a8ad546b45dcc8db619f32e5fc4b9d515547098","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            log \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.assertTrue(hasattr(FakeCommand, \u0027log\u0027))"},{"line_number":42,"context_line":"        self.assertTrue(FakeCommand.log is None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F98G4%3D","line":42,"updated":"2013-12-04 08:43:52.000000000","message":"assertIsNone(FakeCommand.log)","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a09ab02fb4b8a67c990288396db1b495aa4990e8","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            log \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.assertTrue(hasattr(FakeCommand, \u0027log\u0027))"},{"line_number":42,"context_line":"        self.assertTrue(FakeCommand.log is None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F929U%3D","line":42,"in_reply_to":"AAAATn%2F98G4%3D","updated":"2013-12-05 06:29:45.000000000","message":"Done","commit_id":"cea9b498f0ba778deb70372e39ce9eb9c68c6f20"}]}
