)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7d3905b9b3b2f8948961a1a90be319f2fd82b913","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     YAMAMOTO Takashi \u003cyamamoto@midokura.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-10-25 16:42:00 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"tempest: Sprinlke extension checks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1727180"},{"line_number":10,"context_line":"Change-Id: Ie8fe87bc4b0b36dcf8b7c042149fbe8658e385b1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f4b6375_0a052614","line":7,"updated":"2017-10-25 13:47:19.000000000","message":"Sprinkle ??","commit_id":"3d8698df5d95b12021390d06f5729bcc630e66db"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"a06a24d15a2483e89689ec9d793aa17d642fdd62","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     YAMAMOTO Takashi \u003cyamamoto@midokura.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-10-25 16:42:00 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"tempest: Sprinlke extension checks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1727180"},{"line_number":10,"context_line":"Change-Id: Ie8fe87bc4b0b36dcf8b7c042149fbe8658e385b1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f4b6375_7167d8ea","line":7,"in_reply_to":"3f4b6375_0a052614","updated":"2017-10-26 04:55:59.000000000","message":"Done","commit_id":"3d8698df5d95b12021390d06f5729bcc630e66db"}],"neutron/tests/tempest/api/admin/test_tag.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bc9eda7fbd7e28fdb594489d604bc0f640d7c5cf","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    resource \u003d \u0027routers\u0027"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @classmethod"},{"line_number":146,"context_line":"    @utils.requires_ext(extension\u003d\"router\", service\u003d\"network\")"},{"line_number":147,"context_line":"    def _create_resource(cls):"},{"line_number":148,"context_line":"        router \u003d cls.create_router(router_name\u003d\u0027test\u0027)"},{"line_number":149,"context_line":"        return router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_fb46e5bf","line":146,"updated":"2017-10-27 06:25:00.000000000","message":"Is there any reason you need to move utils.requires_ext?","commit_id":"907d539df641e684ed29719c863e9665e25a0995"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ad63ff341a71c3a3abaaadf02dc08eeef0aeb0f","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    resource \u003d \u0027routers\u0027"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @classmethod"},{"line_number":146,"context_line":"    @utils.requires_ext(extension\u003d\"router\", service\u003d\"network\")"},{"line_number":147,"context_line":"    def _create_resource(cls):"},{"line_number":148,"context_line":"        router \u003d cls.create_router(router_name\u003d\u0027test\u0027)"},{"line_number":149,"context_line":"        return router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_0dfce06d","line":146,"in_reply_to":"3f4b6375_9b9a5111","updated":"2017-10-27 12:37:14.000000000","message":"it might be. i don\u0027t want to do it in this patch though because this is a gate fix.","commit_id":"907d539df641e684ed29719c863e9665e25a0995"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4131432993f0f41af403764b82e2154ca286ec8d","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    resource \u003d \u0027routers\u0027"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @classmethod"},{"line_number":146,"context_line":"    @utils.requires_ext(extension\u003d\"router\", service\u003d\"network\")"},{"line_number":147,"context_line":"    def _create_resource(cls):"},{"line_number":148,"context_line":"        router \u003d cls.create_router(router_name\u003d\u0027test\u0027)"},{"line_number":149,"context_line":"        return router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_44086ed8","line":146,"in_reply_to":"3f4b6375_edc86455","updated":"2017-10-27 15:16:11.000000000","message":"\u003e _create_resource stuff is called before test_xxx methods.\n\u003e as the extension is used in the former, the check in the latter is too late.\n\nSounds fair.\n\nAfter the first comment, I looked the tempest code and confirm this.\n\n\u003e it might be. i don\u0027t want to do it in this patch though because this is a gate fix.\n\nI am not sure which is better. By using required_extensions we can declare the required extensions as early as possible. \u0027required_extensions\u0027 is checked earlier than _create_resource().\nI am okay with either. we can clean it up in a follow-up patch.","commit_id":"907d539df641e684ed29719c863e9665e25a0995"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"29139d6b93ae8a48750877d5a03b1cf38623176c","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    resource \u003d \u0027routers\u0027"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @classmethod"},{"line_number":146,"context_line":"    @utils.requires_ext(extension\u003d\"router\", service\u003d\"network\")"},{"line_number":147,"context_line":"    def _create_resource(cls):"},{"line_number":148,"context_line":"        router \u003d cls.create_router(router_name\u003d\u0027test\u0027)"},{"line_number":149,"context_line":"        return router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_9b9a5111","line":146,"in_reply_to":"3f4b6375_fb46e5bf","updated":"2017-10-27 06:36:02.000000000","message":"Looking at [1], it looks better to define \u0027required_extensions\u0027.\nThought?\n\n  required_extensions \u003d [\u0027router\u0027, \u0027tag-ext\u0027]\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/tests/tempest/api/base.py#L74-L84","commit_id":"907d539df641e684ed29719c863e9665e25a0995"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ad63ff341a71c3a3abaaadf02dc08eeef0aeb0f","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    resource \u003d \u0027routers\u0027"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @classmethod"},{"line_number":146,"context_line":"    @utils.requires_ext(extension\u003d\"router\", service\u003d\"network\")"},{"line_number":147,"context_line":"    def _create_resource(cls):"},{"line_number":148,"context_line":"        router \u003d cls.create_router(router_name\u003d\u0027test\u0027)"},{"line_number":149,"context_line":"        return router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_edc86455","line":146,"in_reply_to":"3f4b6375_fb46e5bf","updated":"2017-10-27 12:37:14.000000000","message":"_create_resource stuff is called before test_xxx methods.\nas the extension is used in the former, the check in the latter is too late.","commit_id":"907d539df641e684ed29719c863e9665e25a0995"}]}
