)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9bf32923eb093cc423242e9f7cfcc12826623d22","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Move group policies to DocumentedRuleDefault"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The overall goal is to define a richer policy for deployers"},{"line_number":10,"context_line":"and operators[0]. To achieve that goal a new policy"},{"line_number":11,"context_line":"class was introduce that requires additional parameters"},{"line_number":12,"context_line":"when defining policy objects."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ffe62b97_c23710ff","line":10,"updated":"2017-03-28 17:53:56.000000000","message":"nit: the link to the spec and using bp policy-docs is redundant since they both link to the same place anyway. Moving to DocumentedRuleDefault helps us document policy, it doesn\u0027t necessarily help us define a richer policy. In order to get a richer policy, we need some more planning and orchestration around role definitions, which might happen at a later time in a different spec. The first section of this commit message is slightly misleading when considering the implementation being proposed.","commit_id":"f4db02cedbc6df422e81aa7e205ed4a964c3673a"}],"keystone/common/policies/group.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ccc7a3231e9e53a2e122fd3ebaed31be086da292","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        check_str\u003dbase.RULE_ADMIN_OR_OWNER,"},{"line_number":33,"context_line":"        description\u003d\u0027List groups to which a user belongs\u0027,"},{"line_number":34,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}/groups\u0027,"},{"line_number":35,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":36,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":37,"context_line":"        name\u003dbase.IDENTITY % \u0027create_group\u0027,"},{"line_number":38,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_c2978590","line":35,"updated":"2017-03-25 02:42:02.000000000","message":"The routers say this is also something we can do with HEAD.\n\nhttps://github.com/openstack/keystone/blob/62a0d2f295793928527530ae6540fe7e210dcd43/keystone/identity/routers.py","commit_id":"5a2fb0a88e5b73f4915d714ae5bbd953f52cc63f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ccc7a3231e9e53a2e122fd3ebaed31be086da292","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":45,"context_line":"        description\u003d\u0027Update group\u0027,"},{"line_number":46,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/groups/{group_id}\u0027,"},{"line_number":47,"context_line":"                     \u0027method\u0027: \u0027UPDATE\u0027}]),"},{"line_number":48,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":49,"context_line":"        name\u003dbase.IDENTITY % \u0027delete_group\u0027,"},{"line_number":50,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_628e7979","line":47,"updated":"2017-03-25 02:42:02.000000000","message":"This should be PATCH","commit_id":"5a2fb0a88e5b73f4915d714ae5bbd953f52cc63f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ccc7a3231e9e53a2e122fd3ebaed31be086da292","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":67,"context_line":"        name\u003dbase.IDENTITY % \u0027check_user_in_group\u0027,"},{"line_number":68,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":69,"context_line":"        description\u003d\u0027Check whether user belongs to group\u0027,"},{"line_number":70,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/groups/{group_id}/users/{user_id}\u0027,"},{"line_number":71,"context_line":"                     \u0027method\u0027: \u0027HEAD\u0027}]),"},{"line_number":72,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_824f3dbc","line":69,"updated":"2017-03-25 02:42:02.000000000","message":"According to the routers this is something we can do with HEAD as well.\n\nhttps://github.com/openstack/keystone/blob/62a0d2f295793928527530ae6540fe7e210dcd43/keystone/identity/routers.py#L63","commit_id":"5a2fb0a88e5b73f4915d714ae5bbd953f52cc63f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5db59d331bbba8544619b7e5b12a1937884471cc","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":19,"context_line":"        name\u003dbase.IDENTITY % \u0027get_group\u0027,"},{"line_number":20,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":21,"context_line":"        description\u003d\u0027Show group details\u0027,"},{"line_number":22,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/groups/{group_id}\u0027,"},{"line_number":23,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_5bcaff4d","line":21,"updated":"2017-03-27 21:03:24.000000000","message":"We should add punctuation to be consistent with the direction of the rest of the patches.","commit_id":"0c27fcb8ef48115f0b4a404b382d0b3d68ce68de"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5db59d331bbba8544619b7e5b12a1937884471cc","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":31,"context_line":"        name\u003dbase.IDENTITY % \u0027list_groups_for_user\u0027,"},{"line_number":32,"context_line":"        check_str\u003dbase.RULE_ADMIN_OR_OWNER,"},{"line_number":33,"context_line":"        description\u003d\u0027List groups to which a user belongs\u0027,"},{"line_number":34,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}/groups\u0027,"},{"line_number":35,"context_line":"                     \u0027method\u0027: \u0027GET\u0027},"},{"line_number":36,"context_line":"                    {\u0027path\u0027: \u0027/v3/users/{user_id}/groups\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_bb80ebc0","line":33,"updated":"2017-03-27 21:03:24.000000000","message":"nit: We typically reference user/group relationships as memberships. So maybe something like:\n\n  List group memberships for a user.\n\nor\n\n  List groups a user is a member of.","commit_id":"0c27fcb8ef48115f0b4a404b382d0b3d68ce68de"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5db59d331bbba8544619b7e5b12a1937884471cc","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":57,"context_line":"        name\u003dbase.IDENTITY % \u0027list_users_in_group\u0027,"},{"line_number":58,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":59,"context_line":"        description\u003d\u0027List users in group\u0027,"},{"line_number":60,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/groups/{group_id}/users\u0027,"},{"line_number":61,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":62,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_9bd3e7d5","line":59,"updated":"2017-03-27 21:03:24.000000000","message":"nit:\n\n  List members of a specific group.","commit_id":"0c27fcb8ef48115f0b4a404b382d0b3d68ce68de"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5db59d331bbba8544619b7e5b12a1937884471cc","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":69,"context_line":"        name\u003dbase.IDENTITY % \u0027check_user_in_group\u0027,"},{"line_number":70,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":71,"context_line":"        description\u003d\u0027Check whether user belongs to group\u0027,"},{"line_number":72,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/groups/{group_id}/users/{user_id}\u0027,"},{"line_number":73,"context_line":"                     \u0027method\u0027: \u0027HEAD\u0027},"},{"line_number":74,"context_line":"                    {\u0027path\u0027: \u0027/v3/groups/{group_id}/users/{user_id}\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_dbf60f64","line":71,"updated":"2017-03-27 21:03:24.000000000","message":"nit: \n\n  Check whether a user is a member of a group.","commit_id":"0c27fcb8ef48115f0b4a404b382d0b3d68ce68de"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"055d0dc940437ffdccafceccc7895b4af81342b9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        description\u003d\u0027List groups a user is a member of.\u0027,"},{"line_number":34,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}/groups\u0027,"},{"line_number":35,"context_line":"                     \u0027method\u0027: \u0027GET\u0027},"},{"line_number":36,"context_line":"                    {\u0027path\u0027: \u0027/v3/users/{user_id}/groups\u0027,"},{"line_number":37,"context_line":"                     \u0027method\u0027: \u0027HEAD\u0027}]),"},{"line_number":38,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":39,"context_line":"        name\u003dbase.IDENTITY % \u0027create_group\u0027,"},{"line_number":40,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_6115a948","line":37,"range":{"start_line":36,"start_character":20,"end_line":37,"end_character":38},"updated":"2017-03-29 19:39:54.000000000","message":"semantically, this does not make sense at all to me, what does this do ?\n\nthere can\u0027t be a check that a user belongs to groups (without specifying a group/groups).\n\nif this api exists, is this a bug ?","commit_id":"f4db02cedbc6df422e81aa7e205ed4a964c3673a"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"8d4da8ec74133740bcfdb46ea2e68879e0adf1fb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        description\u003d\u0027List groups a user is a member of.\u0027,"},{"line_number":34,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}/groups\u0027,"},{"line_number":35,"context_line":"                     \u0027method\u0027: \u0027GET\u0027},"},{"line_number":36,"context_line":"                    {\u0027path\u0027: \u0027/v3/users/{user_id}/groups\u0027,"},{"line_number":37,"context_line":"                     \u0027method\u0027: \u0027HEAD\u0027}]),"},{"line_number":38,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":39,"context_line":"        name\u003dbase.IDENTITY % \u0027create_group\u0027,"},{"line_number":40,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"}],"source_content_type":"text/x-python","patch_set":5,"id":"dfeb2761_f2e95280","line":37,"range":{"start_line":36,"start_character":20,"end_line":37,"end_character":38},"in_reply_to":"ffe62b97_6115a948","updated":"2017-03-31 15:42:35.000000000","message":"Samuel here\u0027s the link to this API: https://developer.openstack.org/api-ref/identity/v3/?expanded\u003dlist-groups-to-which-a-user-belongs-detail","commit_id":"f4db02cedbc6df422e81aa7e205ed4a964c3673a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9bf32923eb093cc423242e9f7cfcc12826623d22","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":77,"context_line":"        name\u003dbase.IDENTITY % \u0027add_user_to_group\u0027,"},{"line_number":78,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":79,"context_line":"        description\u003d\u0027Show group details.\u0027,"},{"line_number":80,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/groups/{group_id}/users/{user_id}\u0027,"},{"line_number":81,"context_line":"                     \u0027method\u0027: \u0027PUT\u0027}])"},{"line_number":82,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_65428e40","line":79,"updated":"2017-03-28 17:53:56.000000000","message":"This is adding a user to a group.","commit_id":"f4db02cedbc6df422e81aa7e205ed4a964c3673a"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"055d0dc940437ffdccafceccc7895b4af81342b9","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":77,"context_line":"        name\u003dbase.IDENTITY % \u0027add_user_to_group\u0027,"},{"line_number":78,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":79,"context_line":"        description\u003d\u0027Show group details.\u0027,"},{"line_number":80,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/groups/{group_id}/users/{user_id}\u0027,"},{"line_number":81,"context_line":"                     \u0027method\u0027: \u0027PUT\u0027}])"},{"line_number":82,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_5c584e2f","line":79,"in_reply_to":"ffe62b97_65428e40","updated":"2017-03-29 19:39:54.000000000","message":"++","commit_id":"f4db02cedbc6df422e81aa7e205ed4a964c3673a"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4f28b31294bc80327ee5cd1d8ebce5b7b93deefd","unresolved":false,"context_lines":[{"line_number":19,"context_line":"        name\u003dbase.IDENTITY % \u0027get_group\u0027,"},{"line_number":20,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":21,"context_line":"        description\u003d\u0027Show group details.\u0027,"},{"line_number":22,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/groups/{group_id}\u0027,"},{"line_number":23,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":25,"context_line":"        name\u003dbase.IDENTITY % \u0027list_groups\u0027,"},{"line_number":26,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_8f878cd8","line":23,"range":{"start_line":22,"start_character":0,"end_line":23,"end_character":40},"updated":"2017-04-05 23:43:52.000000000","message":"this has HEAD as well. groups use the generic router [1]. the generic router defines GET and HEAD for get_ operations, see [2].\n\n\n[1] https://github.com/openstack/keystone/blob/master/keystone/identity/routers.py#L72-L75\n[2] https://github.com/openstack/keystone/blob/master/keystone/common/router.py#L48-L52","commit_id":"9394903e367dcb1f2d20155f0c4bab4d9f28cbff"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4f28b31294bc80327ee5cd1d8ebce5b7b93deefd","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        name\u003dbase.IDENTITY % \u0027list_groups\u0027,"},{"line_number":26,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":27,"context_line":"        description\u003d\u0027List groups.\u0027,"},{"line_number":28,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/groups\u0027,"},{"line_number":29,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":30,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":31,"context_line":"        name\u003dbase.IDENTITY % \u0027list_groups_for_user\u0027,"},{"line_number":32,"context_line":"        check_str\u003dbase.RULE_ADMIN_OR_OWNER,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_4f52a469","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":40},"updated":"2017-04-05 23:43:52.000000000","message":"same here, same reasoning above, see [1]\n\n[1] https://github.com/openstack/keystone/blob/master/keystone/common/router.py#L43-L47","commit_id":"9394903e367dcb1f2d20155f0c4bab4d9f28cbff"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"3acbfa8d0c539f01ee7716e73459eb04d434d776","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        description\u003d\u0027List groups to which a user belongs.\u0027,"},{"line_number":34,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}/groups\u0027,"},{"line_number":35,"context_line":"                     \u0027method\u0027: \u0027GET\u0027},"},{"line_number":36,"context_line":"                    {\u0027path\u0027: \u0027/v3/users/{user_id}/groups\u0027,"},{"line_number":37,"context_line":"                     \u0027method\u0027: \u0027HEAD\u0027}]),"},{"line_number":38,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":39,"context_line":"        name\u003dbase.IDENTITY % \u0027create_group\u0027,"},{"line_number":40,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfeb2761_5a469e7e","line":37,"range":{"start_line":36,"start_character":20,"end_line":37,"end_character":38},"updated":"2017-04-03 15:26:00.000000000","message":"I still think this should not exist, see my comment on patchset 5","commit_id":"9394903e367dcb1f2d20155f0c4bab4d9f28cbff"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4f28b31294bc80327ee5cd1d8ebce5b7b93deefd","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        description\u003d\u0027List groups to which a user belongs.\u0027,"},{"line_number":34,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}/groups\u0027,"},{"line_number":35,"context_line":"                     \u0027method\u0027: \u0027GET\u0027},"},{"line_number":36,"context_line":"                    {\u0027path\u0027: \u0027/v3/users/{user_id}/groups\u0027,"},{"line_number":37,"context_line":"                     \u0027method\u0027: \u0027HEAD\u0027}]),"},{"line_number":38,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":39,"context_line":"        name\u003dbase.IDENTITY % \u0027create_group\u0027,"},{"line_number":40,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_8fee6c86","line":37,"range":{"start_line":36,"start_character":20,"end_line":37,"end_character":38},"in_reply_to":"dfeb2761_5a469e7e","updated":"2017-04-05 23:43:52.000000000","message":"After reporting https://bugs.launchpad.net/keystone/+bug/1680040 and talking to notmorgan and dstanek on IRC, I am convinced this makes sense.","commit_id":"9394903e367dcb1f2d20155f0c4bab4d9f28cbff"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4f28b31294bc80327ee5cd1d8ebce5b7b93deefd","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        name\u003dbase.IDENTITY % \u0027list_users_in_group\u0027,"},{"line_number":58,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":59,"context_line":"        description\u003d\u0027List members of a specific group.\u0027,"},{"line_number":60,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/groups/{group_id}/users\u0027,"},{"line_number":61,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":62,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":63,"context_line":"        name\u003dbase.IDENTITY % \u0027remove_user_from_group\u0027,"},{"line_number":64,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_2f92c0f7","line":61,"range":{"start_line":60,"start_character":0,"end_line":61,"end_character":40},"updated":"2017-04-05 23:43:52.000000000","message":"this has head as well:\n\nhttps://github.com/openstack/keystone/blob/master/keystone/identity/routers.py#L50-L69","commit_id":"9394903e367dcb1f2d20155f0c4bab4d9f28cbff"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4f28b31294bc80327ee5cd1d8ebce5b7b93deefd","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":77,"context_line":"        name\u003dbase.IDENTITY % \u0027add_user_to_group\u0027,"},{"line_number":78,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":79,"context_line":"        description\u003d\u0027Show group details.\u0027,"},{"line_number":80,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/groups/{group_id}/users/{user_id}\u0027,"},{"line_number":81,"context_line":"                     \u0027method\u0027: \u0027PUT\u0027}])"},{"line_number":82,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_8fbc2c6a","line":79,"range":{"start_line":79,"start_character":21,"end_line":79,"end_character":25},"updated":"2017-04-05 23:43:52.000000000","message":"this is not showing anything, it\u0027s adding user to group, please update description","commit_id":"9394903e367dcb1f2d20155f0c4bab4d9f28cbff"}]}
