)]}'
{"tempest/hacking/checks.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"f1ea7cb46f55612d331e98f20a51dd2934331d76","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def service_tags_not_in_module_path(physical_line, filename):"},{"line_number":79,"context_line":"    \"\"\"Check that a service tag doesn\u0027t isn\u0027t in the module path"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    A service tag should only be added if the service name isn\u0027t already in"},{"line_number":82,"context_line":"    the module path."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2F%2FRo%3D","line":79,"updated":"2014-04-09 01:36:46.000000000","message":"nit - missing \"exist\"?","commit_id":"e3bf20e4d52b59f7aaa32c4fad22def3d2363845"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"0bbba11295df953313c3e3bc902c1d5f752e69c1","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def service_tags_not_in_module_path(physical_line, filename):"},{"line_number":79,"context_line":"    \"\"\"Check that a service tag doesn\u0027t isn\u0027t in the module path"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    A service tag should only be added if the service name isn\u0027t already in"},{"line_number":82,"context_line":"    the module path."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2F458%3D","line":79,"in_reply_to":"AAAAW3%2F%2F%2FRo%3D","updated":"2014-04-09 17:16:16.000000000","message":"I should really read the comments before I push things out :)","commit_id":"e3bf20e4d52b59f7aaa32c4fad22def3d2363845"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"f1ea7cb46f55612d331e98f20a51dd2934331d76","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        services \u003d matches.group(1).split(\u0027,\u0027)"},{"line_number":89,"context_line":"        for service in services:"},{"line_number":90,"context_line":"            service_name \u003d service.strip().strip(\"\u0027\")"},{"line_number":91,"context_line":"            if service_name in filename:"},{"line_number":92,"context_line":"                return (physical_line.find(service_name),"},{"line_number":93,"context_line":"                        \"T107: service tag should not in path\")"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2F%2FQg%3D","line":91,"updated":"2014-04-09 01:36:46.000000000","message":"so doesn\u0027t this mean that we\u0027ll also match say compute with a filename that not_compute in it? Should we break the filename into components and only look for exact matches?","commit_id":"e3bf20e4d52b59f7aaa32c4fad22def3d2363845"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"0bbba11295df953313c3e3bc902c1d5f752e69c1","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        services \u003d matches.group(1).split(\u0027,\u0027)"},{"line_number":89,"context_line":"        for service in services:"},{"line_number":90,"context_line":"            service_name \u003d service.strip().strip(\"\u0027\")"},{"line_number":91,"context_line":"            if service_name in filename:"},{"line_number":92,"context_line":"                return (physical_line.find(service_name),"},{"line_number":93,"context_line":"                        \"T107: service tag should not in path\")"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2F44g%3D","line":91,"in_reply_to":"AAAAW3%2F%2F%2Bko%3D","updated":"2014-04-09 17:16:16.000000000","message":"So my concern with doing the exact match is the plural vs singular naming. It tends not to be the most consistent thing. The service tag is singular, which makes sense I think, but the directory names are sometimes plural. I\u0027ll redo this by dropping the filename from the check. Although for that example you brought up it shouldn\u0027t have a compute service tag in it right? Because, it\u0027s no compute.\n\nZhi Kun Liu: That actually isn\u0027t broad enough. For example what if the path is:\ntempest/api/compute/images? We don\u0027t want to allow an image service tag in this case.","commit_id":"e3bf20e4d52b59f7aaa32c4fad22def3d2363845"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"008124bd6deb56e1f850d07428bcec5a695486e4","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        services \u003d matches.group(1).split(\u0027,\u0027)"},{"line_number":89,"context_line":"        for service in services:"},{"line_number":90,"context_line":"            service_name \u003d service.strip().strip(\"\u0027\")"},{"line_number":91,"context_line":"            if service_name in filename:"},{"line_number":92,"context_line":"                return (physical_line.find(service_name),"},{"line_number":93,"context_line":"                        \"T107: service tag should not in path\")"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2F%2Bko%3D","line":91,"in_reply_to":"AAAAW3%2F%2F%2FQg%3D","updated":"2014-04-09 05:41:42.000000000","message":"what about \"tempest/api/%s\" % service_name in filename?","commit_id":"e3bf20e4d52b59f7aaa32c4fad22def3d2363845"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"1c7a5114f236ce6c3699d3ca2da022ca3e491110","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    register(import_no_clients_in_api)"},{"line_number":98,"context_line":"    register(scenario_tests_need_service_tags)"},{"line_number":99,"context_line":"    register(no_setupclass_for_unit_tests)"},{"line_number":100,"context_line":"    register(no_vi_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2F%2BmQ%3D","line":100,"updated":"2014-04-09 05:35:29.000000000","message":"Need register service_tags_not_in_module_path","commit_id":"e3bf20e4d52b59f7aaa32c4fad22def3d2363845"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"0bbba11295df953313c3e3bc902c1d5f752e69c1","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    register(import_no_clients_in_api)"},{"line_number":98,"context_line":"    register(scenario_tests_need_service_tags)"},{"line_number":99,"context_line":"    register(no_setupclass_for_unit_tests)"},{"line_number":100,"context_line":"    register(no_vi_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2F45s%3D","line":100,"in_reply_to":"AAAAW3%2F%2F%2BmQ%3D","updated":"2014-04-09 17:16:16.000000000","message":"Nice catch","commit_id":"e3bf20e4d52b59f7aaa32c4fad22def3d2363845"}]}
