)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"69217144d28247615fb14f5999de0f167c2f8821","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Move role assignment to DocumentedRuleDefault"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A new policy class was introduce that requires"},{"line_number":10,"context_line":"additional parameters when defining policy objects."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch switches our role assignment policy object to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dfeb2761_814bfa85","line":9,"range":{"start_line":9,"start_character":23,"end_line":9,"end_character":32},"updated":"2017-03-30 17:26:15.000000000","message":"introduced","commit_id":"514dd2d0449befcab2709a3030a53a5f4abcba58"}],"keystone/common/policies/role_assignment.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7314e116f36b7219241f7ca1b325994d0214f1d0","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":25,"context_line":"        name\u003dbase.IDENTITY % \u0027list_role_assignments_for_tree\u0027,"},{"line_number":26,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":27,"context_line":"        description\u003d\u0027List role assignments for tree.\u0027,"},{"line_number":28,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/role_assignments?include_subtree\u0027,"},{"line_number":29,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}])"},{"line_number":30,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_89c17d31","line":27,"updated":"2017-04-03 17:54:53.000000000","message":"Most keystone operations/policies are pretty straight forward (i.e. list_users). Providing a description is essentially removing the underscores and adding sentence casing (\"List users.\"). Which isn\u0027t adding any additional value to the reader, but that can be hard to do with a description when the policy is already really simple.\n\n\nBut this one could certainly benefit from some additional context. What tree are we talking about here? What does the tree consist of?","commit_id":"514dd2d0449befcab2709a3030a53a5f4abcba58"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2e0a0334e872e1d6e44b506b7a7efd2a8f5fce5e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        description\u003d(\u0027List all role assignments for a given tree of \u0027"},{"line_number":28,"context_line":"                     \u0027hierarchical projects.\u0027),"},{"line_number":29,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/role_assignments?include_subtree\u0027,"},{"line_number":30,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}])"},{"line_number":31,"context_line":"]"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_939987c5","line":30,"updated":"2017-04-04 15:58:00.000000000","message":"Based on the router, it looks like this can be done using GET and HEAD [0] [1]\n\n[0] https://github.com/openstack/keystone/blob/master/keystone/assignment/routers.py#L199-L200\n[1] https://github.com/openstack/keystone/blob/master/keystone/assignment/controllers.py#L995-L997","commit_id":"363a7d70d947154860834c9f01c802a98f627114"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"00af9423f9a62a0b5851498b77ac22334dc40c0e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        description\u003d(\u0027List all role assignments for a given tree of \u0027"},{"line_number":28,"context_line":"                     \u0027hierarchical projects.\u0027),"},{"line_number":29,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/role_assignments?include_subtree\u0027,"},{"line_number":30,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}])"},{"line_number":31,"context_line":"]"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_53c77f65","line":30,"in_reply_to":"dfeb2761_939987c5","updated":"2017-04-04 16:04:33.000000000","message":"Nice catch. Will update","commit_id":"363a7d70d947154860834c9f01c802a98f627114"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8c786a17daf94c15b511dce92b2cc6bec70eb284","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":25,"context_line":"        name\u003dbase.IDENTITY % \u0027list_role_assignments_for_tree\u0027,"},{"line_number":26,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":27,"context_line":"        description\u003d(\u0027List all role assignments for an given tree of \u0027"},{"line_number":28,"context_line":"                     \u0027hierarchical projects.\u0027),"},{"line_number":29,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/role_assignments?include_subtree\u0027,"},{"line_number":30,"context_line":"                     \u0027method\u0027: \u0027GET\u0027},"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfeb2761_6eaa9671","line":27,"updated":"2017-04-04 16:31:45.000000000","message":"nit: a*","commit_id":"4e34f3ea072c7a13cfc455e31ea9f9d22df38b30"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"ea2fd405cd30752d59375d687f83cd1a80b56590","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":21,"context_line":"        description\u003d\u0027List role assignments.\u0027,"},{"line_number":22,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/role_assignments\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_role_assignments_for_tree\u0027,"},{"line_number":26,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"}],"source_content_type":"text/x-python","patch_set":8,"id":"bff0334d_92821ac8","line":23,"updated":"2017-04-05 18:34:00.000000000","message":"this one also has a HEAD.","commit_id":"1128939b69af744d0725ec00500a11a051b9b1aa"}]}
