)]}'
{".mailmap":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5af318109c225e0c96e5b69d2cb46e9ab94b3d71","unresolved":false,"context_lines":[{"line_number":6,"context_line":"Zhongyue Luo \u003czhongyue.nah@intel.com\u003e \u003clzyeval@gmail.com\u003e"},{"line_number":7,"context_line":"Kun Huang \u003cgareth@unitedstack.com\u003e \u003cacademicgareth@gmail.com\u003e"},{"line_number":8,"context_line":"Zhenguo Niu \u003czhenguo@unitedstack.com\u003e \u003cNiu.ZGlinux@gmail.com\u003e"},{"line_number":9,"context_line":"Isaku Yamahata \u003cisaku.yamahata@intel.com\u003e \u003cisaku.yamahata@gmail.com\u003e"},{"line_number":10,"context_line":"Isaku Yamahata \u003cisaku.yamahata@intel.com\u003e \u003cyamahata@private.email.ne.jp\u003e"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAUX%2F%2F5Kk%3D","line":9,"updated":"2014-02-10 05:34:51.000000000","message":"This should be done as separate change.","commit_id":"4f2f7ee01b74d3e8bf1fe6b15310a4abd9b5ff13"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"5c5ad7b4ee49fe77fabc8d0d4795cf50fb08d4e0","unresolved":false,"context_lines":[{"line_number":6,"context_line":"Zhongyue Luo \u003czhongyue.nah@intel.com\u003e \u003clzyeval@gmail.com\u003e"},{"line_number":7,"context_line":"Kun Huang \u003cgareth@unitedstack.com\u003e \u003cacademicgareth@gmail.com\u003e"},{"line_number":8,"context_line":"Zhenguo Niu \u003czhenguo@unitedstack.com\u003e \u003cNiu.ZGlinux@gmail.com\u003e"},{"line_number":9,"context_line":"Isaku Yamahata \u003cisaku.yamahata@intel.com\u003e \u003cisaku.yamahata@gmail.com\u003e"},{"line_number":10,"context_line":"Isaku Yamahata \u003cisaku.yamahata@intel.com\u003e \u003cyamahata@private.email.ne.jp\u003e"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAUX%2F%2F4ng%3D","line":9,"in_reply_to":"AAAAUX%2F%2F5Kk%3D","updated":"2014-02-10 07:02:07.000000000","message":"Done","commit_id":"4f2f7ee01b74d3e8bf1fe6b15310a4abd9b5ff13"}],"neutron/tests/unit/services/service_api.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4defe255c31bc6cb0dd69e75c4361ead79c55cdc","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class ServiceTestCase(testlib_api.WebTestCase):"},{"line_number":37,"context_line":"    def _setUp(self, plugin, service_type,"},{"line_number":38,"context_line":"               resource_attribute_map, extension_class):"},{"line_number":39,"context_line":"        # Ensure \u0027stale\u0027 patched copies of the plugin are never returned"},{"line_number":40,"context_line":"        manager.NeutronManager._instance \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F92H0%3D","line":37,"updated":"2014-02-03 11:44:19.000000000","message":"The underscore here is because test loader could try to run this method as a setUp? What about setting those parameters as class attributes and having this method as usual setUp()?","commit_id":"4ef1d7b2e19770f1c75a0cd8757401daeac27c7d"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"22627a4073123d7a2c1e7b44883088aff2206d0b","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class ServiceTestCase(testlib_api.WebTestCase):"},{"line_number":37,"context_line":"    def _setUp(self, plugin, service_type,"},{"line_number":38,"context_line":"               resource_attribute_map, extension_class):"},{"line_number":39,"context_line":"        # Ensure \u0027stale\u0027 patched copies of the plugin are never returned"},{"line_number":40,"context_line":"        manager.NeutronManager._instance \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F9rsc%3D","line":37,"in_reply_to":"AAAAUH%2F92H0%3D","updated":"2014-02-05 01:18:02.000000000","message":"Yes, to prevent test loader from running this method.\nAlthough I don\u0027t have strong opinion,\nhow about renaming _setUp to _setUpExtension?","commit_id":"4ef1d7b2e19770f1c75a0cd8757401daeac27c7d"}],"neutron/tests/unit/test_api_v2_extension.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5af318109c225e0c96e5b69d2cb46e9ab94b3d71","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import mock"},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":"import uuid"},{"line_number":26,"context_line":"from webob import exc"},{"line_number":27,"context_line":"import webtest"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2F5Jw%3D","line":25,"updated":"2014-02-10 05:34:51.000000000","message":"This is a module in the standard lib, so the import should before the 3rd party section.","commit_id":"4f2f7ee01b74d3e8bf1fe6b15310a4abd9b5ff13"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"5c5ad7b4ee49fe77fabc8d0d4795cf50fb08d4e0","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import mock"},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":"import uuid"},{"line_number":26,"context_line":"from webob import exc"},{"line_number":27,"context_line":"import webtest"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2F4nA%3D","line":25,"in_reply_to":"AAAAUX%2F%2F5Jw%3D","updated":"2014-02-10 07:02:07.000000000","message":"Done","commit_id":"4f2f7ee01b74d3e8bf1fe6b15310a4abd9b5ff13"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5af318109c225e0c96e5b69d2cb46e9ab94b3d71","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            cfg.CONF.set_override(\u0027allow_pagination\u0027, True)"},{"line_number":71,"context_line":"        if allow_sorting:"},{"line_number":72,"context_line":"            cfg.CONF.set_override(\u0027allow_sorting\u0027, True)"},{"line_number":73,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        self._plugin_patcher \u003d mock.patch(plugin, autospec\u003dTrue)"},{"line_number":76,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2F5H0%3D","line":73,"updated":"2014-02-10 05:34:51.000000000","message":"This already added in neutron/tests/base.py.","commit_id":"4f2f7ee01b74d3e8bf1fe6b15310a4abd9b5ff13"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"5c5ad7b4ee49fe77fabc8d0d4795cf50fb08d4e0","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            cfg.CONF.set_override(\u0027allow_pagination\u0027, True)"},{"line_number":71,"context_line":"        if allow_sorting:"},{"line_number":72,"context_line":"            cfg.CONF.set_override(\u0027allow_sorting\u0027, True)"},{"line_number":73,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        self._plugin_patcher \u003d mock.patch(plugin, autospec\u003dTrue)"},{"line_number":76,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2F4m4%3D","line":73,"in_reply_to":"AAAAUX%2F%2F5H0%3D","updated":"2014-02-10 07:02:07.000000000","message":"Done","commit_id":"4f2f7ee01b74d3e8bf1fe6b15310a4abd9b5ff13"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5af318109c225e0c96e5b69d2cb46e9ab94b3d71","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.api \u003d webtest.TestApp(self.ext_mdw)"},{"line_number":112,"context_line":"        super(ExtensionTestCase, self).setUp()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        self.addCleanup(self._plugin_patcher.stop)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        if use_quota:"},{"line_number":117,"context_line":"            quota.QUOTAS._driver \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2F5Is%3D","line":114,"updated":"2014-02-10 05:34:51.000000000","message":"Why not just use stopall() here?","commit_id":"4f2f7ee01b74d3e8bf1fe6b15310a4abd9b5ff13"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"5c5ad7b4ee49fe77fabc8d0d4795cf50fb08d4e0","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.api \u003d webtest.TestApp(self.ext_mdw)"},{"line_number":112,"context_line":"        super(ExtensionTestCase, self).setUp()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        self.addCleanup(self._plugin_patcher.stop)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        if use_quota:"},{"line_number":117,"context_line":"            quota.QUOTAS._driver \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2F4mg%3D","line":114,"in_reply_to":"AAAAUX%2F%2F5Is%3D","updated":"2014-02-10 07:02:07.000000000","message":"Done","commit_id":"4f2f7ee01b74d3e8bf1fe6b15310a4abd9b5ff13"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"807ff2be485b7239d2939307417a899dc2dffcfd","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.api \u003d webtest.TestApp(self.ext_mdw)"},{"line_number":110,"context_line":"        super(ExtensionTestCase, self).setUp()"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self.addCleanup(self._plugin_patcher.stopall)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        if use_quota:"},{"line_number":115,"context_line":"            quota.QUOTAS._driver \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2F4iM%3D","line":112,"updated":"2014-02-10 07:11:06.000000000","message":"I think Mark meant \nself.addCleanup(mock.patch.stopall)","commit_id":"872c9029239d05713e6db58c9bcc94df69c52c44"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f75b27217579a4e1c8386f287f11d5af92ffc60f","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.api \u003d webtest.TestApp(self.ext_mdw)"},{"line_number":110,"context_line":"        super(ExtensionTestCase, self).setUp()"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self.addCleanup(self._plugin_patcher.stopall)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        if use_quota:"},{"line_number":115,"context_line":"            quota.QUOTAS._driver \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2F4RE%3D","line":112,"in_reply_to":"AAAAUX%2F%2F4iM%3D","updated":"2014-02-10 08:01:55.000000000","message":"Done","commit_id":"872c9029239d05713e6db58c9bcc94df69c52c44"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e0f4d4fe44906f14b5d0a535b64459261148d29b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            cfg.CONF.set_override(\u0027allow_pagination\u0027, True)"},{"line_number":71,"context_line":"        if allow_sorting:"},{"line_number":72,"context_line":"            cfg.CONF.set_override(\u0027allow_sorting\u0027, True)"},{"line_number":73,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        self._plugin_patcher \u003d mock.patch(plugin, autospec\u003dTrue)"},{"line_number":76,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2FFek%3D","line":73,"updated":"2014-02-17 08:24:33.000000000","message":"not needed, BaseTestCase has it in setUp()","commit_id":"6aa372e5ba3cb58137443a08b2eb7a9b2ad8a57a"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"c768ad6736073aeadfb4a826c8337e5bdf15c8b9","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            cfg.CONF.set_override(\u0027allow_pagination\u0027, True)"},{"line_number":71,"context_line":"        if allow_sorting:"},{"line_number":72,"context_line":"            cfg.CONF.set_override(\u0027allow_sorting\u0027, True)"},{"line_number":73,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        self._plugin_patcher \u003d mock.patch(plugin, autospec\u003dTrue)"},{"line_number":76,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2FEsQ%3D","line":73,"in_reply_to":"AAAAUX%2F%2FFek%3D","updated":"2014-02-17 10:04:04.000000000","message":"Oops, sorry. I seemed to push the wrong branch somehow during rebase.\nWill check the correct branch.\n\nDone","commit_id":"6aa372e5ba3cb58137443a08b2eb7a9b2ad8a57a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e0f4d4fe44906f14b5d0a535b64459261148d29b","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.api \u003d webtest.TestApp(self.ext_mdw)"},{"line_number":112,"context_line":"        super(ExtensionTestCase, self).setUp()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        self.addCleanup(self._plugin_patcher.stop)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        if use_quota:"},{"line_number":117,"context_line":"            quota.QUOTAS._driver \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2FFdM%3D","line":114,"updated":"2014-02-17 08:24:33.000000000","message":"why reverting the fix for Mark\u0027s comment on PS4?","commit_id":"6aa372e5ba3cb58137443a08b2eb7a9b2ad8a57a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c61016704034edf190daf28ef991b75e623cb44d","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if service_type:"},{"line_number":67,"context_line":"            cfg.CONF.set_override(\u0027service_plugins\u0027, [plugin])"},{"line_number":68,"context_line":"        if allow_pagination:"},{"line_number":69,"context_line":"            cfg.CONF.set_override(\u0027allow_pagination\u0027, True)"},{"line_number":70,"context_line":"        if allow_sorting:"},{"line_number":71,"context_line":"            cfg.CONF.set_override(\u0027allow_sorting\u0027, True)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUX%2F%2B30Y%3D","line":69,"updated":"2014-02-18 14:06:03.000000000","message":"Can this be moved to line 81?","commit_id":"7b46d71a3655f4eba41abce3719f58bb2224365d"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"c97d0447db23addf66bf5c51951ce086f7b652b2","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if service_type:"},{"line_number":67,"context_line":"            cfg.CONF.set_override(\u0027service_plugins\u0027, [plugin])"},{"line_number":68,"context_line":"        if allow_pagination:"},{"line_number":69,"context_line":"            cfg.CONF.set_override(\u0027allow_pagination\u0027, True)"},{"line_number":70,"context_line":"        if allow_sorting:"},{"line_number":71,"context_line":"            cfg.CONF.set_override(\u0027allow_sorting\u0027, True)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUX%2F%2BvXI%3D","line":69,"in_reply_to":"AAAAUX%2F%2B30Y%3D","updated":"2014-02-19 12:37:28.000000000","message":"Done","commit_id":"7b46d71a3655f4eba41abce3719f58bb2224365d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c61016704034edf190daf28ef991b75e623cb44d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        if allow_pagination:"},{"line_number":69,"context_line":"            cfg.CONF.set_override(\u0027allow_pagination\u0027, True)"},{"line_number":70,"context_line":"        if allow_sorting:"},{"line_number":71,"context_line":"            cfg.CONF.set_override(\u0027allow_sorting\u0027, True)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        self._plugin_patcher \u003d mock.patch(plugin, autospec\u003dTrue)"},{"line_number":74,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUX%2F%2B3zA%3D","line":71,"updated":"2014-02-18 14:06:03.000000000","message":"Same here to line 86","commit_id":"7b46d71a3655f4eba41abce3719f58bb2224365d"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"c97d0447db23addf66bf5c51951ce086f7b652b2","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        if allow_pagination:"},{"line_number":69,"context_line":"            cfg.CONF.set_override(\u0027allow_pagination\u0027, True)"},{"line_number":70,"context_line":"        if allow_sorting:"},{"line_number":71,"context_line":"            cfg.CONF.set_override(\u0027allow_sorting\u0027, True)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        self._plugin_patcher \u003d mock.patch(plugin, autospec\u003dTrue)"},{"line_number":74,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUX%2F%2BvXE%3D","line":71,"in_reply_to":"AAAAUX%2F%2B3zA%3D","updated":"2014-02-19 12:37:28.000000000","message":"Done","commit_id":"7b46d71a3655f4eba41abce3719f58bb2224365d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c61016704034edf190daf28ef991b75e623cb44d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        ext_mgr \u003d ExtensionTestExtensionManager()"},{"line_number":108,"context_line":"        self.ext_mdw \u003d test_extensions.setup_extensions_middleware(ext_mgr)"},{"line_number":109,"context_line":"        self.api \u003d webtest.TestApp(self.ext_mdw)"},{"line_number":110,"context_line":"        super(ExtensionTestCase, self).setUp()"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUX%2F%2B4DY%3D","line":110,"updated":"2014-02-18 14:06:03.000000000","message":"Is there a reason that super is called here or it doesn\u0027t matter?","commit_id":"7b46d71a3655f4eba41abce3719f58bb2224365d"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"c97d0447db23addf66bf5c51951ce086f7b652b2","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        ext_mgr \u003d ExtensionTestExtensionManager()"},{"line_number":108,"context_line":"        self.ext_mdw \u003d test_extensions.setup_extensions_middleware(ext_mgr)"},{"line_number":109,"context_line":"        self.api \u003d webtest.TestApp(self.ext_mdw)"},{"line_number":110,"context_line":"        super(ExtensionTestCase, self).setUp()"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUX%2F%2BvXA%3D","line":110,"in_reply_to":"AAAAUX%2F%2B4DY%3D","updated":"2014-02-19 12:37:28.000000000","message":"Done\n\nNo special reason, I just followed the original code.\nMove it up.","commit_id":"7b46d71a3655f4eba41abce3719f58bb2224365d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5735fb29a8ca6f16258cbbc0ff0775a67a2aaa19","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Restore the global RESOURCE_ATTRIBUTE_MAP"},{"line_number":59,"context_line":"        def resotre_attr_map():"},{"line_number":60,"context_line":"            attributes.RESOURCE_ATTRIBUTE_MAP \u003d self._saved_attr_map"},{"line_number":61,"context_line":"        self.addCleanup(resotre_attr_map)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # Create the default configurations"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BvLY%3D","line":60,"updated":"2014-02-19 13:12:56.000000000","message":"Why is it defined in a method?","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"1033a0382ba6a614500c4a43a30a95d1e0df3fa3","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Restore the global RESOURCE_ATTRIBUTE_MAP"},{"line_number":59,"context_line":"        def resotre_attr_map():"},{"line_number":60,"context_line":"            attributes.RESOURCE_ATTRIBUTE_MAP \u003d self._saved_attr_map"},{"line_number":61,"context_line":"        self.addCleanup(resotre_attr_map)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # Create the default configurations"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BoR8%3D","line":60,"in_reply_to":"AAAAUX%2F%2BvLY%3D","updated":"2014-02-20 05:17:50.000000000","message":"Done","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5735fb29a8ca6f16258cbbc0ff0775a67a2aaa19","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # Restore the global RESOURCE_ATTRIBUTE_MAP"},{"line_number":59,"context_line":"        def resotre_attr_map():"},{"line_number":60,"context_line":"            attributes.RESOURCE_ATTRIBUTE_MAP \u003d self._saved_attr_map"},{"line_number":61,"context_line":"        self.addCleanup(resotre_attr_map)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # Create the default configurations"},{"line_number":64,"context_line":"        args \u003d [\u0027--config-file\u0027, test_api_v2.etcdir(\u0027neutron.conf.test\u0027)]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BvLc%3D","line":61,"updated":"2014-02-19 13:12:56.000000000","message":"type: restore_attr_map","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"1033a0382ba6a614500c4a43a30a95d1e0df3fa3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # Restore the global RESOURCE_ATTRIBUTE_MAP"},{"line_number":59,"context_line":"        def resotre_attr_map():"},{"line_number":60,"context_line":"            attributes.RESOURCE_ATTRIBUTE_MAP \u003d self._saved_attr_map"},{"line_number":61,"context_line":"        self.addCleanup(resotre_attr_map)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # Create the default configurations"},{"line_number":64,"context_line":"        args \u003d [\u0027--config-file\u0027, test_api_v2.etcdir(\u0027neutron.conf.test\u0027)]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BoR4%3D","line":61,"in_reply_to":"AAAAUX%2F%2BvLc%3D","updated":"2014-02-20 05:17:50.000000000","message":"Done","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5735fb29a8ca6f16258cbbc0ff0775a67a2aaa19","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        instance \u003d self.plugin.return_value"},{"line_number":75,"context_line":"        if service_type:"},{"line_number":76,"context_line":"            instance.get_plugin_type.return_value \u003d service_type"},{"line_number":77,"context_line":"        if supported_extension_aliases:"},{"line_number":78,"context_line":"            instance.supported_extension_aliases \u003d supported_extension_aliases"},{"line_number":79,"context_line":"        if allow_pagination:"},{"line_number":80,"context_line":"            cfg.CONF.set_override(\u0027allow_pagination\u0027, True)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BvKo%3D","line":77,"updated":"2014-02-19 13:12:56.000000000","message":"I think it is better to compare it with None explicitly. extension aliasses is a list and there is a case where an empty list is passed.","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"1033a0382ba6a614500c4a43a30a95d1e0df3fa3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        instance \u003d self.plugin.return_value"},{"line_number":75,"context_line":"        if service_type:"},{"line_number":76,"context_line":"            instance.get_plugin_type.return_value \u003d service_type"},{"line_number":77,"context_line":"        if supported_extension_aliases:"},{"line_number":78,"context_line":"            instance.supported_extension_aliases \u003d supported_extension_aliases"},{"line_number":79,"context_line":"        if allow_pagination:"},{"line_number":80,"context_line":"            cfg.CONF.set_override(\u0027allow_pagination\u0027, True)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BoRs%3D","line":77,"in_reply_to":"AAAAUX%2F%2BvKo%3D","updated":"2014-02-20 05:17:50.000000000","message":"Done","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5735fb29a8ca6f16258cbbc0ff0775a67a2aaa19","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            cfg.CONF.set_override(\u0027quota_driver\u0027, \u0027neutron.quota.ConfDriver\u0027,"},{"line_number":94,"context_line":"                                  group\u003d\u0027QUOTAS\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        class ExtensionTestExtensionManager(object):"},{"line_number":97,"context_line":"            def get_resources(self):"},{"line_number":98,"context_line":"                # Add the resources to the global attribute map"},{"line_number":99,"context_line":"                # This is done here as the setup process won\u0027t"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BvLU%3D","line":96,"updated":"2014-02-19 13:12:56.000000000","message":"Why it is defined inside a class?","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"1033a0382ba6a614500c4a43a30a95d1e0df3fa3","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            cfg.CONF.set_override(\u0027quota_driver\u0027, \u0027neutron.quota.ConfDriver\u0027,"},{"line_number":94,"context_line":"                                  group\u003d\u0027QUOTAS\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        class ExtensionTestExtensionManager(object):"},{"line_number":97,"context_line":"            def get_resources(self):"},{"line_number":98,"context_line":"                # Add the resources to the global attribute map"},{"line_number":99,"context_line":"                # This is done here as the setup process won\u0027t"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BoRY%3D","line":96,"in_reply_to":"AAAAUX%2F%2BvLU%3D","updated":"2014-02-20 05:17:50.000000000","message":"Because it refers the argument, resource_attribute_map. It needs to be defined in this method.","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5735fb29a8ca6f16258cbbc0ff0775a67a2aaa19","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def tearDown(self):"},{"line_number":117,"context_line":"        self.api \u003d None"},{"line_number":118,"context_line":"        self.plugin \u003d None"},{"line_number":119,"context_line":"        super(ExtensionTestCase, self).tearDown()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _test_entity_delete(self, entity, path_prefix,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BvMo%3D","line":118,"updated":"2014-02-19 13:12:56.000000000","message":"I wonder why these are needed here. They are assigned in setUp, so if I understand correctly they are unnecessary. Could you explain why?","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"1033a0382ba6a614500c4a43a30a95d1e0df3fa3","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def tearDown(self):"},{"line_number":117,"context_line":"        self.api \u003d None"},{"line_number":118,"context_line":"        self.plugin \u003d None"},{"line_number":119,"context_line":"        super(ExtensionTestCase, self).tearDown()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _test_entity_delete(self, entity, path_prefix,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BoQ4%3D","line":118,"in_reply_to":"AAAAUX%2F%2BvMo%3D","updated":"2014-02-20 05:17:50.000000000","message":"Okay, I\u0027ll remove them.\nSince the original code has it, hesitated to remove it.","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5735fb29a8ca6f16258cbbc0ff0775a67a2aaa19","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        super(ExtensionTestCase, self).tearDown()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _test_entity_delete(self, entity, path_prefix,"},{"line_number":122,"context_line":"                            path_map\u003dNone, translate_name\u003dFalse):"},{"line_number":123,"context_line":"        \"\"\"Does the entity deletion based on naming convention.\"\"\""},{"line_number":124,"context_line":"        entity_id \u003d str(uuid.uuid4())"},{"line_number":125,"context_line":"        path_map \u003d path_map or {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BvG4%3D","line":122,"updated":"2014-02-19 13:12:56.000000000","message":"Can\u0027t we pass path_perfix, path_map and translate_name in setUp()?\nAt now they only needed for delete, but they are not specific to delete.\nIf so, subclasses do not need to override the method.","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"b2e927041766401c2329367a53e88558bc45207d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        super(ExtensionTestCase, self).tearDown()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _test_entity_delete(self, entity, path_prefix,"},{"line_number":122,"context_line":"                            path_map\u003dNone, translate_name\u003dFalse):"},{"line_number":123,"context_line":"        \"\"\"Does the entity deletion based on naming convention.\"\"\""},{"line_number":124,"context_line":"        entity_id \u003d str(uuid.uuid4())"},{"line_number":125,"context_line":"        path_map \u003d path_map or {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2BmZc%3D","line":122,"in_reply_to":"AAAAUX%2F%2BvG4%3D","updated":"2014-02-20 09:19:26.000000000","message":"Done","commit_id":"03a67fcb926eb4b19690525d889c1eb0273fb7e4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"894b31c200c4cf9ab9f06a2fc344b2eb120dbfe4","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        \"\"\"Does the entity deletion based on naming convention.\"\"\""},{"line_number":119,"context_line":"        entity_id \u003d str(uuid.uuid4())"},{"line_number":120,"context_line":"        path \u003d \u0027%s/%s\u0027 % (self._resource_prefix,"},{"line_number":121,"context_line":"                          self._plural_mappings.get(entity, entity + \u0027s\u0027))"},{"line_number":122,"context_line":"        if self._translate_resource_name:"},{"line_number":123,"context_line":"            path \u003d path.replace(\u0027_\u0027, \u0027-\u0027)"},{"line_number":124,"context_line":"        res \u003d self.api.delete("}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUX%2F%2BbW4%3D","line":121,"updated":"2014-02-21 07:51:10.000000000","message":"If resource_prefix is not empty, it will be lilke \u0027lb/firewalls\u0027. On the other hand, resource prefix is empty string, path will be \u0027/routers\u0027. It is inconsistent.","commit_id":"e21a597d9fd051aad0b750ef24a33ca2455fc411"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"4e32c15cc80d677975292c3fc5c7952896b5166b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        \"\"\"Does the entity deletion based on naming convention.\"\"\""},{"line_number":119,"context_line":"        entity_id \u003d str(uuid.uuid4())"},{"line_number":120,"context_line":"        path \u003d \u0027%s/%s\u0027 % (self._resource_prefix,"},{"line_number":121,"context_line":"                          self._plural_mappings.get(entity, entity + \u0027s\u0027))"},{"line_number":122,"context_line":"        if self._translate_resource_name:"},{"line_number":123,"context_line":"            path \u003d path.replace(\u0027_\u0027, \u0027-\u0027)"},{"line_number":124,"context_line":"        res \u003d self.api.delete("}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUX%2F%2Ba2E%3D","line":121,"in_reply_to":"AAAAUX%2F%2BbW4%3D","updated":"2014-02-21 09:10:20.000000000","message":"Done","commit_id":"e21a597d9fd051aad0b750ef24a33ca2455fc411"}]}
