)]}'
{"openstack_auth/backend.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"785f42a386265d0788a64e6356bfc3bbc2487a35","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        # TODO(gabrielhurley): Integrate policy-driven RBAC"},{"line_number":296,"context_line":"        #                      when supported by Keystone."},{"line_number":297,"context_line":"        role_perms \u003d utils.get_permissions("},{"line_number":298,"context_line":"            {\u0027%s\u0027 % role[\u0027name\u0027].lower() for role in user.roles})"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        services \u003d []"},{"line_number":301,"context_line":"        for service in user.service_catalog:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_b0a81edd","line":298,"range":{"start_line":298,"start_character":32,"end_line":298,"end_character":40},"updated":"2016-01-26 09:48:53.000000000","message":".lower() should be moved into get_permissions(). It is a part of generating \u0027openstack.roles.%s\u0027","commit_id":"cf619ef1644671f51ecb0a3c70f9708531ce0b1a"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"6742d796bf53cb37eabbe0cc35337e9d1ea9df54","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        # TODO(gabrielhurley): Integrate policy-driven RBAC"},{"line_number":296,"context_line":"        #                      when supported by Keystone."},{"line_number":297,"context_line":"        role_perms \u003d utils.get_permissions("},{"line_number":298,"context_line":"            {\u0027%s\u0027 % role[\u0027name\u0027].lower() for role in user.roles})"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        services \u003d []"},{"line_number":301,"context_line":"        for service in user.service_catalog:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_df8031fa","line":298,"range":{"start_line":298,"start_character":32,"end_line":298,"end_character":40},"in_reply_to":"9a68dd71_b0a81edd","updated":"2016-01-26 12:59:17.000000000","message":"Done","commit_id":"cf619ef1644671f51ecb0a3c70f9708531ce0b1a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4c6604a00bedb3397e9c7b0db8a0aa98c0cde361","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        # TODO(gabrielhurley): Integrate policy-driven RBAC"},{"line_number":296,"context_line":"        #                      when supported by Keystone."},{"line_number":297,"context_line":"        role_perms \u003d {utils.get_role_permission("},{"line_number":298,"context_line":"                      role[\u0027name\u0027] for role in user.roles)}"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        services \u003d []"},{"line_number":301,"context_line":"        for service in user.service_catalog:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_a2120657","line":298,"updated":"2016-01-26 13:11:54.000000000","message":"Looks wrong.\n\n {utils.get_role_permission(role[\u0027name\u0027])\n  for role in user.roles}","commit_id":"f1ac764131d563286ae28a49b753a03dca7a2b59"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"573b9280177d0a9705c70940cbb9cee6fe02baba","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        # TODO(gabrielhurley): Integrate policy-driven RBAC"},{"line_number":296,"context_line":"        #                      when supported by Keystone."},{"line_number":297,"context_line":"        role_perms \u003d {utils.get_role_permission("},{"line_number":298,"context_line":"                      role[\u0027name\u0027] for role in user.roles)}"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        services \u003d []"},{"line_number":301,"context_line":"        for service in user.service_catalog:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_8d4a9326","line":298,"in_reply_to":"9a68dd71_a2120657","updated":"2016-01-26 13:30:11.000000000","message":"You are right! I made a mistake. Thank you so much!","commit_id":"f1ac764131d563286ae28a49b753a03dca7a2b59"}],"openstack_auth/tests/tests.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9b8cc8f7584fce019fac2c1c5af28cc1ca54b55a","unresolved":false,"context_lines":[{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"class RoleTestCaseAdmin(test.TestCase):"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"    @override_settings(OPENSTACK_KEYSTONE_ADMIN_ROLES\u003d[\u0027foO\u0027, \u0027BAR\u0027, \u0027admin\u0027])"},{"line_number":1116,"context_line":"    def test_get_admin_roles(self):"},{"line_number":1117,"context_line":"        admin_roles \u003d utils.get_admin_roles()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_ba926bf4","line":1114,"updated":"2016-01-25 11:13:13.000000000","message":"You need to add a test for a default value, i.e., set(\u0027admin\u0027)?","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"c576cd6fac89e06ff2c1d8969beed5e233e23c63","unresolved":false,"context_lines":[{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"class RoleTestCaseAdmin(test.TestCase):"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"    @override_settings(OPENSTACK_KEYSTONE_ADMIN_ROLES\u003d[\u0027foO\u0027, \u0027BAR\u0027, \u0027admin\u0027])"},{"line_number":1116,"context_line":"    def test_get_admin_roles(self):"},{"line_number":1117,"context_line":"        admin_roles \u003d utils.get_admin_roles()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_c0362950","line":1114,"in_reply_to":"9a68dd71_ba926bf4","updated":"2016-01-26 04:12:14.000000000","message":"Done","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9b8cc8f7584fce019fac2c1c5af28cc1ca54b55a","unresolved":false,"context_lines":[{"line_number":1115,"context_line":"    @override_settings(OPENSTACK_KEYSTONE_ADMIN_ROLES\u003d[\u0027foO\u0027, \u0027BAR\u0027, \u0027admin\u0027])"},{"line_number":1116,"context_line":"    def test_get_admin_roles(self):"},{"line_number":1117,"context_line":"        admin_roles \u003d utils.get_admin_roles()"},{"line_number":1118,"context_line":"        self.assertTrue({\u0027foo\u0027, \u0027bar\u0027, \u0027admin\u0027} \u003d\u003d admin_roles)"},{"line_number":1119,"context_line":""},{"line_number":1120,"context_line":"    @override_settings(OPENSTACK_KEYSTONE_ADMIN_ROLES\u003d[\u0027foO\u0027, \u0027BAR\u0027, \u0027admin\u0027])"},{"line_number":1121,"context_line":"    def test_get_admin_permissions(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_7abf1361","line":1118,"range":{"start_line":1118,"start_character":13,"end_line":1118,"end_character":23},"updated":"2016-01-25 11:13:13.000000000","message":"Use assertSetEqual.","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"c576cd6fac89e06ff2c1d8969beed5e233e23c63","unresolved":false,"context_lines":[{"line_number":1115,"context_line":"    @override_settings(OPENSTACK_KEYSTONE_ADMIN_ROLES\u003d[\u0027foO\u0027, \u0027BAR\u0027, \u0027admin\u0027])"},{"line_number":1116,"context_line":"    def test_get_admin_roles(self):"},{"line_number":1117,"context_line":"        admin_roles \u003d utils.get_admin_roles()"},{"line_number":1118,"context_line":"        self.assertTrue({\u0027foo\u0027, \u0027bar\u0027, \u0027admin\u0027} \u003d\u003d admin_roles)"},{"line_number":1119,"context_line":""},{"line_number":1120,"context_line":"    @override_settings(OPENSTACK_KEYSTONE_ADMIN_ROLES\u003d[\u0027foO\u0027, \u0027BAR\u0027, \u0027admin\u0027])"},{"line_number":1121,"context_line":"    def test_get_admin_permissions(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_6042ddaf","line":1118,"range":{"start_line":1118,"start_character":13,"end_line":1118,"end_character":23},"in_reply_to":"9a68dd71_7abf1361","updated":"2016-01-26 04:12:14.000000000","message":"Done","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9b8cc8f7584fce019fac2c1c5af28cc1ca54b55a","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"    @override_settings(OPENSTACK_KEYSTONE_ADMIN_ROLES\u003d[\u0027foO\u0027, \u0027BAR\u0027, \u0027admin\u0027])"},{"line_number":1121,"context_line":"    def test_get_admin_permissions(self):"},{"line_number":1122,"context_line":"        admin_permissions \u003d utils.get_admin_permissions()"},{"line_number":1123,"context_line":"        self.assertTrue({\u0027openstack.roles.foo\u0027,"},{"line_number":1124,"context_line":"                         \u0027openstack.roles.bar\u0027,"},{"line_number":1125,"context_line":"                         \u0027openstack.roles.admin\u0027} \u003d\u003d admin_permissions)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_3ab51b7d","line":1123,"range":{"start_line":1123,"start_character":13,"end_line":1123,"end_character":23},"updated":"2016-01-25 11:13:13.000000000","message":"ditto","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"c576cd6fac89e06ff2c1d8969beed5e233e23c63","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"    @override_settings(OPENSTACK_KEYSTONE_ADMIN_ROLES\u003d[\u0027foO\u0027, \u0027BAR\u0027, \u0027admin\u0027])"},{"line_number":1121,"context_line":"    def test_get_admin_permissions(self):"},{"line_number":1122,"context_line":"        admin_permissions \u003d utils.get_admin_permissions()"},{"line_number":1123,"context_line":"        self.assertTrue({\u0027openstack.roles.foo\u0027,"},{"line_number":1124,"context_line":"                         \u0027openstack.roles.bar\u0027,"},{"line_number":1125,"context_line":"                         \u0027openstack.roles.admin\u0027} \u003d\u003d admin_permissions)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_803d912c","line":1123,"range":{"start_line":1123,"start_character":13,"end_line":1123,"end_character":23},"in_reply_to":"9a68dd71_3ab51b7d","updated":"2016-01-26 04:12:14.000000000","message":"Done","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"}],"openstack_auth/utils.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9b8cc8f7584fce019fac2c1c5af28cc1ca54b55a","unresolved":false,"context_lines":[{"line_number":392,"context_line":"    return \"signed_cookies\" in engine"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"def get_admin_roles():"},{"line_number":396,"context_line":"    admin_roles \u003d {role.lower() for role in getattr("},{"line_number":397,"context_line":"        settings,"},{"line_number":398,"context_line":"        \u0027OPENSTACK_KEYSTONE_ADMIN_ROLES\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_1a013738","line":395,"updated":"2016-01-25 11:13:13.000000000","message":"Could you add a docstring?","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"c576cd6fac89e06ff2c1d8969beed5e233e23c63","unresolved":false,"context_lines":[{"line_number":392,"context_line":"    return \"signed_cookies\" in engine"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"def get_admin_roles():"},{"line_number":396,"context_line":"    admin_roles \u003d {role.lower() for role in getattr("},{"line_number":397,"context_line":"        settings,"},{"line_number":398,"context_line":"        \u0027OPENSTACK_KEYSTONE_ADMIN_ROLES\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_204865cb","line":395,"in_reply_to":"9a68dd71_1a013738","updated":"2016-01-26 04:12:14.000000000","message":"Done","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9b8cc8f7584fce019fac2c1c5af28cc1ca54b55a","unresolved":false,"context_lines":[{"line_number":403,"context_line":"def get_admin_permissions():"},{"line_number":404,"context_line":"    \"\"\"Get admin persmissions"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    This format is \u0027openstack.roles.xxx\u0027 and \u0027xxx\u0027 is a real role name."},{"line_number":407,"context_line":"    \"\"\""},{"line_number":408,"context_line":"    roles \u003d get_admin_roles()"},{"line_number":409,"context_line":"    permissions \u003d {\"openstack.roles.%s\" % role for role in roles}"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_daf63f5c","line":406,"updated":"2016-01-25 11:13:13.000000000","message":"Could you add a description on a returned value?","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"c576cd6fac89e06ff2c1d8969beed5e233e23c63","unresolved":false,"context_lines":[{"line_number":403,"context_line":"def get_admin_permissions():"},{"line_number":404,"context_line":"    \"\"\"Get admin persmissions"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    This format is \u0027openstack.roles.xxx\u0027 and \u0027xxx\u0027 is a real role name."},{"line_number":407,"context_line":"    \"\"\""},{"line_number":408,"context_line":"    roles \u003d get_admin_roles()"},{"line_number":409,"context_line":"    permissions \u003d {\"openstack.roles.%s\" % role for role in roles}"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_404319af","line":406,"in_reply_to":"9a68dd71_daf63f5c","updated":"2016-01-26 04:12:14.000000000","message":"Done","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9b8cc8f7584fce019fac2c1c5af28cc1ca54b55a","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    This format is \u0027openstack.roles.xxx\u0027 and \u0027xxx\u0027 is a real role name."},{"line_number":407,"context_line":"    \"\"\""},{"line_number":408,"context_line":"    roles \u003d get_admin_roles()"},{"line_number":409,"context_line":"    permissions \u003d {\"openstack.roles.%s\" % role for role in roles}"},{"line_number":410,"context_line":"    return permissions"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_5a0ecf8c","line":409,"range":{"start_line":409,"start_character":19,"end_line":409,"end_character":38},"updated":"2016-01-25 11:13:13.000000000","message":"It is defined in backend.py. It is better to define a method to get openstack.roles.%s from a role name and use it at both places.","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"c576cd6fac89e06ff2c1d8969beed5e233e23c63","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    This format is \u0027openstack.roles.xxx\u0027 and \u0027xxx\u0027 is a real role name."},{"line_number":407,"context_line":"    \"\"\""},{"line_number":408,"context_line":"    roles \u003d get_admin_roles()"},{"line_number":409,"context_line":"    permissions \u003d {\"openstack.roles.%s\" % role for role in roles}"},{"line_number":410,"context_line":"    return permissions"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_e0148da0","line":409,"range":{"start_line":409,"start_character":19,"end_line":409,"end_character":38},"in_reply_to":"9a68dd71_5a0ecf8c","updated":"2016-01-26 04:12:14.000000000","message":"Done","commit_id":"fa3108a077fdaa4f39e6c1498479e3a01ee942b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"785f42a386265d0788a64e6356bfc3bbc2487a35","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    return admin_roles"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"def get_permissions(roles\u003d{}):"},{"line_number":413,"context_line":"    \"\"\"Common function for getting the permissions froms args"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    This format is \u0027openstack.roles.xxx\u0027 and \u0027xxx\u0027 is a real role name."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_d07272b0","line":412,"updated":"2016-01-26 09:48:53.000000000","message":"The meaning of \"permission\" is a bit broader.\nHow about get_role_permission() instead?","commit_id":"cf619ef1644671f51ecb0a3c70f9708531ce0b1a"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"6742d796bf53cb37eabbe0cc35337e9d1ea9df54","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    return admin_roles"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"def get_permissions(roles\u003d{}):"},{"line_number":413,"context_line":"    \"\"\"Common function for getting the permissions froms args"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    This format is \u0027openstack.roles.xxx\u0027 and \u0027xxx\u0027 is a real role name."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_9f7b9929","line":412,"in_reply_to":"9a68dd71_d07272b0","updated":"2016-01-26 12:59:17.000000000","message":"Done","commit_id":"cf619ef1644671f51ecb0a3c70f9708531ce0b1a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"785f42a386265d0788a64e6356bfc3bbc2487a35","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            \"openstack.roles.admin\""},{"line_number":424,"context_line":"        }"},{"line_number":425,"context_line":"    \"\"\""},{"line_number":426,"context_line":"    return {\"openstack.roles.%s\" % role for role in roles}"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"def get_admin_permissions():"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_ad15294a","line":426,"updated":"2016-01-26 09:48:53.000000000","message":"Could you change the method to take a single role?\n\n  def get_permission(role):\n      return \u0027openstack.roles.%s\u0027 % role","commit_id":"cf619ef1644671f51ecb0a3c70f9708531ce0b1a"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"6742d796bf53cb37eabbe0cc35337e9d1ea9df54","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            \"openstack.roles.admin\""},{"line_number":424,"context_line":"        }"},{"line_number":425,"context_line":"    \"\"\""},{"line_number":426,"context_line":"    return {\"openstack.roles.%s\" % role for role in roles}"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"def get_admin_permissions():"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_5f752130","line":426,"in_reply_to":"9a68dd71_ad15294a","updated":"2016-01-26 12:59:17.000000000","message":"Done","commit_id":"cf619ef1644671f51ecb0a3c70f9708531ce0b1a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"785f42a386265d0788a64e6356bfc3bbc2487a35","unresolved":false,"context_lines":[{"line_number":440,"context_line":"            \"openstack.roles.admin\""},{"line_number":441,"context_line":"        }"},{"line_number":442,"context_line":"    \"\"\""},{"line_number":443,"context_line":"    return get_permissions(get_admin_roles())"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_d0fd9209","line":443,"updated":"2016-01-26 09:48:53.000000000","message":"After my above comment is applied, it will be:\n\n  return {get_permission(role) for role in get_admin_roles()}","commit_id":"cf619ef1644671f51ecb0a3c70f9708531ce0b1a"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"6742d796bf53cb37eabbe0cc35337e9d1ea9df54","unresolved":false,"context_lines":[{"line_number":440,"context_line":"            \"openstack.roles.admin\""},{"line_number":441,"context_line":"        }"},{"line_number":442,"context_line":"    \"\"\""},{"line_number":443,"context_line":"    return get_permissions(get_admin_roles())"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_1f8ec927","line":443,"in_reply_to":"9a68dd71_d0fd9209","updated":"2016-01-26 12:59:17.000000000","message":"Done","commit_id":"cf619ef1644671f51ecb0a3c70f9708531ce0b1a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4c6604a00bedb3397e9c7b0db8a0aa98c0cde361","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    admin_roles \u003d {role.lower() for role in getattr("},{"line_number":406,"context_line":"        settings,"},{"line_number":407,"context_line":"        \u0027OPENSTACK_KEYSTONE_ADMIN_ROLES\u0027,"},{"line_number":408,"context_line":"        [\u0027admin\u0027])}"},{"line_number":409,"context_line":"    return admin_roles"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_42ed4a24","line":408,"updated":"2016-01-26 13:11:54.000000000","message":"Consider the indent level and a place of wrapping lines.\n\n  admin_roles \u003d {role.lower() for role\n                 in getattr(settings, \u0027OPENSTACK_KEYSTONE_ADMIN_ROLES\u0027, [\u0027admin\u0027])}","commit_id":"f1ac764131d563286ae28a49b753a03dca7a2b59"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"573b9280177d0a9705c70940cbb9cee6fe02baba","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    admin_roles \u003d {role.lower() for role in getattr("},{"line_number":406,"context_line":"        settings,"},{"line_number":407,"context_line":"        \u0027OPENSTACK_KEYSTONE_ADMIN_ROLES\u0027,"},{"line_number":408,"context_line":"        [\u0027admin\u0027])}"},{"line_number":409,"context_line":"    return admin_roles"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_6dd71fee","line":408,"in_reply_to":"9a68dd71_42ed4a24","updated":"2016-01-26 13:30:11.000000000","message":"Done. In the case of your comment, a letters per line over 79, so I changed below.\n\n\n    admin_roles \u003d {role.lower() for role in getattr(\n                   settings, \u0027OPENSTACK_KEYSTONE_ADMIN_ROLES\u0027, [\u0027admin\u0027])}","commit_id":"f1ac764131d563286ae28a49b753a03dca7a2b59"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4c6604a00bedb3397e9c7b0db8a0aa98c0cde361","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    return admin_roles"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"def get_role_permission(role\u003dNone):"},{"line_number":413,"context_line":"    \"\"\"Common function for getting the permission froms arg"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    This format is \u0027openstack.roles.xxx\u0027 and \u0027xxx\u0027 is a real role name."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_ff473575","line":412,"range":{"start_line":412,"start_character":24,"end_line":412,"end_character":33},"updated":"2016-01-26 13:11:54.000000000","message":"Why do you need to make the argument optional?\nI think we can assume a valid role name is passed.\nThere seems no need to do this.\n\n  get_role_permission(role)","commit_id":"f1ac764131d563286ae28a49b753a03dca7a2b59"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"573b9280177d0a9705c70940cbb9cee6fe02baba","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    return admin_roles"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"def get_role_permission(role\u003dNone):"},{"line_number":413,"context_line":"    \"\"\"Common function for getting the permission froms arg"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    This format is \u0027openstack.roles.xxx\u0027 and \u0027xxx\u0027 is a real role name."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_cdb2cb06","line":412,"range":{"start_line":412,"start_character":24,"end_line":412,"end_character":33},"in_reply_to":"9a68dd71_ff473575","updated":"2016-01-26 13:30:11.000000000","message":"Done. As you say, this argument should not optional.","commit_id":"f1ac764131d563286ae28a49b753a03dca7a2b59"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4c6604a00bedb3397e9c7b0db8a0aa98c0cde361","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        String like \"openstack.roles.admin\""},{"line_number":419,"context_line":"        If role is None, this will return None."},{"line_number":420,"context_line":"    \"\"\""},{"line_number":421,"context_line":"    return \"openstack.roles.%s\" % role.lower() if role is not None else None"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"def get_admin_permissions():"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_225db6ec","line":421,"updated":"2016-01-26 13:11:54.000000000","message":"return \u0027openstack.roles.%s\u0027 % role.lower()","commit_id":"f1ac764131d563286ae28a49b753a03dca7a2b59"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"573b9280177d0a9705c70940cbb9cee6fe02baba","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        String like \"openstack.roles.admin\""},{"line_number":419,"context_line":"        If role is None, this will return None."},{"line_number":420,"context_line":"    \"\"\""},{"line_number":421,"context_line":"    return \"openstack.roles.%s\" % role.lower() if role is not None else None"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"def get_admin_permissions():"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_6d515fd8","line":421,"in_reply_to":"9a68dd71_225db6ec","updated":"2016-01-26 13:30:11.000000000","message":"Done","commit_id":"f1ac764131d563286ae28a49b753a03dca7a2b59"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f068a9d16304fbd7773d8548eec1a6598d8a8045","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        }"},{"line_number":404,"context_line":"    \"\"\""},{"line_number":405,"context_line":"    admin_roles \u003d {role.lower() for role in getattr("},{"line_number":406,"context_line":"                   settings, \u0027OPENSTACK_KEYSTONE_ADMIN_ROLES\u0027, [\u0027admin\u0027])}"},{"line_number":407,"context_line":"    return admin_roles"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_0f86f8da","line":406,"updated":"2016-02-01 05:10:54.000000000","message":"NIt: \"getattr(xxxx)\" is a single component, so wrapping a line inside getattr() is not so good from readability perspective.\nIMHO, the following is better:\n\n  admin_roles \u003d {role.lower() for role\n                 in getattr(settings, \u0027OPENSTACK_KEYSTONE_ADMIN_ROLES\u0027,\n                            [\u0027admin\u0027])}\n\nThought?","commit_id":"a070d8e490d818867c20f316e332e36cf04e890e"},{"author":{"_account_id":17172,"name":"Kenji Ishii","email":"ken-ishii@sx.jp.nec.com","username":"kenji-ishii"},"change_message_id":"aa22afd91c62528c75cc881208413cd88c573026","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        }"},{"line_number":404,"context_line":"    \"\"\""},{"line_number":405,"context_line":"    admin_roles \u003d {role.lower() for role in getattr("},{"line_number":406,"context_line":"                   settings, \u0027OPENSTACK_KEYSTONE_ADMIN_ROLES\u0027, [\u0027admin\u0027])}"},{"line_number":407,"context_line":"    return admin_roles"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_b967eee7","line":406,"in_reply_to":"7a5de9d1_0f86f8da","updated":"2016-02-01 05:28:52.000000000","message":"Thanks for your advice. I think so. From now on, I\u0027d like to pay much attention to do it!","commit_id":"a070d8e490d818867c20f316e332e36cf04e890e"}]}
