)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":7,"context_line":"WIP List assignments with names"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When a client calls list assignment API what is returned is the"},{"line_number":10,"context_line":"user_id, role_id and the project or domain id.  Most users are"},{"line_number":11,"context_line":"then call the api again for each user to get their names."},{"line_number":12,"context_line":"Creating many api calls between the client and server which can"},{"line_number":13,"context_line":"be reduced by having the server do all the work instead."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a740942_2ea2ae99","line":10,"updated":"2015-12-08 18:41:06.000000000","message":"change \"users are\" to \"users\"","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":7,"context_line":"WIP List assignments with names"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When a client calls list assignment API what is returned is the"},{"line_number":10,"context_line":"user_id, role_id and the project or domain id.  Most users are"},{"line_number":11,"context_line":"then call the api again for each user to get their names."},{"line_number":12,"context_line":"Creating many api calls between the client and server which can"},{"line_number":13,"context_line":"be reduced by having the server do all the work instead."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a740942_eef7bbd0","line":10,"in_reply_to":"7a740942_2ea2ae99","updated":"2015-12-08 22:20:57.000000000","message":"Done","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Creating many api calls between the client and server which can"},{"line_number":13,"context_line":"be reduced by having the server do all the work instead."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit adds the functionality to include the users names"},{"line_number":16,"context_line":"with the response if the query parameter is set."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I0a1cc986b8a35aeafe567e5e7fee6eeb848ae113"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a740942_ceac4a8e","line":15,"updated":"2015-12-08 18:41:06.000000000","message":"change \"users names\" to \"users\u0027 names\"","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Creating many api calls between the client and server which can"},{"line_number":13,"context_line":"be reduced by having the server do all the work instead."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit adds the functionality to include the users names"},{"line_number":16,"context_line":"with the response if the query parameter is set."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I0a1cc986b8a35aeafe567e5e7fee6eeb848ae113"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a740942_8e02b7b2","line":15,"in_reply_to":"7a740942_ceac4a8e","updated":"2015-12-08 22:20:57.000000000","message":"Done","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":13,"context_line":"be reduced by having the server do all the work instead."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit adds the functionality to include the users names"},{"line_number":16,"context_line":"with the response if the query parameter is set."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I0a1cc986b8a35aeafe567e5e7fee6eeb848ae113"},{"line_number":19,"context_line":"Closes-Bug: #1479569"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a740942_ae953e33","line":16,"updated":"2015-12-08 18:41:06.000000000","message":"what query parameter?","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":13,"context_line":"be reduced by having the server do all the work instead."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit adds the functionality to include the users names"},{"line_number":16,"context_line":"with the response if the query parameter is set."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I0a1cc986b8a35aeafe567e5e7fee6eeb848ae113"},{"line_number":19,"context_line":"Closes-Bug: #1479569"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a740942_6e32eba8","line":16,"in_reply_to":"7a740942_ae953e33","updated":"2015-12-08 22:20:57.000000000","message":"excellent question... done","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c6eceac60e4ae92b4d7a3a21154538ed47cdeb29","unresolved":false,"context_lines":[{"line_number":7,"context_line":"List assignments with names"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When a client calls list assignment API what is returned is the"},{"line_number":10,"context_line":"user_id, role_id and the project id or domain id or group id. Most users"},{"line_number":11,"context_line":"then call the api again for each of these entities to get their names,"},{"line_number":12,"context_line":"creating many api calls between the client and server.  This can"},{"line_number":13,"context_line":"be reduced by having the server do all the work instead."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"fa69d971_ec575f00","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":60},"updated":"2016-01-01 12:24:44.000000000","message":"role id, user_id or group id, project id or domain id.","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"fb226b890d1672f5499e6f35eb669dd0600ee830","unresolved":false,"context_lines":[{"line_number":7,"context_line":"List assignments with names"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When a client calls list assignment API what is returned is the"},{"line_number":10,"context_line":"user_id, role_id and the project id or domain id or group id. Most users"},{"line_number":11,"context_line":"then call the api again for each of these entities to get their names,"},{"line_number":12,"context_line":"creating many api calls between the client and server.  This can"},{"line_number":13,"context_line":"be reduced by having the server do all the work instead."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"fa69d971_28244aad","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":60},"in_reply_to":"fa69d971_ec575f00","updated":"2016-01-04 22:33:37.000000000","message":"Done","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":7,"context_line":"List assignments with names"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When a client calls list assignment API what is returned is the"},{"line_number":10,"context_line":"role id, user id or group id, project id or domain id. Most users"},{"line_number":11,"context_line":"then call the api again for each of these entities to get their names,"},{"line_number":12,"context_line":"creating many api calls between the client and server.  This can"},{"line_number":13,"context_line":"be reduced by having the server do all the work instead."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa69d971_6529b289","line":10,"range":{"start_line":10,"start_character":28,"end_line":10,"end_character":30},"updated":"2016-01-06 15:30:34.000000000","message":", and","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":7,"context_line":"List assignments with names"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When a client calls list assignment API what is returned is the"},{"line_number":10,"context_line":"role id, user id or group id, project id or domain id. Most users"},{"line_number":11,"context_line":"then call the api again for each of these entities to get their names,"},{"line_number":12,"context_line":"creating many api calls between the client and server.  This can"},{"line_number":13,"context_line":"be reduced by having the server do all the work instead."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa69d971_419edb07","line":10,"range":{"start_line":10,"start_character":28,"end_line":10,"end_character":30},"in_reply_to":"fa69d971_6529b289","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":12,"context_line":"creating many api calls between the client and server.  This can"},{"line_number":13,"context_line":"be reduced by having the server do all the work instead."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit adds the functionality to include the users\u0027 names"},{"line_number":16,"context_line":"with the response if the parameter \u0027include_names\u0027 is set to True."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I0a1cc986b8a35aeafe567e5e7fee6eeb848ae113"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa69d971_e516024b","line":15,"updated":"2016-01-06 15:30:34.000000000","message":"the role, group, project, and domain names are also included, not just the user names","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":12,"context_line":"creating many api calls between the client and server.  This can"},{"line_number":13,"context_line":"be reduced by having the server do all the work instead."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit adds the functionality to include the users\u0027 names"},{"line_number":16,"context_line":"with the response if the parameter \u0027include_names\u0027 is set to True."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I0a1cc986b8a35aeafe567e5e7fee6eeb848ae113"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa69d971_61a19f45","line":15,"in_reply_to":"fa69d971_e516024b","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b8a13224d7af1cf49254992ef0cb54786dc93b28","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit adds the functionality to include the user, role, group,"},{"line_number":16,"context_line":"project, and domain names with the response if the parameter"},{"line_number":17,"context_line":"\u0027include_names\u0027 is set to True."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0a1cc986b8a35aeafe567e5e7fee6eeb848ae113"},{"line_number":20,"context_line":"Closes-Bug: #1479569"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"ba63e191_9faa99d3","line":17,"updated":"2016-01-19 13:13:36.000000000","message":"Why include_names? You are including so much more.","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"dc16eb32c397a7e54568cda4bcd5ad4736f3a935","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit adds the functionality to include the user, role, group,"},{"line_number":16,"context_line":"project, and domain names with the response if the parameter"},{"line_number":17,"context_line":"\u0027include_names\u0027 is set to True."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0a1cc986b8a35aeafe567e5e7fee6eeb848ae113"},{"line_number":20,"context_line":"Closes-Bug: #1479569"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"ba63e191_2c87c2b6","line":17,"in_reply_to":"ba63e191_0b018bae","updated":"2016-01-19 15:44:52.000000000","message":"But you are not just adding the specific fields that blueprint mentions. You are adding the entire entity, right? If that\u0027s the intention I think the name should be changed and the blueprint updated.","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"e5f4e632b08abc49ef0123a58397413680a2e72a","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit adds the functionality to include the user, role, group,"},{"line_number":16,"context_line":"project, and domain names with the response if the parameter"},{"line_number":17,"context_line":"\u0027include_names\u0027 is set to True."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0a1cc986b8a35aeafe567e5e7fee6eeb848ae113"},{"line_number":20,"context_line":"Closes-Bug: #1479569"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"ba63e191_c7903f98","line":17,"in_reply_to":"ba63e191_2c87c2b6","updated":"2016-01-19 15:59:12.000000000","message":"I guess i don\u0027t know what you are trying to ask.  The only difference is what i am doing is formatting the entity inside list_role_assignments() -\u003e This is being done to make the code more readable in _format_entity(), otherwise i would need to add 11 new keys inside the returned role assignment. Something like this: https://review.openstack.org/#/c/249958/8/keystone/assignment/core.py .  This is what _format_entity() would look like: https://review.openstack.org/#/c/249958/8/keystone/assignment/controllers.py\n\nDo you think i should go back to adding the keys inside list_role_assignments()?   Thanks David.","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"3cf0d4268d855ca918b74d015a9c33fd660470ff","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit adds the functionality to include the user, role, group,"},{"line_number":16,"context_line":"project, and domain names with the response if the parameter"},{"line_number":17,"context_line":"\u0027include_names\u0027 is set to True."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0a1cc986b8a35aeafe567e5e7fee6eeb848ae113"},{"line_number":20,"context_line":"Closes-Bug: #1479569"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"ba63e191_0b018bae","line":17,"in_reply_to":"ba63e191_9faa99d3","updated":"2016-01-19 15:26:23.000000000","message":"This is what the blue print states; https://github.com/openstack/keystone-specs/blob/master/specs/mitaka/list-assignment-names.rst#proposed-change","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"e95b1afda7f696879071aa7539217dad5d5e3052","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit adds the functionality to include the user, role, group,"},{"line_number":16,"context_line":"project, and domain names with the response if the parameter"},{"line_number":17,"context_line":"\u0027include_names\u0027 is set to True."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0a1cc986b8a35aeafe567e5e7fee6eeb848ae113"},{"line_number":20,"context_line":"Closes-Bug: #1479569"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"ba63e191_4bef6e87","line":17,"in_reply_to":"ba63e191_c7903f98","updated":"2016-01-19 20:41:28.000000000","message":"Yes you are right the intention is do what the BP specifies. I will do that now.","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"}],"keystone/assignment/backends/sql.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"702fdfd9bb51881d2f718e9182dc3d9a317f4488","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":301,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":302,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":303,"context_line":"                              include_names\u003dNone):"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        def denormalize_role(ref):"},{"line_number":306,"context_line":"            assignment \u003d {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_4374559b","line":303,"range":{"start_line":303,"start_character":30,"end_line":303,"end_character":50},"updated":"2015-12-30 21:01:36.000000000","message":"Not sure why we need to add to this interface - we don\u0027t use include_names here do we?  The driver signature does not need to match the manager signature - so it\u0027s OK if include_names is handled at the manager level only","commit_id":"1283d77bf7e0af4c9b6728e4ce9c9a081613dd8f"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2b5367a4d6493b42146cfe21063568e19d4038dc","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":301,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":302,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":303,"context_line":"                              include_names\u003dNone):"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        def denormalize_role(ref):"},{"line_number":306,"context_line":"            assignment \u003d {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_b278e82c","line":303,"range":{"start_line":303,"start_character":30,"end_line":303,"end_character":50},"in_reply_to":"fa69d971_03fe5d6b","updated":"2015-12-31 16:08:38.000000000","message":"okay, will do it in a separate patch.","commit_id":"1283d77bf7e0af4c9b6728e4ce9c9a081613dd8f"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2c4a4f3c5acfc05d3e2f290ab7e31568ad56c550","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":301,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":302,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":303,"context_line":"                              include_names\u003dNone):"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        def denormalize_role(ref):"},{"line_number":306,"context_line":"            assignment \u003d {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_633159a2","line":303,"range":{"start_line":303,"start_character":30,"end_line":303,"end_character":50},"in_reply_to":"fa69d971_4374559b","updated":"2015-12-30 21:18:20.000000000","message":"i was going to do something like Cristian said about making some joins in the sql driver to get all the names. This was just here prematurely lol.","commit_id":"1283d77bf7e0af4c9b6728e4ce9c9a081613dd8f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"64e59f4e73b36709323f43afe9e3ef4d7e60d88a","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":301,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":302,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":303,"context_line":"                              include_names\u003dNone):"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        def denormalize_role(ref):"},{"line_number":306,"context_line":"            assignment \u003d {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_03fe5d6b","line":303,"range":{"start_line":303,"start_character":30,"end_line":303,"end_character":50},"in_reply_to":"fa69d971_633159a2","updated":"2015-12-30 21:31:12.000000000","message":"Ah, right - Ok. (reading up the earlier comments now!). Sounds like maybe that would be worth doing in a separate patch (but your call) - since I think you are going to have to have code in the manager to do this for the (common case) when users/groups are in LDAP. That would also allow for the manager to cope with V8 drivers (who would not understand the include_names parameter anyway)","commit_id":"1283d77bf7e0af4c9b6728e4ce9c9a081613dd8f"}],"keystone/assignment/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7ff28173bb9113a8ab2640c584b5fbba116e8708","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        both user and group ids or domain and project ids is invalid as well."},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"        \"\"\""},{"line_number":651,"context_line":"        params \u003d context[\u0027query_string\u0027]"},{"line_number":652,"context_line":"        effective \u003d \u0027effective\u0027 in params and ("},{"line_number":653,"context_line":"            self.query_filter_is_true(params[\u0027effective\u0027]))"},{"line_number":654,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_b1555cc7","line":651,"updated":"2015-12-15 07:47:19.000000000","message":"you might need to do something similar with \"include_names\"","commit_id":"ee8b9b7b81a6e6db75c3e23e34488ee60e4c7e27"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"e620eaadbebb99db801ecf41735c8e5fc861c022","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        both user and group ids or domain and project ids is invalid as well."},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"        \"\"\""},{"line_number":651,"context_line":"        params \u003d context[\u0027query_string\u0027]"},{"line_number":652,"context_line":"        effective \u003d \u0027effective\u0027 in params and ("},{"line_number":653,"context_line":"            self.query_filter_is_true(params[\u0027effective\u0027]))"},{"line_number":654,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_4e879db5","line":651,"in_reply_to":"5a710552_b1555cc7","updated":"2015-12-15 14:03:15.000000000","message":"++","commit_id":"ee8b9b7b81a6e6db75c3e23e34488ee60e4c7e27"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c6eceac60e4ae92b4d7a3a21154538ed47cdeb29","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        if \u0027project_id\u0027 in entity or \u0027project_assign\u0027 in entity:"},{"line_number":517,"context_line":"            if \u0027project_assign\u0027 in entity:"},{"line_number":518,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {"},{"line_number":519,"context_line":"                    \u0027project\u0027: entity[\u0027project_assign\u0027]}"},{"line_number":520,"context_line":"            else:"},{"line_number":521,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d ("},{"line_number":522,"context_line":"                    {\u0027project\u0027: {\u0027id\u0027: entity[\u0027project_id\u0027]}})"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_0c72f3ad","line":519,"updated":"2016-01-01 12:24:44.000000000","message":"change all of these to ({...}) or remove the remove all of the extra () for consistency. Good as is!","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"9a498831c87865cb171b74b193325907070f098f","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        if \u0027project_id\u0027 in entity or \u0027project_assign\u0027 in entity:"},{"line_number":517,"context_line":"            if \u0027project_assign\u0027 in entity:"},{"line_number":518,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {"},{"line_number":519,"context_line":"                    \u0027project\u0027: entity[\u0027project_assign\u0027]}"},{"line_number":520,"context_line":"            else:"},{"line_number":521,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d ("},{"line_number":522,"context_line":"                    {\u0027project\u0027: {\u0027id\u0027: entity[\u0027project_id\u0027]}})"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_72e1d3cf","line":519,"in_reply_to":"fa69d971_0c72f3ad","updated":"2016-01-04 20:40:58.000000000","message":"Do you mind if i change the ones that are not relevant to my patch in a separate patch? (https://review.openstack.org/#/c/263415/) I don\u0027t want someone coming back saying it was an irrelevant change :)","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"06970f23b260cd57125631c274e831368dc33ccc","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        if \u0027project_id\u0027 in entity or \u0027project_assign\u0027 in entity:"},{"line_number":517,"context_line":"            if \u0027project_assign\u0027 in entity:"},{"line_number":518,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {"},{"line_number":519,"context_line":"                    \u0027project\u0027: entity[\u0027project_assign\u0027]}"},{"line_number":520,"context_line":"            else:"},{"line_number":521,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d ("},{"line_number":522,"context_line":"                    {\u0027project\u0027: {\u0027id\u0027: entity[\u0027project_id\u0027]}})"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_2db8dce4","line":519,"in_reply_to":"fa69d971_72e1d3cf","updated":"2016-01-04 20:55:44.000000000","message":"++ to not changing those in this patch","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        formatted_entity \u003d {\u0027links\u0027: {}}"},{"line_number":514,"context_line":"        inherited_assignment \u003d entity.get(\u0027inherited_to_projects\u0027)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        if \u0027project_id\u0027 in entity or \u0027project_entity\u0027 in entity:"},{"line_number":517,"context_line":"            if \u0027project_entity\u0027 in entity:"},{"line_number":518,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {"},{"line_number":519,"context_line":"                    \u0027project\u0027: entity[\u0027project_entity\u0027]}"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_857f06df","line":516,"updated":"2016-01-06 15:30:34.000000000","message":"this code is more complicated than it needs to be and it\u0027s impossible to understand. Change the manager so that it always returns a project_entity, domain_entity, user_entity so that there doesn\u0027t have to be so much branching and duplication.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        formatted_entity \u003d {\u0027links\u0027: {}}"},{"line_number":514,"context_line":"        inherited_assignment \u003d entity.get(\u0027inherited_to_projects\u0027)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        if \u0027project_id\u0027 in entity or \u0027project_entity\u0027 in entity:"},{"line_number":517,"context_line":"            if \u0027project_entity\u0027 in entity:"},{"line_number":518,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {"},{"line_number":519,"context_line":"                    \u0027project\u0027: entity[\u0027project_entity\u0027]}"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_fc44584a","line":516,"in_reply_to":"fa69d971_857f06df","updated":"2016-01-14 21:19:35.000000000","message":"I will do this in a separate patch.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                formatted_link \u003d (\u0027/projects/%s\u0027 %"},{"line_number":531,"context_line":"                                  entity[\u0027indirect\u0027][\u0027project_id\u0027])"},{"line_number":532,"context_line":"            elif \u0027project_entity\u0027 in entity:"},{"line_number":533,"context_line":"                formatted_link \u003d \u0027/projects/%s\u0027 % (entity[\u0027project_entity\u0027]"},{"line_number":534,"context_line":"                                                         [\u0027id\u0027])"},{"line_number":535,"context_line":"            else:"},{"line_number":536,"context_line":"                formatted_link \u003d \u0027/projects/%s\u0027 % entity[\u0027project_id\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_6563f242","line":533,"updated":"2016-01-06 15:30:34.000000000","message":"put the entire expression in ().\n\n (\u0027/projects/%s\u0027...","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                formatted_link \u003d (\u0027/projects/%s\u0027 %"},{"line_number":531,"context_line":"                                  entity[\u0027indirect\u0027][\u0027project_id\u0027])"},{"line_number":532,"context_line":"            elif \u0027project_entity\u0027 in entity:"},{"line_number":533,"context_line":"                formatted_link \u003d \u0027/projects/%s\u0027 % (entity[\u0027project_entity\u0027]"},{"line_number":534,"context_line":"                                                         [\u0027id\u0027])"},{"line_number":535,"context_line":"            else:"},{"line_number":536,"context_line":"                formatted_link \u003d \u0027/projects/%s\u0027 % entity[\u0027project_id\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_5c7004a4","line":533,"in_reply_to":"fa69d971_6563f242","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":536,"context_line":"                formatted_link \u003d \u0027/projects/%s\u0027 % entity[\u0027project_id\u0027]"},{"line_number":537,"context_line":"        elif \u0027domain_id\u0027 in entity or \u0027domain_entity\u0027 in entity:"},{"line_number":538,"context_line":"            if \u0027domain_entity\u0027 in entity:"},{"line_number":539,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {\u0027domain\u0027: entity[\u0027domain_entity\u0027]}"},{"line_number":540,"context_line":"                formatted_link \u003d \u0027/domains/%s\u0027 % entity[\u0027domain_entity\u0027][\u0027id\u0027]"},{"line_number":541,"context_line":"            else:"},{"line_number":542,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_17458d44","line":539,"updated":"2016-01-06 15:30:34.000000000","message":"tox -e cover shows that this new code is not tested, so there\u0027s a testcase missing.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":536,"context_line":"                formatted_link \u003d \u0027/projects/%s\u0027 % entity[\u0027project_id\u0027]"},{"line_number":537,"context_line":"        elif \u0027domain_id\u0027 in entity or \u0027domain_entity\u0027 in entity:"},{"line_number":538,"context_line":"            if \u0027domain_entity\u0027 in entity:"},{"line_number":539,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {\u0027domain\u0027: entity[\u0027domain_entity\u0027]}"},{"line_number":540,"context_line":"                formatted_link \u003d \u0027/domains/%s\u0027 % entity[\u0027domain_entity\u0027][\u0027id\u0027]"},{"line_number":541,"context_line":"            else:"},{"line_number":542,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {"}],"source_content_type":"text/x-python","patch_set":19,"id":"da6ed579_35e1c02d","line":539,"in_reply_to":"fa69d971_17458d44","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":561,"context_line":"        elif \u0027group_id\u0027 in entity or \u0027group_entity\u0027 in entity:"},{"line_number":562,"context_line":"            if \u0027group_entity\u0027 in entity:"},{"line_number":563,"context_line":"                formatted_entity[\u0027group\u0027] \u003d entity[\u0027group_entity\u0027]"},{"line_number":564,"context_line":"                formatted_link +\u003d \u0027/groups/%s\u0027 % entity[\u0027group_entity\u0027][\u0027id\u0027]"},{"line_number":565,"context_line":"            else:"},{"line_number":566,"context_line":"                formatted_entity[\u0027group\u0027] \u003d {\u0027id\u0027: entity[\u0027group_id\u0027]}"},{"line_number":567,"context_line":"                formatted_link +\u003d \u0027/groups/%s\u0027 % entity[\u0027group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_576d45ca","line":564,"updated":"2016-01-06 15:30:34.000000000","message":"this line is not tested","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":561,"context_line":"        elif \u0027group_id\u0027 in entity or \u0027group_entity\u0027 in entity:"},{"line_number":562,"context_line":"            if \u0027group_entity\u0027 in entity:"},{"line_number":563,"context_line":"                formatted_entity[\u0027group\u0027] \u003d entity[\u0027group_entity\u0027]"},{"line_number":564,"context_line":"                formatted_link +\u003d \u0027/groups/%s\u0027 % entity[\u0027group_entity\u0027][\u0027id\u0027]"},{"line_number":565,"context_line":"            else:"},{"line_number":566,"context_line":"                formatted_entity[\u0027group\u0027] \u003d {\u0027id\u0027: entity[\u0027group_id\u0027]}"},{"line_number":567,"context_line":"                formatted_link +\u003d \u0027/groups/%s\u0027 % entity[\u0027group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"da6ed579_f5e6c842","line":564,"in_reply_to":"fa69d971_576d45ca","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        effective \u003d \u0027effective\u0027 in params and ("},{"line_number":642,"context_line":"            self.query_filter_is_true(params[\u0027effective\u0027]))"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"        include_names \u003d \u0027include_names\u0027 in params and ("},{"line_number":645,"context_line":"            self.query_filter_is_true(params[\u0027include_names\u0027]))"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"        if \u0027scope.OS-INHERIT:inherited_to\u0027 in params:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_05c3168a","line":644,"range":{"start_line":644,"start_character":54,"end_line":644,"end_character":55},"updated":"2016-01-06 15:30:34.000000000","message":"rather than put the ( at the end wrap the whole expression in (): (\u0027include_names in params and","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        effective \u003d \u0027effective\u0027 in params and ("},{"line_number":642,"context_line":"            self.query_filter_is_true(params[\u0027effective\u0027]))"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"        include_names \u003d \u0027include_names\u0027 in params and ("},{"line_number":645,"context_line":"            self.query_filter_is_true(params[\u0027include_names\u0027]))"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"        if \u0027scope.OS-INHERIT:inherited_to\u0027 in params:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_2d14f54a","line":644,"range":{"start_line":644,"start_character":54,"end_line":644,"end_character":55},"in_reply_to":"fa69d971_05c3168a","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b8a13224d7af1cf49254992ef0cb54786dc93b28","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                inherited_assignment \u003d True"},{"line_number":530,"context_line":"                formatted_link \u003d (\u0027/projects/%s\u0027 %"},{"line_number":531,"context_line":"                                  entity[\u0027indirect\u0027][\u0027project_id\u0027])"},{"line_number":532,"context_line":"            elif \u0027project_entity\u0027 in entity:"},{"line_number":533,"context_line":"                formatted_link \u003d (\u0027/projects/%s\u0027 % entity[\u0027project_entity\u0027]"},{"line_number":534,"context_line":"                                                         [\u0027id\u0027])"},{"line_number":535,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_ff0395b6","line":532,"updated":"2016-01-19 13:13:36.000000000","message":"Should this actually be \"in entity.get(\"indirect\", {})\" ?","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"3cf0d4268d855ca918b74d015a9c33fd660470ff","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                inherited_assignment \u003d True"},{"line_number":530,"context_line":"                formatted_link \u003d (\u0027/projects/%s\u0027 %"},{"line_number":531,"context_line":"                                  entity[\u0027indirect\u0027][\u0027project_id\u0027])"},{"line_number":532,"context_line":"            elif \u0027project_entity\u0027 in entity:"},{"line_number":533,"context_line":"                formatted_link \u003d (\u0027/projects/%s\u0027 % entity[\u0027project_entity\u0027]"},{"line_number":534,"context_line":"                                                         [\u0027id\u0027])"},{"line_number":535,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_2097c991","line":532,"in_reply_to":"ba63e191_ff0395b6","updated":"2016-01-19 15:26:23.000000000","message":"isn\u0027t indirect covered at L528? Sorry if this is confusing. I am trying to make it more clear but this method is not giving me much room to play.","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2f4c29a6c2b3f199a5453c8b837f201763ab6959","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                inherited_assignment \u003d True"},{"line_number":530,"context_line":"                formatted_link \u003d (\u0027/projects/%s\u0027 %"},{"line_number":531,"context_line":"                                  entity[\u0027indirect\u0027][\u0027project_id\u0027])"},{"line_number":532,"context_line":"            elif \u0027project_entity\u0027 in entity:"},{"line_number":533,"context_line":"                formatted_link \u003d (\u0027/projects/%s\u0027 % entity[\u0027project_entity\u0027]"},{"line_number":534,"context_line":"                                                         [\u0027id\u0027])"},{"line_number":535,"context_line":"            else:"},{"line_number":536,"context_line":"                formatted_link \u003d \u0027/projects/%s\u0027 % entity[\u0027project_id\u0027]"},{"line_number":537,"context_line":"        elif \u0027domain_id\u0027 in entity or \u0027domain_entity\u0027 in entity:"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_bef20d99","line":534,"range":{"start_line":532,"start_character":12,"end_line":534,"end_character":64},"updated":"2016-01-19 09:31:16.000000000","message":"AFAICT, this will give you the exact same as the block above...","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"3cf0d4268d855ca918b74d015a9c33fd660470ff","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                inherited_assignment \u003d True"},{"line_number":530,"context_line":"                formatted_link \u003d (\u0027/projects/%s\u0027 %"},{"line_number":531,"context_line":"                                  entity[\u0027indirect\u0027][\u0027project_id\u0027])"},{"line_number":532,"context_line":"            elif \u0027project_entity\u0027 in entity:"},{"line_number":533,"context_line":"                formatted_link \u003d (\u0027/projects/%s\u0027 % entity[\u0027project_entity\u0027]"},{"line_number":534,"context_line":"                                                         [\u0027id\u0027])"},{"line_number":535,"context_line":"            else:"},{"line_number":536,"context_line":"                formatted_link \u003d \u0027/projects/%s\u0027 % entity[\u0027project_id\u0027]"},{"line_number":537,"context_line":"        elif \u0027domain_id\u0027 in entity or \u0027domain_entity\u0027 in entity:"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_91828551","line":534,"range":{"start_line":532,"start_character":12,"end_line":534,"end_character":64},"in_reply_to":"ba63e191_bef20d99","updated":"2016-01-19 15:26:23.000000000","message":"yes hopefully it will :-) in the block on line 532 the entity contains \u0027project_id\u0027 where here it contains the entire formatted entity.  since the response contains about 10 more attributes the entity needs to be formatted before it gets to this method. Otherwise this method will be more confusing than it already is.","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2f4c29a6c2b3f199a5453c8b837f201763ab6959","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        elif \u0027domain_id\u0027 in entity or \u0027domain_entity\u0027 in entity:"},{"line_number":538,"context_line":"            if \u0027domain_entity\u0027 in entity:"},{"line_number":539,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {\u0027domain\u0027: entity[\u0027domain_entity\u0027]}"},{"line_number":540,"context_line":"                formatted_link \u003d \u0027/domains/%s\u0027 % entity[\u0027domain_entity\u0027][\u0027id\u0027]"},{"line_number":541,"context_line":"            else:"},{"line_number":542,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {"},{"line_number":543,"context_line":"                    \u0027domain\u0027: {\u0027id\u0027: entity[\u0027domain_id\u0027]}}"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_5e3af137","line":540,"range":{"start_line":540,"start_character":16,"end_line":540,"end_character":78},"updated":"2016-01-19 09:31:16.000000000","message":"this looks like the same as on line 544","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"3cf0d4268d855ca918b74d015a9c33fd660470ff","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        elif \u0027domain_id\u0027 in entity or \u0027domain_entity\u0027 in entity:"},{"line_number":538,"context_line":"            if \u0027domain_entity\u0027 in entity:"},{"line_number":539,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {\u0027domain\u0027: entity[\u0027domain_entity\u0027]}"},{"line_number":540,"context_line":"                formatted_link \u003d \u0027/domains/%s\u0027 % entity[\u0027domain_entity\u0027][\u0027id\u0027]"},{"line_number":541,"context_line":"            else:"},{"line_number":542,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {"},{"line_number":543,"context_line":"                    \u0027domain\u0027: {\u0027id\u0027: entity[\u0027domain_id\u0027]}}"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_b18d4933","line":540,"range":{"start_line":540,"start_character":16,"end_line":540,"end_character":78},"in_reply_to":"ba63e191_5e3af137","updated":"2016-01-19 15:26:23.000000000","message":"The above answer is pretty much the same here.  Is it wrong to be formatting the entity before hand so it does not clutter this method?","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3ece5df008672c4920efd2d222a09bd6527cd387","unresolved":false,"context_lines":[{"line_number":514,"context_line":"        inherited_assignment \u003d entity.get(\u0027inherited_to_projects\u0027)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        if \u0027project_id\u0027 in entity:"},{"line_number":517,"context_line":"            if \u0027project_name\u0027 in entity:"},{"line_number":518,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {\u0027project\u0027: {"},{"line_number":519,"context_line":"                    \u0027id\u0027: entity[\u0027project_id\u0027],"},{"line_number":520,"context_line":"                    \u0027name\u0027: entity[\u0027project_name\u0027],"},{"line_number":521,"context_line":"                    \u0027domain\u0027: {\u0027id\u0027: entity[\u0027project_domain_id\u0027],"},{"line_number":522,"context_line":"                               \u0027name\u0027: entity[\u0027project_domain_name\u0027]}}}"},{"line_number":523,"context_line":"            else:"},{"line_number":524,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {"},{"line_number":525,"context_line":"                    \u0027project\u0027: {\u0027id\u0027: entity[\u0027project_id\u0027]}}"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"            if \u0027domain_id\u0027 in entity.get(\u0027indirect\u0027, {}):"},{"line_number":528,"context_line":"                inherited_assignment \u003d True"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba63e191_2b07931d","line":525,"range":{"start_line":517,"start_character":12,"end_line":525,"end_character":60},"updated":"2016-01-19 22:11:40.000000000","message":"i feel like there should be a\n\n  formatted_link \u003d ...\n\nsomewhere after here","commit_id":"f51d34bde3faabc3638e065b2f2315c84e33ba8f"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"48c6924ba6451ab0066c4e4295182de93cca3510","unresolved":false,"context_lines":[{"line_number":533,"context_line":"                formatted_link \u003d (\u0027/projects/%s\u0027 %"},{"line_number":534,"context_line":"                                  entity[\u0027indirect\u0027][\u0027project_id\u0027])"},{"line_number":535,"context_line":"            else:"},{"line_number":536,"context_line":"                formatted_link \u003d \u0027/projects/%s\u0027 % entity[\u0027project_id\u0027]"},{"line_number":537,"context_line":"        elif \u0027domain_id\u0027 in entity:"},{"line_number":538,"context_line":"            if \u0027domain_name\u0027 in entity:"},{"line_number":539,"context_line":"                formatted_entity[\u0027scope\u0027] \u003d {"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba63e191_56d2aa01","line":536,"range":{"start_line":536,"start_character":16,"end_line":536,"end_character":30},"updated":"2016-01-19 22:23:51.000000000","message":"Steve its down here :)","commit_id":"f51d34bde3faabc3638e065b2f2315c84e33ba8f"}],"keystone/assignment/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13f1130e0610fce99cf94efc88ecd6184a5395da","unresolved":false,"context_lines":[{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        \"\"\""},{"line_number":806,"context_line":"        def _get_names_for_list_role_assin(role_assignments):"},{"line_number":807,"context_line":"            if include_names:"},{"line_number":808,"context_line":"                for location, entity in enumerate(role_assignments):"},{"line_number":809,"context_line":"                    if entity.get(\u0027user_id\u0027):"},{"line_number":810,"context_line":"                        usr \u003d self.identity_api.get_user(entity"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_4c6a171c","line":807,"updated":"2015-11-25 19:40:22.000000000","message":"checking `include_names` before going into the function will also make the rest of this easier to read, since itll go tabbed back 4 spots.","commit_id":"f5449a68c05cb34215a4ad9a84d95a5f0d73d8c4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e012a61394d7a01da054dfd78e3a9f2ab22fa85c","unresolved":false,"context_lines":[{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        \"\"\""},{"line_number":806,"context_line":"        def _get_names_for_list_role_assin(role_assignments):"},{"line_number":807,"context_line":"            if include_names:"},{"line_number":808,"context_line":"                for location, entity in enumerate(role_assignments):"},{"line_number":809,"context_line":"                    if entity.get(\u0027user_id\u0027):"},{"line_number":810,"context_line":"                        usr \u003d self.identity_api.get_user(entity"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_a32716b5","line":807,"updated":"2015-11-25 18:20:12.000000000","message":"would personally prefer this passed in as a param....but that is just that....personal preference.","commit_id":"f5449a68c05cb34215a4ad9a84d95a5f0d73d8c4"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"4ebdec808bef48bc06d3267680ffdfaa5366fe8e","unresolved":false,"context_lines":[{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        \"\"\""},{"line_number":806,"context_line":"        def _get_names_for_list_role_assin(role_assignments):"},{"line_number":807,"context_line":"            if include_names:"},{"line_number":808,"context_line":"                for location, entity in enumerate(role_assignments):"},{"line_number":809,"context_line":"                    if entity.get(\u0027user_id\u0027):"},{"line_number":810,"context_line":"                        usr \u003d self.identity_api.get_user(entity"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_77ac84a0","line":807,"in_reply_to":"9a8ffd7b_4c6a171c","updated":"2015-11-25 19:59:10.000000000","message":"Done","commit_id":"f5449a68c05cb34215a4ad9a84d95a5f0d73d8c4"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"4ebdec808bef48bc06d3267680ffdfaa5366fe8e","unresolved":false,"context_lines":[{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        \"\"\""},{"line_number":806,"context_line":"        def _get_names_for_list_role_assin(role_assignments):"},{"line_number":807,"context_line":"            if include_names:"},{"line_number":808,"context_line":"                for location, entity in enumerate(role_assignments):"},{"line_number":809,"context_line":"                    if entity.get(\u0027user_id\u0027):"},{"line_number":810,"context_line":"                        usr \u003d self.identity_api.get_user(entity"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_6ca6fb11","line":807,"in_reply_to":"9a8ffd7b_a32716b5","updated":"2015-11-25 19:59:10.000000000","message":"Done","commit_id":"f5449a68c05cb34215a4ad9a84d95a5f0d73d8c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13f1130e0610fce99cf94efc88ecd6184a5395da","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                        usr \u003d self.identity_api.get_user(entity"},{"line_number":811,"context_line":"                                                         .get(\u0027user_id\u0027))"},{"line_number":812,"context_line":"                        role_assignments[location][\u0027name\u0027] \u003d usr[\u0027name\u0027]"},{"line_number":813,"context_line":"                    elif entity.get(\u0027group_id\u0027):"},{"line_number":814,"context_line":"                        grp \u003d self.identity_api.get_group(entity"},{"line_number":815,"context_line":"                                                          .get(\u0027group_id\u0027))"},{"line_number":816,"context_line":"                        role_assignments[location][\u0027name\u0027] \u003d grp[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_4c7457ce","line":813,"updated":"2015-11-25 19:40:22.000000000","message":"do entities normally have more than one type (user/group/etc)?\n\nyou can probably just do the name addition once at the end of the loop \n\n  if entity.get(\u0027user_id\u0027)\n    ref \u003d self.identity_api.get_user(entity[\u0027user_id\u0027])\n  elif entity.get(\u0027group_id\u0027)\n    ref \u003d self.identity_api.get_group(entity[\u0027group_id\u0027])\n  elif entity.get(\u0027project_id\u0027)\n    ...\n  elif entity.get(\u0027domain_id\u0027)\n    ...\n  elif entity.get(\u0027role_id\u0027)\n    ...\n  else\n     continue\n  role_assignments[location][\u0027name\u0027] \u003d ref[\u0027name\u0027]","commit_id":"f5449a68c05cb34215a4ad9a84d95a5f0d73d8c4"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"4ebdec808bef48bc06d3267680ffdfaa5366fe8e","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                        usr \u003d self.identity_api.get_user(entity"},{"line_number":811,"context_line":"                                                         .get(\u0027user_id\u0027))"},{"line_number":812,"context_line":"                        role_assignments[location][\u0027name\u0027] \u003d usr[\u0027name\u0027]"},{"line_number":813,"context_line":"                    elif entity.get(\u0027group_id\u0027):"},{"line_number":814,"context_line":"                        grp \u003d self.identity_api.get_group(entity"},{"line_number":815,"context_line":"                                                          .get(\u0027group_id\u0027))"},{"line_number":816,"context_line":"                        role_assignments[location][\u0027name\u0027] \u003d grp[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_17c5f859","line":813,"in_reply_to":"9a8ffd7b_4c7457ce","updated":"2015-11-25 19:59:10.000000000","message":"we are thinking the same thing. Already done! (just not uploaded)  Done","commit_id":"f5449a68c05cb34215a4ad9a84d95a5f0d73d8c4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e012a61394d7a01da054dfd78e3a9f2ab22fa85c","unresolved":false,"context_lines":[{"line_number":813,"context_line":"                    elif entity.get(\u0027group_id\u0027):"},{"line_number":814,"context_line":"                        grp \u003d self.identity_api.get_group(entity"},{"line_number":815,"context_line":"                                                          .get(\u0027group_id\u0027))"},{"line_number":816,"context_line":"                        role_assignments[location][\u0027name\u0027] \u003d grp[\u0027name\u0027]"},{"line_number":817,"context_line":"            return role_assignments"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        if not CONF.os_inherit.enabled:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_a712c360","line":816,"updated":"2015-11-25 18:20:12.000000000","message":"don\u0027t we also need to do projects, domains and roles?","commit_id":"f5449a68c05cb34215a4ad9a84d95a5f0d73d8c4"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"4ebdec808bef48bc06d3267680ffdfaa5366fe8e","unresolved":false,"context_lines":[{"line_number":813,"context_line":"                    elif entity.get(\u0027group_id\u0027):"},{"line_number":814,"context_line":"                        grp \u003d self.identity_api.get_group(entity"},{"line_number":815,"context_line":"                                                          .get(\u0027group_id\u0027))"},{"line_number":816,"context_line":"                        role_assignments[location][\u0027name\u0027] \u003d grp[\u0027name\u0027]"},{"line_number":817,"context_line":"            return role_assignments"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        if not CONF.os_inherit.enabled:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_8ca9dfe1","line":816,"in_reply_to":"9a8ffd7b_a712c360","updated":"2015-11-25 19:59:10.000000000","message":"Done","commit_id":"f5449a68c05cb34215a4ad9a84d95a5f0d73d8c4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13f1130e0610fce99cf94efc88ecd6184a5395da","unresolved":false,"context_lines":[{"line_number":813,"context_line":"                    elif entity.get(\u0027group_id\u0027):"},{"line_number":814,"context_line":"                        grp \u003d self.identity_api.get_group(entity"},{"line_number":815,"context_line":"                                                          .get(\u0027group_id\u0027))"},{"line_number":816,"context_line":"                        role_assignments[location][\u0027name\u0027] \u003d grp[\u0027name\u0027]"},{"line_number":817,"context_line":"            return role_assignments"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        if not CONF.os_inherit.enabled:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_0c740ffb","line":816,"in_reply_to":"9a8ffd7b_a712c360","updated":"2015-11-25 19:40:22.000000000","message":"yes we do!","commit_id":"f5449a68c05cb34215a4ad9a84d95a5f0d73d8c4"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a10ae5734d6c0716343bf6be44a749214fdc7fe9","unresolved":false,"context_lines":[{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        \"\"\""},{"line_number":806,"context_line":"        def _get_names_for_list_role_assin(role_assignments):"},{"line_number":807,"context_line":"            for location, entity in enumerate(role_assignments):"},{"line_number":808,"context_line":"                if entity.get(\u0027user_id\u0027):"},{"line_number":809,"context_line":"                    role_assignments[location][\u0027user_name\u0027] \u003d ("},{"line_number":810,"context_line":"                        self.identity_api.get_user(entity[\u0027user_id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_ba01836c","line":807,"updated":"2015-12-04 22:08:30.000000000","message":"Why is this not just \u0027for role_assignment in role_assignments\u0027 and then use role_assignment instead of role_assignments[location]?","commit_id":"a6d4d9d5384cb6d6f62c0ab5b7f1781bd1a4c9b9"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"9f83d907b0add75b6dc7f339e180f7e27eafd702","unresolved":false,"context_lines":[{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        \"\"\""},{"line_number":806,"context_line":"        def _get_names_for_list_role_assin(role_assignments):"},{"line_number":807,"context_line":"            for location, entity in enumerate(role_assignments):"},{"line_number":808,"context_line":"                if entity.get(\u0027user_id\u0027):"},{"line_number":809,"context_line":"                    role_assignments[location][\u0027user_name\u0027] \u003d ("},{"line_number":810,"context_line":"                        self.identity_api.get_user(entity[\u0027user_id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_7360f2a5","line":807,"in_reply_to":"7a740942_ba01836c","updated":"2015-12-07 15:47:03.000000000","message":"For some reason i didn\u0027t think this was possible to mutate the original dictionary like this, Thanks.  I learned something new.","commit_id":"a6d4d9d5384cb6d6f62c0ab5b7f1781bd1a4c9b9"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"9f83d907b0add75b6dc7f339e180f7e27eafd702","unresolved":false,"context_lines":[{"line_number":821,"context_line":"                    role_assignments[location][\u0027project_name\u0027] \u003d ("},{"line_number":822,"context_line":"                        self.resource_api.get_project(entity[\u0027project_id\u0027])"},{"line_number":823,"context_line":"                        [\u0027name\u0027])"},{"line_number":824,"context_line":"                if entity.get(\u0027domain_id\u0027):"},{"line_number":825,"context_line":"                    role_assignments[location][\u0027domain_name\u0027] \u003d ("},{"line_number":826,"context_line":"                        self.resource_api.get_domain(entity[\u0027domain_id\u0027])"},{"line_number":827,"context_line":"                        [\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_ac2ba281","line":824,"updated":"2015-12-07 15:47:03.000000000","message":"not covered in test","commit_id":"a6d4d9d5384cb6d6f62c0ab5b7f1781bd1a4c9b9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a10ae5734d6c0716343bf6be44a749214fdc7fe9","unresolved":false,"context_lines":[{"line_number":839,"context_line":"                [x[\u0027id\u0027] for x in"},{"line_number":840,"context_line":"                    self.resource_api.list_projects_in_subtree(project_id)])"},{"line_number":841,"context_line":""},{"line_number":842,"context_line":"        role_assignments \u003d None"},{"line_number":843,"context_line":"        if effective:"},{"line_number":844,"context_line":"            role_assignments \u003d self._list_effective_role_assignments("},{"line_number":845,"context_line":"                role_id, user_id, group_id, domain_id, project_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_5a409fa5","line":842,"updated":"2015-12-04 22:08:30.000000000","message":"This isn\u0027t needed since you define role_assignments in both cases below","commit_id":"a6d4d9d5384cb6d6f62c0ab5b7f1781bd1a4c9b9"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"9f83d907b0add75b6dc7f339e180f7e27eafd702","unresolved":false,"context_lines":[{"line_number":839,"context_line":"                [x[\u0027id\u0027] for x in"},{"line_number":840,"context_line":"                    self.resource_api.list_projects_in_subtree(project_id)])"},{"line_number":841,"context_line":""},{"line_number":842,"context_line":"        role_assignments \u003d None"},{"line_number":843,"context_line":"        if effective:"},{"line_number":844,"context_line":"            role_assignments \u003d self._list_effective_role_assignments("},{"line_number":845,"context_line":"                role_id, user_id, group_id, domain_id, project_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_d801c507","line":842,"in_reply_to":"7a740942_5a409fa5","updated":"2015-12-07 15:47:03.000000000","message":"Done","commit_id":"a6d4d9d5384cb6d6f62c0ab5b7f1781bd1a4c9b9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        inherited roles retrieval, inherited role assignments will be ignored."},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        \"\"\""},{"line_number":806,"context_line":"        def _get_names_for_list_role_assin(role_assignments):"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"            for role_asgmt in role_assignments:"},{"line_number":809,"context_line":"                if role_asgmt.get(\u0027user_id\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_6ee996b6","line":806,"updated":"2015-12-08 18:41:06.000000000","message":"since this function is embedded in the method, no need to duplicate the method name in the function name.","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        inherited roles retrieval, inherited role assignments will be ignored."},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        \"\"\""},{"line_number":806,"context_line":"        def _get_names_for_list_role_assin(role_assignments):"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"            for role_asgmt in role_assignments:"},{"line_number":809,"context_line":"                if role_asgmt.get(\u0027user_id\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_7fb942cb","line":806,"in_reply_to":"7a740942_6ee996b6","updated":"2015-12-08 22:20:57.000000000","message":"Done","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":809,"context_line":"                if role_asgmt.get(\u0027user_id\u0027):"},{"line_number":810,"context_line":"                    role_asgmt[\u0027user_name\u0027] \u003d ("},{"line_number":811,"context_line":"                        self.identity_api.get_user(role_asgmt[\u0027user_id\u0027])"},{"line_number":812,"context_line":"                        [\u0027name\u0027])"},{"line_number":813,"context_line":"                if role_asgmt.get(\u0027group_id\u0027):"},{"line_number":814,"context_line":"                    role_asgmt[\u0027group_name\u0027] \u003d ("},{"line_number":815,"context_line":"                        self.identity_api.get_group(role_asgmt[\u0027group_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_ee1a66c5","line":812,"updated":"2015-12-08 18:41:06.000000000","message":"you\u0027re going to need to provide the user\u0027s domain name, too.","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":809,"context_line":"                if role_asgmt.get(\u0027user_id\u0027):"},{"line_number":810,"context_line":"                    role_asgmt[\u0027user_name\u0027] \u003d ("},{"line_number":811,"context_line":"                        self.identity_api.get_user(role_asgmt[\u0027user_id\u0027])"},{"line_number":812,"context_line":"                        [\u0027name\u0027])"},{"line_number":813,"context_line":"                if role_asgmt.get(\u0027group_id\u0027):"},{"line_number":814,"context_line":"                    role_asgmt[\u0027group_name\u0027] \u003d ("},{"line_number":815,"context_line":"                        self.identity_api.get_group(role_asgmt[\u0027group_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_ba61f8d4","line":812,"in_reply_to":"7a740942_ee1a66c5","updated":"2015-12-08 22:20:57.000000000","message":"Done","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":813,"context_line":"                if role_asgmt.get(\u0027group_id\u0027):"},{"line_number":814,"context_line":"                    role_asgmt[\u0027group_name\u0027] \u003d ("},{"line_number":815,"context_line":"                        self.identity_api.get_group(role_asgmt[\u0027group_id\u0027])"},{"line_number":816,"context_line":"                        [\u0027name\u0027])"},{"line_number":817,"context_line":"                if role_asgmt.get(\u0027role_id\u0027):"},{"line_number":818,"context_line":"                    role_asgmt[\u0027role_name\u0027] \u003d ("},{"line_number":819,"context_line":"                        self.role_api.get_role(role_asgmt[\u0027role_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_4e829ac9","line":816,"updated":"2015-12-08 18:41:06.000000000","message":"you\u0027re going to need to provide the group\u0027s domain name, too.","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":813,"context_line":"                if role_asgmt.get(\u0027group_id\u0027):"},{"line_number":814,"context_line":"                    role_asgmt[\u0027group_name\u0027] \u003d ("},{"line_number":815,"context_line":"                        self.identity_api.get_group(role_asgmt[\u0027group_id\u0027])"},{"line_number":816,"context_line":"                        [\u0027name\u0027])"},{"line_number":817,"context_line":"                if role_asgmt.get(\u0027role_id\u0027):"},{"line_number":818,"context_line":"                    role_asgmt[\u0027role_name\u0027] \u003d ("},{"line_number":819,"context_line":"                        self.role_api.get_role(role_asgmt[\u0027role_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_3aa42806","line":816,"in_reply_to":"7a740942_4e829ac9","updated":"2015-12-08 22:20:57.000000000","message":"Done","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":821,"context_line":"                if role_asgmt.get(\u0027project_id\u0027):"},{"line_number":822,"context_line":"                    role_asgmt[\u0027project_name\u0027] \u003d ("},{"line_number":823,"context_line":"                        self.resource_api.get_project(role_asgmt[\u0027project_id\u0027])"},{"line_number":824,"context_line":"                        [\u0027name\u0027])"},{"line_number":825,"context_line":"                if role_asgmt.get(\u0027domain_id\u0027):"},{"line_number":826,"context_line":"                    role_asgmt[\u0027domain_name\u0027] \u003d ("},{"line_number":827,"context_line":"                        self.resource_api.get_domain(role_asgmt[\u0027domain_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_ee71060d","line":824,"updated":"2015-12-08 18:41:06.000000000","message":"you\u0027re going to need to provide the project\u0027s domain name, too.","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":821,"context_line":"                if role_asgmt.get(\u0027project_id\u0027):"},{"line_number":822,"context_line":"                    role_asgmt[\u0027project_name\u0027] \u003d ("},{"line_number":823,"context_line":"                        self.resource_api.get_project(role_asgmt[\u0027project_id\u0027])"},{"line_number":824,"context_line":"                        [\u0027name\u0027])"},{"line_number":825,"context_line":"                if role_asgmt.get(\u0027domain_id\u0027):"},{"line_number":826,"context_line":"                    role_asgmt[\u0027domain_name\u0027] \u003d ("},{"line_number":827,"context_line":"                        self.resource_api.get_domain(role_asgmt[\u0027domain_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_baded5da","line":824,"in_reply_to":"7a740942_ee71060d","updated":"2015-12-08 22:20:57.000000000","message":"Done","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":826,"context_line":"                    role_asgmt[\u0027domain_name\u0027] \u003d ("},{"line_number":827,"context_line":"                        self.resource_api.get_domain(role_asgmt[\u0027domain_id\u0027])"},{"line_number":828,"context_line":"                        [\u0027name\u0027])"},{"line_number":829,"context_line":"            return role_assignments"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        if not CONF.os_inherit.enabled:"},{"line_number":832,"context_line":"            if inherited:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_ae31be5b","line":829,"updated":"2015-12-08 18:41:06.000000000","message":"it would be fancier and could lead to a more efficient implementation to use a generator for this.","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":826,"context_line":"                    role_asgmt[\u0027domain_name\u0027] \u003d ("},{"line_number":827,"context_line":"                        self.resource_api.get_domain(role_asgmt[\u0027domain_id\u0027])"},{"line_number":828,"context_line":"                        [\u0027name\u0027])"},{"line_number":829,"context_line":"            return role_assignments"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        if not CONF.os_inherit.enabled:"},{"line_number":832,"context_line":"            if inherited:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_9f18aed4","line":829,"in_reply_to":"7a740942_ae31be5b","updated":"2015-12-08 22:20:57.000000000","message":"I will look into generators","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":850,"context_line":""},{"line_number":851,"context_line":"        if include_names:"},{"line_number":852,"context_line":"            return _get_names_for_list_role_assin(role_assignments)"},{"line_number":853,"context_line":"        else:"},{"line_number":854,"context_line":"            return role_assignments"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"    def delete_tokens_for_role_assignments(self, role_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_0edfb2d9","line":853,"updated":"2015-12-08 18:41:06.000000000","message":"suggest remove the else since the interpreter will never get past the if/else block.","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":850,"context_line":""},{"line_number":851,"context_line":"        if include_names:"},{"line_number":852,"context_line":"            return _get_names_for_list_role_assin(role_assignments)"},{"line_number":853,"context_line":"        else:"},{"line_number":854,"context_line":"            return role_assignments"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"    def delete_tokens_for_role_assignments(self, role_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_7592c14d","line":853,"in_reply_to":"7a740942_0edfb2d9","updated":"2015-12-08 22:20:57.000000000","message":"Done","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e0d6af9f78489ba5d013bfb122fbebcce38d2de8","unresolved":false,"context_lines":[{"line_number":788,"context_line":"    def list_role_assignments(self, role_id\u003dNone, user_id\u003dNone, group_id\u003dNone,"},{"line_number":789,"context_line":"                              domain_id\u003dNone, project_id\u003dNone,"},{"line_number":790,"context_line":"                              include_subtree\u003dFalse, inherited\u003dNone,"},{"line_number":791,"context_line":"                              effective\u003dNone, include_names\u003dFalse):"},{"line_number":792,"context_line":"        \"\"\"List role assignments, honoring effective mode and provided filters."},{"line_number":793,"context_line":""},{"line_number":794,"context_line":"        Returns a list of role assignments, where their attributes match the"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_0911e15c","line":791,"updated":"2015-12-08 22:56:37.000000000","message":"This is going to require a new version of the driver interface, as such you should look at https://review.openstack.org/#/c/242853/ . You\u0027re going to have to write an adapter for the V8 driver that removes the include_names parameter.","commit_id":"fa06329c70c5c79d29620f54071716450ba68a6f"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"b4b4918b11c47539e7959934a8f8d4c09a04e073","unresolved":false,"context_lines":[{"line_number":788,"context_line":"    def list_role_assignments(self, role_id\u003dNone, user_id\u003dNone, group_id\u003dNone,"},{"line_number":789,"context_line":"                              domain_id\u003dNone, project_id\u003dNone,"},{"line_number":790,"context_line":"                              include_subtree\u003dFalse, inherited\u003dNone,"},{"line_number":791,"context_line":"                              effective\u003dNone, include_names\u003dFalse):"},{"line_number":792,"context_line":"        \"\"\"List role assignments, honoring effective mode and provided filters."},{"line_number":793,"context_line":""},{"line_number":794,"context_line":"        Returns a list of role assignments, where their attributes match the"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_515ddd13","line":791,"in_reply_to":"7a740942_0911e15c","updated":"2015-12-10 17:29:00.000000000","message":"Brant i will look into this next.","commit_id":"fa06329c70c5c79d29620f54071716450ba68a6f"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"1734d07058abb4e7c06fc5fbfd3a1b794c31eae7","unresolved":false,"context_lines":[{"line_number":788,"context_line":"    def list_role_assignments(self, role_id\u003dNone, user_id\u003dNone, group_id\u003dNone,"},{"line_number":789,"context_line":"                              domain_id\u003dNone, project_id\u003dNone,"},{"line_number":790,"context_line":"                              include_subtree\u003dFalse, inherited\u003dNone,"},{"line_number":791,"context_line":"                              effective\u003dNone, include_names\u003dFalse):"},{"line_number":792,"context_line":"        \"\"\"List role assignments, honoring effective mode and provided filters."},{"line_number":793,"context_line":""},{"line_number":794,"context_line":"        Returns a list of role assignments, where their attributes match the"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_023c3892","line":791,"in_reply_to":"7a740942_0911e15c","updated":"2015-12-14 19:36:55.000000000","message":"Done","commit_id":"fa06329c70c5c79d29620f54071716450ba68a6f"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"4aa2125a764a7c6079fb79f7b37aa8fd267a8934","unresolved":false,"context_lines":[{"line_number":820,"context_line":"        \"\"\""},{"line_number":821,"context_line":"        def _get_names(role_assignments):"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"            for role_asgmt in role_assignments:"},{"line_number":824,"context_line":"                if role_asgmt.get(\u0027user_id\u0027):"},{"line_number":825,"context_line":"                    _user \u003d self.identity_api.get_user(role_asgmt[\u0027user_id\u0027])"},{"line_number":826,"context_line":"                    role_asgmt[\u0027user_name\u0027] \u003d _user[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_a2e764ab","line":823,"updated":"2015-12-14 19:38:02.000000000","message":"looking into making this more efficient next :-)","commit_id":"ee8b9b7b81a6e6db75c3e23e34488ee60e4c7e27"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"e620eaadbebb99db801ecf41735c8e5fc861c022","unresolved":false,"context_lines":[{"line_number":820,"context_line":"        \"\"\""},{"line_number":821,"context_line":"        def _get_names(role_assignments):"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"            for role_asgmt in role_assignments:"},{"line_number":824,"context_line":"                if role_asgmt.get(\u0027user_id\u0027):"},{"line_number":825,"context_line":"                    _user \u003d self.identity_api.get_user(role_asgmt[\u0027user_id\u0027])"},{"line_number":826,"context_line":"                    role_asgmt[\u0027user_name\u0027] \u003d _user[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_5970c972","line":823,"in_reply_to":"5a710552_a2e764ab","updated":"2015-12-15 14:03:15.000000000","message":"It worth verify if you already have the information, since you probably have more than one assignment for role, project and domain?\n\nSo, you don\u0027t need to go to db, in every request, since you already have this information.","commit_id":"ee8b9b7b81a6e6db75c3e23e34488ee60e4c7e27"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"2c025568b82a0dfcc1b79e53d4905d46c2fed24b","unresolved":false,"context_lines":[{"line_number":823,"context_line":""},{"line_number":824,"context_line":"        def _format_role_data(self, entity_identity):"},{"line_number":825,"context_line":"            entity_domain_name \u003d self.resource_api.get_domain("},{"line_number":826,"context_line":"                entity_identity[\u0027domain_id\u0027])[\u0027name\u0027]"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"            return {"},{"line_number":829,"context_line":"                \u0027id\u0027: entity_identity[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a7b0d38_8eb2f792","line":826,"updated":"2015-12-29 00:16:09.000000000","message":"We should refer to the cache before making the api call to retrieve the domain. Also, we should update the cache after the api call is made.","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"d199f6783116df9facc61a4c491c4a1b992747d3","unresolved":false,"context_lines":[{"line_number":823,"context_line":""},{"line_number":824,"context_line":"        def _format_role_data(self, entity_identity):"},{"line_number":825,"context_line":"            entity_domain_name \u003d self.resource_api.get_domain("},{"line_number":826,"context_line":"                entity_identity[\u0027domain_id\u0027])[\u0027name\u0027]"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"            return {"},{"line_number":829,"context_line":"                \u0027id\u0027: entity_identity[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa69d971_cafe4305","line":826,"in_reply_to":"1a7b0d38_8eb2f792","updated":"2015-12-29 15:58:26.000000000","message":"yes we should be able to cache the domain name too. i will do it now. thanks!","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"2c025568b82a0dfcc1b79e53d4905d46c2fed24b","unresolved":false,"context_lines":[{"line_number":843,"context_line":"                if user_id in gathered_ids[\u0027user_assign\u0027]:"},{"line_number":844,"context_line":"                    new_role[\u0027user_assign\u0027] \u003d _get_role_from_assign("},{"line_number":845,"context_line":"                        user_id,"},{"line_number":846,"context_line":"                        \u0027user\u0027)"},{"line_number":847,"context_line":"                else:"},{"line_number":848,"context_line":"                    _user \u003d self.identity_api.get_user(user_id)"},{"line_number":849,"context_line":"                    new_role[\u0027user_assign\u0027] \u003d _format_role_data(_user)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a7b0d38_eeea9b73","line":846,"updated":"2015-12-29 00:16:09.000000000","message":"We can avoid calling _get_role_from_assign() function by caching the fully formatted entity instead of just its id.","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"d199f6783116df9facc61a4c491c4a1b992747d3","unresolved":false,"context_lines":[{"line_number":843,"context_line":"                if user_id in gathered_ids[\u0027user_assign\u0027]:"},{"line_number":844,"context_line":"                    new_role[\u0027user_assign\u0027] \u003d _get_role_from_assign("},{"line_number":845,"context_line":"                        user_id,"},{"line_number":846,"context_line":"                        \u0027user\u0027)"},{"line_number":847,"context_line":"                else:"},{"line_number":848,"context_line":"                    _user \u003d self.identity_api.get_user(user_id)"},{"line_number":849,"context_line":"                    new_role[\u0027user_assign\u0027] \u003d _format_role_data(_user)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a7b0d38_fab32298","line":846,"in_reply_to":"1a7b0d38_eeea9b73","updated":"2015-12-29 15:58:26.000000000","message":"the only reason i didn\u0027t do it like you say is i am going to be formatting a dictionary with the id\u0027s as the keys and the value as the entity then pass that to another dictionary to pretty much store the same information. I still need to clean this up, i will try it like you say and see if there are better performance gains.","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"5009a2481dd690db182f5c4cea72fbef8c1996f9","unresolved":false,"context_lines":[{"line_number":843,"context_line":"                if user_id in gathered_ids[\u0027user_assign\u0027]:"},{"line_number":844,"context_line":"                    new_role[\u0027user_assign\u0027] \u003d _get_role_from_assign("},{"line_number":845,"context_line":"                        user_id,"},{"line_number":846,"context_line":"                        \u0027user\u0027)"},{"line_number":847,"context_line":"                else:"},{"line_number":848,"context_line":"                    _user \u003d self.identity_api.get_user(user_id)"},{"line_number":849,"context_line":"                    new_role[\u0027user_assign\u0027] \u003d _format_role_data(_user)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa69d971_3e69618c","line":846,"in_reply_to":"1a7b0d38_fab32298","updated":"2015-12-29 18:51:16.000000000","message":"Yes, caching the complete entities will certainly result in better performance than caching just the id and going again through the result set to retrieve the entity..","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"2c025568b82a0dfcc1b79e53d4905d46c2fed24b","unresolved":false,"context_lines":[{"line_number":877,"context_line":"                    new_role[\u0027role_assign\u0027] \u003d _get_role_from_assign(rl_id,"},{"line_number":878,"context_line":"                                                                    \u0027role\u0027)"},{"line_number":879,"context_line":"                else:"},{"line_number":880,"context_line":"                    _role \u003d self.role_api.get_role(rl_id)"},{"line_number":881,"context_line":"                    new_role[\u0027role_assign\u0027] \u003d {\u0027id\u0027: _role[\u0027id\u0027],"},{"line_number":882,"context_line":"                                               \u0027name\u0027: _role[\u0027name\u0027]}"},{"line_number":883,"context_line":"                    gathered_ids[\u0027role_assign\u0027].append(rl_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a7b0d38_ee14db4d","line":880,"updated":"2015-12-29 00:16:09.000000000","message":"It would be a good idea to give the lower level backbone driver (sql or ldap etc.) the chance to implement the names retrieval operation more efficiently, for instance by using an SQL \"join\" query and only make the api call when the name attribute (\"domain_name\" or \"role_name\" etc.) is missing from the result set.","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"5009a2481dd690db182f5c4cea72fbef8c1996f9","unresolved":false,"context_lines":[{"line_number":877,"context_line":"                    new_role[\u0027role_assign\u0027] \u003d _get_role_from_assign(rl_id,"},{"line_number":878,"context_line":"                                                                    \u0027role\u0027)"},{"line_number":879,"context_line":"                else:"},{"line_number":880,"context_line":"                    _role \u003d self.role_api.get_role(rl_id)"},{"line_number":881,"context_line":"                    new_role[\u0027role_assign\u0027] \u003d {\u0027id\u0027: _role[\u0027id\u0027],"},{"line_number":882,"context_line":"                                               \u0027name\u0027: _role[\u0027name\u0027]}"},{"line_number":883,"context_line":"                    gathered_ids[\u0027role_assign\u0027].append(rl_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa69d971_9e82cdc7","line":880,"in_reply_to":"1a7b0d38_5d3ef08c","updated":"2015-12-29 18:51:16.000000000","message":"Please have a look at this patch: https://review.openstack.org/#/c/254456/ that uses a seven table sql join query to retrieve the roll_name, domain_name, project_name, user_name and group_name attributes that pretty much lies within the capabilities of the mysql or postgresql engines, despite the inefficiency of the current db schema. It will definitely result in improved performance especially with large result sets of more than 1000 records for instance. It is actually up to you.. In case you decide not to modify the lower level sql back-end driver as part of the current patch, I will try to implement this optimization as a separate commit.","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"d199f6783116df9facc61a4c491c4a1b992747d3","unresolved":false,"context_lines":[{"line_number":877,"context_line":"                    new_role[\u0027role_assign\u0027] \u003d _get_role_from_assign(rl_id,"},{"line_number":878,"context_line":"                                                                    \u0027role\u0027)"},{"line_number":879,"context_line":"                else:"},{"line_number":880,"context_line":"                    _role \u003d self.role_api.get_role(rl_id)"},{"line_number":881,"context_line":"                    new_role[\u0027role_assign\u0027] \u003d {\u0027id\u0027: _role[\u0027id\u0027],"},{"line_number":882,"context_line":"                                               \u0027name\u0027: _role[\u0027name\u0027]}"},{"line_number":883,"context_line":"                    gathered_ids[\u0027role_assign\u0027].append(rl_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a7b0d38_5d3ef08c","line":880,"in_reply_to":"1a7b0d38_ee14db4d","updated":"2015-12-29 15:58:26.000000000","message":"I will look into this, i like the idea, i just don\u0027t know if it is possible. Since all these names are stored in different tables i would need to import all the tables and join them together to get the names. Do you think that would be more efficient then just getting one name at a time?","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"fb38cadb03fb8ec2cb6efa42e130a49e297d8a9c","unresolved":false,"context_lines":[{"line_number":877,"context_line":"                    new_role[\u0027role_assign\u0027] \u003d _get_role_from_assign(rl_id,"},{"line_number":878,"context_line":"                                                                    \u0027role\u0027)"},{"line_number":879,"context_line":"                else:"},{"line_number":880,"context_line":"                    _role \u003d self.role_api.get_role(rl_id)"},{"line_number":881,"context_line":"                    new_role[\u0027role_assign\u0027] \u003d {\u0027id\u0027: _role[\u0027id\u0027],"},{"line_number":882,"context_line":"                                               \u0027name\u0027: _role[\u0027name\u0027]}"},{"line_number":883,"context_line":"                    gathered_ids[\u0027role_assign\u0027].append(rl_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa69d971_94cb8972","line":880,"in_reply_to":"fa69d971_04d8ca52","updated":"2015-12-29 22:08:31.000000000","message":"As you can see, I have used \"outer join\" operations with the \u0027user\u0027 and \u0027group\u0027 tables, for precisely the reason that you mention: the user or group might originate from an ldap back-end and therefore be absent from the database. I suppose the tables themselves should always be there.","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"60344bd9081996470542911d1c4066a0fb5716da","unresolved":false,"context_lines":[{"line_number":877,"context_line":"                    new_role[\u0027role_assign\u0027] \u003d _get_role_from_assign(rl_id,"},{"line_number":878,"context_line":"                                                                    \u0027role\u0027)"},{"line_number":879,"context_line":"                else:"},{"line_number":880,"context_line":"                    _role \u003d self.role_api.get_role(rl_id)"},{"line_number":881,"context_line":"                    new_role[\u0027role_assign\u0027] \u003d {\u0027id\u0027: _role[\u0027id\u0027],"},{"line_number":882,"context_line":"                                               \u0027name\u0027: _role[\u0027name\u0027]}"},{"line_number":883,"context_line":"                    gathered_ids[\u0027role_assign\u0027].append(rl_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa69d971_04d8ca52","line":880,"in_reply_to":"fa69d971_9e82cdc7","updated":"2015-12-29 19:12:42.000000000","message":"yes I have seen that patch. How do you know these tables exist? Can\u0027t a client store their users in an ldap backend while the assignments are in an sql backend?","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"2c025568b82a0dfcc1b79e53d4905d46c2fed24b","unresolved":false,"context_lines":[{"line_number":892,"context_line":"                    _domain \u003d self.resource_api.get_domain(domain_id)"},{"line_number":893,"context_line":"                    new_role[\u0027domain_assign\u0027] \u003d {\u0027id\u0027: _domain[\u0027id\u0027],"},{"line_number":894,"context_line":"                                                 \u0027name\u0027: _domain[\u0027name\u0027]}"},{"line_number":895,"context_line":"                    gathered_ids[\u0027domain_assign\u0027].append(rl_id)"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"            new_role_assign.append(new_role)"},{"line_number":898,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a7b0d38_4e1e4fbc","line":895,"updated":"2015-12-29 00:16:09.000000000","message":"Bug: use domain_id instead of rl_id!","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"d199f6783116df9facc61a4c491c4a1b992747d3","unresolved":false,"context_lines":[{"line_number":892,"context_line":"                    _domain \u003d self.resource_api.get_domain(domain_id)"},{"line_number":893,"context_line":"                    new_role[\u0027domain_assign\u0027] \u003d {\u0027id\u0027: _domain[\u0027id\u0027],"},{"line_number":894,"context_line":"                                                 \u0027name\u0027: _domain[\u0027name\u0027]}"},{"line_number":895,"context_line":"                    gathered_ids[\u0027domain_assign\u0027].append(rl_id)"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"            new_role_assign.append(new_role)"},{"line_number":898,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a7b0d38_1d0ce839","line":895,"in_reply_to":"1a7b0d38_4e1e4fbc","updated":"2015-12-29 15:58:26.000000000","message":"thanks! currently this whole things is a bug since the return in the \u0027effective\u0027 if statement will make all this code unreachable. lol :p  (that was pulled in from the merge i did in the last patch)","commit_id":"451568a132051273e160c5301293d35d4bd326de"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fe6644f21c82526a34323b9a3bed5aa1b6416853","unresolved":false,"context_lines":[{"line_number":963,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":964,"context_line":""},{"line_number":965,"context_line":"    @abc.abstractmethod"},{"line_number":966,"context_line":"    def list_role_assignments(self, role_id\u003dNone,"},{"line_number":967,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":968,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":969,"context_line":"                              inherited_to_projects\u003dNone):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_9b037f42","side":"PARENT","line":966,"range":{"start_line":966,"start_character":8,"end_line":966,"end_character":31},"updated":"2016-01-01 20:04:26.000000000","message":"do we need to move this in this patch?","commit_id":"2d6c113e36f836fd5990146ee9cd9191674c9e99"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"fb226b890d1672f5499e6f35eb669dd0600ee830","unresolved":false,"context_lines":[{"line_number":963,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":964,"context_line":""},{"line_number":965,"context_line":"    @abc.abstractmethod"},{"line_number":966,"context_line":"    def list_role_assignments(self, role_id\u003dNone,"},{"line_number":967,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":968,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":969,"context_line":"                              inherited_to_projects\u003dNone):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_5d4cdf9d","side":"PARENT","line":966,"range":{"start_line":966,"start_character":8,"end_line":966,"end_character":31},"in_reply_to":"fa69d971_9b037f42","updated":"2016-01-04 22:33:37.000000000","message":"I thought since the signature of the method is changing it has to be moved. Did i mess something up?","commit_id":"2d6c113e36f836fd5990146ee9cd9191674c9e99"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c6eceac60e4ae92b4d7a3a21154538ed47cdeb29","unresolved":false,"context_lines":[{"line_number":785,"context_line":"        assignments will be shown on the projects below the assignment point."},{"line_number":786,"context_line":"        Think of effective mode as being the list of assignments that actually"},{"line_number":787,"context_line":"        affect a user, for example the roles that would be placed in a token."},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        If OS-INHERIT extension is disabled or the used driver does not support"},{"line_number":790,"context_line":"        inherited roles retrieval, inherited role assignments will be ignored."},{"line_number":791,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_8c47c34a","line":788,"updated":"2016-01-01 12:24:44.000000000","message":"Give some words here to explain the new param `include_names`, what\u0027s the new params used for and how to use.","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"fb226b890d1672f5499e6f35eb669dd0600ee830","unresolved":false,"context_lines":[{"line_number":785,"context_line":"        assignments will be shown on the projects below the assignment point."},{"line_number":786,"context_line":"        Think of effective mode as being the list of assignments that actually"},{"line_number":787,"context_line":"        affect a user, for example the roles that would be placed in a token."},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        If OS-INHERIT extension is disabled or the used driver does not support"},{"line_number":790,"context_line":"        inherited roles retrieval, inherited role assignments will be ignored."},{"line_number":791,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_5a1aa57e","line":788,"in_reply_to":"fa69d971_179ac963","updated":"2016-01-04 22:33:37.000000000","message":"Done","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"195d2c50066c602f7b7171675e2b3e612ae7cb1d","unresolved":false,"context_lines":[{"line_number":785,"context_line":"        assignments will be shown on the projects below the assignment point."},{"line_number":786,"context_line":"        Think of effective mode as being the list of assignments that actually"},{"line_number":787,"context_line":"        affect a user, for example the roles that would be placed in a token."},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        If OS-INHERIT extension is disabled or the used driver does not support"},{"line_number":790,"context_line":"        inherited roles retrieval, inherited role assignments will be ignored."},{"line_number":791,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_179ac963","line":788,"in_reply_to":"fa69d971_8c47c34a","updated":"2016-01-04 20:11:35.000000000","message":"oh man. I can\u0027t believe i forgot this. thanks dave!","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"4bb769df7bfeb2189d9ce9330d6e3fba339d76e3","unresolved":false,"context_lines":[{"line_number":812,"context_line":""},{"line_number":813,"context_line":"        if include_names:"},{"line_number":814,"context_line":"            return self._get_names_from_role_assign(role_assignments)"},{"line_number":815,"context_line":"        return role_assignments"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":818,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_43ec078f","line":815,"updated":"2016-01-04 19:52:16.000000000","message":"Maybe it\u0027s better to have \"include_names\" just append some additional attributes, like \"user_name\", \"user_domain_name\", \"group_name\", and not change the format altogether by storing instead the entire entity as \"user_assign\", \"group_assign\" etc. This way the life of the openstack client will be a bit easier..","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"195d2c50066c602f7b7171675e2b3e612ae7cb1d","unresolved":false,"context_lines":[{"line_number":812,"context_line":""},{"line_number":813,"context_line":"        if include_names:"},{"line_number":814,"context_line":"            return self._get_names_from_role_assign(role_assignments)"},{"line_number":815,"context_line":"        return role_assignments"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":818,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_776225af","line":815,"in_reply_to":"fa69d971_43ec078f","updated":"2016-01-04 20:11:35.000000000","message":"That makes sense. It is just done here because adding 15ish new attributes here is kinda messy for both this method and _format_entity()","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"fb226b890d1672f5499e6f35eb669dd0600ee830","unresolved":false,"context_lines":[{"line_number":812,"context_line":""},{"line_number":813,"context_line":"        if include_names:"},{"line_number":814,"context_line":"            return self._get_names_from_role_assign(role_assignments)"},{"line_number":815,"context_line":"        return role_assignments"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":818,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_7da203ff","line":815,"in_reply_to":"fa69d971_776225af","updated":"2016-01-04 22:33:37.000000000","message":"I have been pondering this problem the whole time I have been working on this patch. Knowing that it will add roughly 15 new variables and be very repetitive in this method would you recommend it? Thanks in advance :)","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c6eceac60e4ae92b4d7a3a21154538ed47cdeb29","unresolved":false,"context_lines":[{"line_number":816,"context_line":""},{"line_number":817,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        # Cache role assignment so we don\u0027t need to make"},{"line_number":820,"context_line":"        # redundant calls to the drivers"},{"line_number":821,"context_line":"        entities \u003d {\u0027user_assign\u0027: {}, \u0027group_assign\u0027: {},"},{"line_number":822,"context_line":"                    \u0027prj_assign\u0027: {}, \u0027role_assign\u0027: {},"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_6cba8f25","line":819,"updated":"2016-01-01 12:24:44.000000000","message":"I like the idea of cache, but you need update the cache once the name of these entities got changed.\n\none example is user, i can update user\u0027s name but once user\u0027s name has been updated, the cache should sync up with the change.","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"195d2c50066c602f7b7171675e2b3e612ae7cb1d","unresolved":false,"context_lines":[{"line_number":816,"context_line":""},{"line_number":817,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        # Cache role assignment so we don\u0027t need to make"},{"line_number":820,"context_line":"        # redundant calls to the drivers"},{"line_number":821,"context_line":"        entities \u003d {\u0027user_assign\u0027: {}, \u0027group_assign\u0027: {},"},{"line_number":822,"context_line":"                    \u0027prj_assign\u0027: {}, \u0027role_assign\u0027: {},"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_ab783ff3","line":819,"in_reply_to":"fa69d971_19ba346f","updated":"2016-01-04 20:11:35.000000000","message":"Dave, henry is correct this is just a temporary cache","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f0243e9aa3724009c9fe8c34e299bd393ef36794","unresolved":false,"context_lines":[{"line_number":816,"context_line":""},{"line_number":817,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        # Cache role assignment so we don\u0027t need to make"},{"line_number":820,"context_line":"        # redundant calls to the drivers"},{"line_number":821,"context_line":"        entities \u003d {\u0027user_assign\u0027: {}, \u0027group_assign\u0027: {},"},{"line_number":822,"context_line":"                    \u0027prj_assign\u0027: {}, \u0027role_assign\u0027: {},"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_19ba346f","line":819,"in_reply_to":"fa69d971_6cba8f25","updated":"2016-01-01 20:05:51.000000000","message":"isn\u0027t this just a cache during the life of processing this call? In which case, I\u0027m not sure we need to worry about that...","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"4bb769df7bfeb2189d9ce9330d6e3fba339d76e3","unresolved":false,"context_lines":[{"line_number":824,"context_line":""},{"line_number":825,"context_line":"        def _format_role_data(entity):"},{"line_number":826,"context_line":"            entity_domain_name \u003d self.resource_api.get_domain("},{"line_number":827,"context_line":"                entity[\u0027domain_id\u0027])[\u0027name\u0027]"},{"line_number":828,"context_line":"            return {"},{"line_number":829,"context_line":"                \u0027id\u0027: entity[\u0027id\u0027],"},{"line_number":830,"context_line":"                \u0027name\u0027: entity[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_b92bb693","line":827,"updated":"2016-01-04 19:52:16.000000000","message":"Check the cache for the domain entity before the api call. After the call, cache the entity for future re-use.","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"195d2c50066c602f7b7171675e2b3e612ae7cb1d","unresolved":false,"context_lines":[{"line_number":824,"context_line":""},{"line_number":825,"context_line":"        def _format_role_data(entity):"},{"line_number":826,"context_line":"            entity_domain_name \u003d self.resource_api.get_domain("},{"line_number":827,"context_line":"                entity[\u0027domain_id\u0027])[\u0027name\u0027]"},{"line_number":828,"context_line":"            return {"},{"line_number":829,"context_line":"                \u0027id\u0027: entity[\u0027id\u0027],"},{"line_number":830,"context_line":"                \u0027name\u0027: entity[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_f71cd514","line":827,"in_reply_to":"fa69d971_b92bb693","updated":"2016-01-04 20:11:35.000000000","message":"yes that is a good call. i thought for sure i already did this. good catch!","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"fb226b890d1672f5499e6f35eb669dd0600ee830","unresolved":false,"context_lines":[{"line_number":824,"context_line":""},{"line_number":825,"context_line":"        def _format_role_data(entity):"},{"line_number":826,"context_line":"            entity_domain_name \u003d self.resource_api.get_domain("},{"line_number":827,"context_line":"                entity[\u0027domain_id\u0027])[\u0027name\u0027]"},{"line_number":828,"context_line":"            return {"},{"line_number":829,"context_line":"                \u0027id\u0027: entity[\u0027id\u0027],"},{"line_number":830,"context_line":"                \u0027name\u0027: entity[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_fd24b3c5","line":827,"in_reply_to":"fa69d971_f71cd514","updated":"2016-01-04 22:33:37.000000000","message":"Done","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c6eceac60e4ae92b4d7a3a21154538ed47cdeb29","unresolved":false,"context_lines":[{"line_number":832,"context_line":"                           \u0027name\u0027: entity_domain_name}}"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"        for role_asgmt in role_assignments:"},{"line_number":835,"context_line":"            new_rl \u003d {}"},{"line_number":836,"context_line":"            if role_asgmt.get(\u0027user_id\u0027):"},{"line_number":837,"context_line":"                user_id \u003d role_asgmt[\u0027user_id\u0027]"},{"line_number":838,"context_line":"                if entities[\u0027user_assign\u0027].get(user_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_6c636fdd","line":835,"range":{"start_line":835,"start_character":12,"end_line":835,"end_character":18},"updated":"2016-01-01 12:24:44.000000000","message":"change the name of the var that is more meaningful.","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"195d2c50066c602f7b7171675e2b3e612ae7cb1d","unresolved":false,"context_lines":[{"line_number":832,"context_line":"                           \u0027name\u0027: entity_domain_name}}"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"        for role_asgmt in role_assignments:"},{"line_number":835,"context_line":"            new_rl \u003d {}"},{"line_number":836,"context_line":"            if role_asgmt.get(\u0027user_id\u0027):"},{"line_number":837,"context_line":"                user_id \u003d role_asgmt[\u0027user_id\u0027]"},{"line_number":838,"context_line":"                if entities[\u0027user_assign\u0027].get(user_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_8bf21b6e","line":835,"range":{"start_line":835,"start_character":12,"end_line":835,"end_character":18},"in_reply_to":"fa69d971_6c636fdd","updated":"2016-01-04 20:11:35.000000000","message":"Done","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c6eceac60e4ae92b4d7a3a21154538ed47cdeb29","unresolved":false,"context_lines":[{"line_number":833,"context_line":""},{"line_number":834,"context_line":"        for role_asgmt in role_assignments:"},{"line_number":835,"context_line":"            new_rl \u003d {}"},{"line_number":836,"context_line":"            if role_asgmt.get(\u0027user_id\u0027):"},{"line_number":837,"context_line":"                user_id \u003d role_asgmt[\u0027user_id\u0027]"},{"line_number":838,"context_line":"                if entities[\u0027user_assign\u0027].get(user_id):"},{"line_number":839,"context_line":"                    new_rl[\u0027user_assign\u0027] \u003d entities[\u0027user_assign\u0027][user_id]"},{"line_number":840,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_4c9f8bb4","line":837,"range":{"start_line":836,"start_character":0,"end_line":837,"end_character":47},"updated":"2016-01-01 12:24:44.000000000","message":"how about:\n user_id \u003d role_asgmt.get(\u0027user_id\u0027)\n if user_id:\n     ...\n\ngood as it is.","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"195d2c50066c602f7b7171675e2b3e612ae7cb1d","unresolved":false,"context_lines":[{"line_number":833,"context_line":""},{"line_number":834,"context_line":"        for role_asgmt in role_assignments:"},{"line_number":835,"context_line":"            new_rl \u003d {}"},{"line_number":836,"context_line":"            if role_asgmt.get(\u0027user_id\u0027):"},{"line_number":837,"context_line":"                user_id \u003d role_asgmt[\u0027user_id\u0027]"},{"line_number":838,"context_line":"                if entities[\u0027user_assign\u0027].get(user_id):"},{"line_number":839,"context_line":"                    new_rl[\u0027user_assign\u0027] \u003d entities[\u0027user_assign\u0027][user_id]"},{"line_number":840,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_f7e37503","line":837,"range":{"start_line":836,"start_character":0,"end_line":837,"end_character":47},"in_reply_to":"fa69d971_4c9f8bb4","updated":"2016-01-04 20:11:35.000000000","message":"I like your better :)","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"fb226b890d1672f5499e6f35eb669dd0600ee830","unresolved":false,"context_lines":[{"line_number":833,"context_line":""},{"line_number":834,"context_line":"        for role_asgmt in role_assignments:"},{"line_number":835,"context_line":"            new_rl \u003d {}"},{"line_number":836,"context_line":"            if role_asgmt.get(\u0027user_id\u0027):"},{"line_number":837,"context_line":"                user_id \u003d role_asgmt[\u0027user_id\u0027]"},{"line_number":838,"context_line":"                if entities[\u0027user_assign\u0027].get(user_id):"},{"line_number":839,"context_line":"                    new_rl[\u0027user_assign\u0027] \u003d entities[\u0027user_assign\u0027][user_id]"},{"line_number":840,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_7d320361","line":837,"range":{"start_line":836,"start_character":0,"end_line":837,"end_character":47},"in_reply_to":"fa69d971_f7e37503","updated":"2016-01-04 22:33:37.000000000","message":"yours ^^","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fe6644f21c82526a34323b9a3bed5aa1b6416853","unresolved":false,"context_lines":[{"line_number":836,"context_line":"            if role_asgmt.get(\u0027user_id\u0027):"},{"line_number":837,"context_line":"                user_id \u003d role_asgmt[\u0027user_id\u0027]"},{"line_number":838,"context_line":"                if entities[\u0027user_assign\u0027].get(user_id):"},{"line_number":839,"context_line":"                    new_rl[\u0027user_assign\u0027] \u003d entities[\u0027user_assign\u0027][user_id]"},{"line_number":840,"context_line":"                else:"},{"line_number":841,"context_line":"                    _user \u003d self.identity_api.get_user(user_id)"},{"line_number":842,"context_line":"                    formated_user \u003d _format_role_data(_user)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_d9857cad","line":839,"range":{"start_line":839,"start_character":28,"end_line":839,"end_character":39},"updated":"2016-01-01 20:04:26.000000000","message":"So this is the key that you are passing up to the controller to interpret, I think. Although a minor point, I find the \u0027xxxx_assign\u0027 label a bit confusing...this isn\u0027t an assignment you are storing, it\u0027s the full entity. I\u0027d find it more obvious if it was called \u0027user_entity\u0027, \u0027group_entity\" etc...","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"195d2c50066c602f7b7171675e2b3e612ae7cb1d","unresolved":false,"context_lines":[{"line_number":836,"context_line":"            if role_asgmt.get(\u0027user_id\u0027):"},{"line_number":837,"context_line":"                user_id \u003d role_asgmt[\u0027user_id\u0027]"},{"line_number":838,"context_line":"                if entities[\u0027user_assign\u0027].get(user_id):"},{"line_number":839,"context_line":"                    new_rl[\u0027user_assign\u0027] \u003d entities[\u0027user_assign\u0027][user_id]"},{"line_number":840,"context_line":"                else:"},{"line_number":841,"context_line":"                    _user \u003d self.identity_api.get_user(user_id)"},{"line_number":842,"context_line":"                    formated_user \u003d _format_role_data(_user)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_7cbd3767","line":839,"range":{"start_line":839,"start_character":28,"end_line":839,"end_character":39},"in_reply_to":"fa69d971_d9857cad","updated":"2016-01-04 20:11:35.000000000","message":"Done","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c6eceac60e4ae92b4d7a3a21154538ed47cdeb29","unresolved":false,"context_lines":[{"line_number":838,"context_line":"                if entities[\u0027user_assign\u0027].get(user_id):"},{"line_number":839,"context_line":"                    new_rl[\u0027user_assign\u0027] \u003d entities[\u0027user_assign\u0027][user_id]"},{"line_number":840,"context_line":"                else:"},{"line_number":841,"context_line":"                    _user \u003d self.identity_api.get_user(user_id)"},{"line_number":842,"context_line":"                    formated_user \u003d _format_role_data(_user)"},{"line_number":843,"context_line":"                    new_rl[\u0027user_assign\u0027] \u003d formated_user"},{"line_number":844,"context_line":"                    entities[\u0027user_assign\u0027][user_id] \u003d formated_user"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_4ced4b24","line":841,"range":{"start_line":841,"start_character":20,"end_line":841,"end_character":63},"updated":"2016-01-01 12:24:44.000000000","message":"rather than call the API here, could we get all of these data from the backend driver when the assignment is assembled?\n\n\nthe pros for this is the api call will not be needed and backend call will be done only once.\n\n\nthen if you want all of these name info, you can just pick it up.","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"4bb769df7bfeb2189d9ce9330d6e3fba339d76e3","unresolved":false,"context_lines":[{"line_number":838,"context_line":"                if entities[\u0027user_assign\u0027].get(user_id):"},{"line_number":839,"context_line":"                    new_rl[\u0027user_assign\u0027] \u003d entities[\u0027user_assign\u0027][user_id]"},{"line_number":840,"context_line":"                else:"},{"line_number":841,"context_line":"                    _user \u003d self.identity_api.get_user(user_id)"},{"line_number":842,"context_line":"                    formated_user \u003d _format_role_data(_user)"},{"line_number":843,"context_line":"                    new_rl[\u0027user_assign\u0027] \u003d formated_user"},{"line_number":844,"context_line":"                    entities[\u0027user_assign\u0027][user_id] \u003d formated_user"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_b9b5f631","line":841,"range":{"start_line":841,"start_character":20,"end_line":841,"end_character":63},"in_reply_to":"fa69d971_4ced4b24","updated":"2016-01-04 19:52:16.000000000","message":"I understand the modifications to the back-end driver will be addressed by a separate patch. But at this level we should give the lower-level driver the chance of implementing this operation more efficiently: check for the presence of the name attributes: user_name, group_name, role_name etc. inside the record set returned by the driver and only make the api call when the names are absent.","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"195d2c50066c602f7b7171675e2b3e612ae7cb1d","unresolved":false,"context_lines":[{"line_number":838,"context_line":"                if entities[\u0027user_assign\u0027].get(user_id):"},{"line_number":839,"context_line":"                    new_rl[\u0027user_assign\u0027] \u003d entities[\u0027user_assign\u0027][user_id]"},{"line_number":840,"context_line":"                else:"},{"line_number":841,"context_line":"                    _user \u003d self.identity_api.get_user(user_id)"},{"line_number":842,"context_line":"                    formated_user \u003d _format_role_data(_user)"},{"line_number":843,"context_line":"                    new_rl[\u0027user_assign\u0027] \u003d formated_user"},{"line_number":844,"context_line":"                    entities[\u0027user_assign\u0027][user_id] \u003d formated_user"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_f7f4d587","line":841,"range":{"start_line":841,"start_character":20,"end_line":841,"end_character":63},"in_reply_to":"fa69d971_b9b5f631","updated":"2016-01-04 20:11:35.000000000","message":"yes i think this will be done in a separate patch since it is going to be quite large.","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":18920,"name":"Cristian Sava","email":"chsava@gmail.com","username":"chsava"},"change_message_id":"4bb769df7bfeb2189d9ce9330d6e3fba339d76e3","unresolved":false,"context_lines":[{"line_number":884,"context_line":"                    formated_domain \u003d {\u0027id\u0027: _domain[\u0027id\u0027],"},{"line_number":885,"context_line":"                                       \u0027name\u0027: _domain[\u0027name\u0027]}"},{"line_number":886,"context_line":"                    new_rl[\u0027domain_assign\u0027] \u003d formated_domain"},{"line_number":887,"context_line":"                    entities[\u0027dmn_assign\u0027][rl_id] \u003d formated_domain"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"            yield new_rl"},{"line_number":890,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_19368252","line":887,"updated":"2016-01-04 19:52:16.000000000","message":"Bug: use dmn_id instead of rl_id!","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"fb226b890d1672f5499e6f35eb669dd0600ee830","unresolved":false,"context_lines":[{"line_number":884,"context_line":"                    formated_domain \u003d {\u0027id\u0027: _domain[\u0027id\u0027],"},{"line_number":885,"context_line":"                                       \u0027name\u0027: _domain[\u0027name\u0027]}"},{"line_number":886,"context_line":"                    new_rl[\u0027domain_assign\u0027] \u003d formated_domain"},{"line_number":887,"context_line":"                    entities[\u0027dmn_assign\u0027][rl_id] \u003d formated_domain"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"            yield new_rl"},{"line_number":890,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_fd1fd305","line":887,"in_reply_to":"fa69d971_19368252","updated":"2016-01-04 22:33:37.000000000","message":"Done. thanks :)","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fe6644f21c82526a34323b9a3bed5aa1b6416853","unresolved":false,"context_lines":[{"line_number":1227,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":1228,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":1229,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":1230,"context_line":"                              include_names\u003dFalse):"},{"line_number":1231,"context_line":"        \"\"\"Returns a list of role assignments for actors on targets."},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"        Available parameters represent values in which the returned role"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_fbeb9b76","line":1230,"range":{"start_line":1230,"start_character":30,"end_line":1230,"end_character":43},"updated":"2016-01-01 20:04:26.000000000","message":"do we still need to do this in this patch?","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"8e68b6ac07f91dac3a26fab5441dbeedb9d0e394","unresolved":false,"context_lines":[{"line_number":1227,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":1228,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":1229,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":1230,"context_line":"                              include_names\u003dFalse):"},{"line_number":1231,"context_line":"        \"\"\"Returns a list of role assignments for actors on targets."},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"        Available parameters represent values in which the returned role"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_1db7203b","line":1230,"range":{"start_line":1230,"start_character":30,"end_line":1230,"end_character":43},"in_reply_to":"fa69d971_16a2a8fd","updated":"2016-01-05 16:37:05.000000000","message":"yep, you got it","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"1a4a0adc51bd7807164ded03efade30f4e3a6ece","unresolved":false,"context_lines":[{"line_number":1227,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":1228,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":1229,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":1230,"context_line":"                              include_names\u003dFalse):"},{"line_number":1231,"context_line":"        \"\"\"Returns a list of role assignments for actors on targets."},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"        Available parameters represent values in which the returned role"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_16a2a8fd","line":1230,"range":{"start_line":1230,"start_character":30,"end_line":1230,"end_character":43},"in_reply_to":"fa69d971_40a2b24c","updated":"2016-01-05 16:23:06.000000000","message":"Oh that makes sense.  Thanks for the explanation.  So if i ever change a driver method, i would need to do this.","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ce2147b0236a6bae3e4b53e24d1e4b71ea5f7676","unresolved":false,"context_lines":[{"line_number":1227,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":1228,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":1229,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":1230,"context_line":"                              include_names\u003dFalse):"},{"line_number":1231,"context_line":"        \"\"\"Returns a list of role assignments for actors on targets."},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"        Available parameters represent values in which the returned role"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_40a2b24c","line":1230,"range":{"start_line":1230,"start_character":30,"end_line":1230,"end_character":43},"in_reply_to":"fa69d971_9d7fb7aa","updated":"2016-01-04 22:45:04.000000000","message":"this is the signature of the driver method....not the manager method - and that\u0027s not changing in this patch, I think?","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"fb226b890d1672f5499e6f35eb669dd0600ee830","unresolved":false,"context_lines":[{"line_number":1227,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":1228,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":1229,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":1230,"context_line":"                              include_names\u003dFalse):"},{"line_number":1231,"context_line":"        \"\"\"Returns a list of role assignments for actors on targets."},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"        Available parameters represent values in which the returned role"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_9d7fb7aa","line":1230,"range":{"start_line":1230,"start_character":30,"end_line":1230,"end_character":43},"in_reply_to":"fa69d971_fbeb9b76","updated":"2016-01-04 22:33:37.000000000","message":"I thought since the signature of the method is changing it has to be moved. Did i mess something up?","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fe6644f21c82526a34323b9a3bed5aa1b6416853","unresolved":false,"context_lines":[{"line_number":1316,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":1317,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":1318,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":1319,"context_line":"                              include_names\u003dFalse):"},{"line_number":1320,"context_line":"        return self.driver.list_role_assignments("},{"line_number":1321,"context_line":"            role_id\u003drole_id,"},{"line_number":1322,"context_line":"            user_id\u003duser_id, group_ids\u003dgroup_ids,"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_799490e1","line":1319,"range":{"start_line":1319,"start_character":30,"end_line":1319,"end_character":43},"updated":"2016-01-01 20:04:26.000000000","message":"remove from this patch, I think","commit_id":"8fb1d4aae365af754f29f831dc2e755b0b17d271"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":786,"context_line":"        Think of effective mode as being the list of assignments that actually"},{"line_number":787,"context_line":"        affect a user, for example the roles that would be placed in a token."},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        If include_names is set to true the entities name\u0027s are returned"},{"line_number":790,"context_line":"        rather than their id\u0027s"},{"line_number":791,"context_line":""},{"line_number":792,"context_line":"        If OS-INHERIT extension is disabled or the used driver does not support"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_45e90eb6","line":789,"range":{"start_line":789,"start_character":44,"end_line":789,"end_character":59},"updated":"2016-01-06 15:30:34.000000000","message":"entities\u0027 names","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":786,"context_line":"        Think of effective mode as being the list of assignments that actually"},{"line_number":787,"context_line":"        affect a user, for example the roles that would be placed in a token."},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        If include_names is set to true the entities name\u0027s are returned"},{"line_number":790,"context_line":"        rather than their id\u0027s"},{"line_number":791,"context_line":""},{"line_number":792,"context_line":"        If OS-INHERIT extension is disabled or the used driver does not support"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_b2b3644c","line":789,"range":{"start_line":789,"start_character":44,"end_line":789,"end_character":59},"in_reply_to":"fa69d971_45e90eb6","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":814,"context_line":"                subtree_ids, inherited)"},{"line_number":815,"context_line":""},{"line_number":816,"context_line":"        if include_names:"},{"line_number":817,"context_line":"            return self._get_names_from_role_assign(role_assignments)"},{"line_number":818,"context_line":"        return role_assignments"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_652e92fc","line":817,"range":{"start_line":817,"start_character":45,"end_line":817,"end_character":51},"updated":"2016-01-06 15:30:34.000000000","message":"assignments\n\nAlso, this should return a list rather than a generator so that it works the same in both cases.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":814,"context_line":"                subtree_ids, inherited)"},{"line_number":815,"context_line":""},{"line_number":816,"context_line":"        if include_names:"},{"line_number":817,"context_line":"            return self._get_names_from_role_assign(role_assignments)"},{"line_number":818,"context_line":"        return role_assignments"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_38cc35ba","line":817,"range":{"start_line":817,"start_character":45,"end_line":817,"end_character":51},"in_reply_to":"fa69d971_652e92fc","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":817,"context_line":"            return self._get_names_from_role_assign(role_assignments)"},{"line_number":818,"context_line":"        return role_assignments"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache role assignment so we don\u0027t need to make"},{"line_number":823,"context_line":"        # redundant calls to the drivers"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_e57a82bc","line":820,"range":{"start_line":820,"start_character":29,"end_line":820,"end_character":35},"updated":"2016-01-06 15:30:34.000000000","message":"assignments","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":817,"context_line":"            return self._get_names_from_role_assign(role_assignments)"},{"line_number":818,"context_line":"        return role_assignments"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache role assignment so we don\u0027t need to make"},{"line_number":823,"context_line":"        # redundant calls to the drivers"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_b8b82512","line":820,"range":{"start_line":820,"start_character":29,"end_line":820,"end_character":35},"in_reply_to":"fa69d971_e57a82bc","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache role assignment so we don\u0027t need to make"},{"line_number":823,"context_line":"        # redundant calls to the drivers"},{"line_number":824,"context_line":"        entities \u003d {\u0027user_entity\u0027: {}, \u0027group_entity\u0027: {},"},{"line_number":825,"context_line":"                    \u0027prj_entity\u0027: {}, \u0027role_entity\u0027: {},"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_b7a121fa","line":822,"range":{"start_line":822,"start_character":16,"end_line":822,"end_character":31},"updated":"2016-01-06 15:30:34.000000000","message":"entities","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache role assignment so we don\u0027t need to make"},{"line_number":823,"context_line":"        # redundant calls to the drivers"},{"line_number":824,"context_line":"        entities \u003d {\u0027user_entity\u0027: {}, \u0027group_entity\u0027: {},"},{"line_number":825,"context_line":"                    \u0027prj_entity\u0027: {}, \u0027role_entity\u0027: {},"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_583a499a","line":822,"range":{"start_line":822,"start_character":16,"end_line":822,"end_character":31},"in_reply_to":"fa69d971_b7a121fa","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":820,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache role assignment so we don\u0027t need to make"},{"line_number":823,"context_line":"        # redundant calls to the drivers"},{"line_number":824,"context_line":"        entities \u003d {\u0027user_entity\u0027: {}, \u0027group_entity\u0027: {},"},{"line_number":825,"context_line":"                    \u0027prj_entity\u0027: {}, \u0027role_entity\u0027: {},"},{"line_number":826,"context_line":"                    \u0027dmn_entity\u0027: {}}"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_85506633","line":823,"updated":"2016-01-06 15:30:34.000000000","message":"This review would be easier to understand if the caching change was separated out into a separate review.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":820,"context_line":"    def _get_names_from_role_assign(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache role assignment so we don\u0027t need to make"},{"line_number":823,"context_line":"        # redundant calls to the drivers"},{"line_number":824,"context_line":"        entities \u003d {\u0027user_entity\u0027: {}, \u0027group_entity\u0027: {},"},{"line_number":825,"context_line":"                    \u0027prj_entity\u0027: {}, \u0027role_entity\u0027: {},"},{"line_number":826,"context_line":"                    \u0027dmn_entity\u0027: {}}"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_d875d963","line":823,"in_reply_to":"fa69d971_85506633","updated":"2016-01-14 21:19:35.000000000","message":"Since everyone was pushing towards efficiency I think it may need to stay in a single patch :(","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache role assignment so we don\u0027t need to make"},{"line_number":823,"context_line":"        # redundant calls to the drivers"},{"line_number":824,"context_line":"        entities \u003d {\u0027user_entity\u0027: {}, \u0027group_entity\u0027: {},"},{"line_number":825,"context_line":"                    \u0027prj_entity\u0027: {}, \u0027role_entity\u0027: {},"},{"line_number":826,"context_line":"                    \u0027dmn_entity\u0027: {}}"},{"line_number":827,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_651bf281","line":824,"updated":"2016-01-06 15:30:34.000000000","message":"no need to create a dictionary here, just have\n\n user_entities \u003d {}\n group_entities \u003d {}\n ...\n\nthen references don\u0027t need to be so long.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache role assignment so we don\u0027t need to make"},{"line_number":823,"context_line":"        # redundant calls to the drivers"},{"line_number":824,"context_line":"        entities \u003d {\u0027user_entity\u0027: {}, \u0027group_entity\u0027: {},"},{"line_number":825,"context_line":"                    \u0027prj_entity\u0027: {}, \u0027role_entity\u0027: {},"},{"line_number":826,"context_line":"                    \u0027dmn_entity\u0027: {}}"},{"line_number":827,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_52854857","line":824,"in_reply_to":"fa69d971_651bf281","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":829,"context_line":"            dmn_id \u003d entity[\u0027domain_id\u0027]"},{"line_number":830,"context_line":"            cache_dmn \u003d entities[\u0027dmn_entity\u0027].get(dmn_id)"},{"line_number":831,"context_line":"            if cache_dmn:"},{"line_number":832,"context_line":"                    entity_dmn_name \u003d cache_dmn[\u0027name\u0027]"},{"line_number":833,"context_line":"            else:"},{"line_number":834,"context_line":"                _domain \u003d self.resource_api.get_domain(dmn_id)"},{"line_number":835,"context_line":"                formated_domain \u003d {\u0027id\u0027: _domain[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_97297d8c","line":832,"range":{"start_line":832,"start_character":16,"end_line":832,"end_character":20},"updated":"2016-01-06 15:30:34.000000000","message":"this is extra-indented.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":829,"context_line":"            dmn_id \u003d entity[\u0027domain_id\u0027]"},{"line_number":830,"context_line":"            cache_dmn \u003d entities[\u0027dmn_entity\u0027].get(dmn_id)"},{"line_number":831,"context_line":"            if cache_dmn:"},{"line_number":832,"context_line":"                    entity_dmn_name \u003d cache_dmn[\u0027name\u0027]"},{"line_number":833,"context_line":"            else:"},{"line_number":834,"context_line":"                _domain \u003d self.resource_api.get_domain(dmn_id)"},{"line_number":835,"context_line":"                formated_domain \u003d {\u0027id\u0027: _domain[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_92ac208d","line":832,"range":{"start_line":832,"start_character":16,"end_line":832,"end_character":20},"in_reply_to":"fa69d971_97297d8c","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":843,"context_line":"                           \u0027name\u0027: entity_dmn_name}}"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"        for role_asgmt in role_assignments:"},{"line_number":846,"context_line":"            new_rl \u003d {}"},{"line_number":847,"context_line":"            user_id \u003d role_asgmt.get(\u0027user_id\u0027)"},{"line_number":848,"context_line":"            if user_id:"},{"line_number":849,"context_line":"                if entities[\u0027user_entity\u0027].get(user_id):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_b304f849","line":846,"range":{"start_line":846,"start_character":12,"end_line":846,"end_character":18},"updated":"2016-01-14 21:19:35.000000000","message":"change the name for dave, sorry i forgot to in PS 16","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":847,"context_line":"            user_id \u003d role_asgmt.get(\u0027user_id\u0027)"},{"line_number":848,"context_line":"            if user_id:"},{"line_number":849,"context_line":"                if entities[\u0027user_entity\u0027].get(user_id):"},{"line_number":850,"context_line":"                    new_rl[\u0027user_entity\u0027] \u003d entities[\u0027user_entity\u0027][user_id]"},{"line_number":851,"context_line":"                else:"},{"line_number":852,"context_line":"                    _user \u003d self.identity_api.get_user(user_id)"},{"line_number":853,"context_line":"                    formated_user \u003d _format_role_data(_user)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_f7b8f912","line":850,"updated":"2016-01-06 15:30:34.000000000","message":"tox -e cover shows that this case isn\u0027t tested, so a testcase is missing.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":847,"context_line":"            user_id \u003d role_asgmt.get(\u0027user_id\u0027)"},{"line_number":848,"context_line":"            if user_id:"},{"line_number":849,"context_line":"                if entities[\u0027user_entity\u0027].get(user_id):"},{"line_number":850,"context_line":"                    new_rl[\u0027user_entity\u0027] \u003d entities[\u0027user_entity\u0027][user_id]"},{"line_number":851,"context_line":"                else:"},{"line_number":852,"context_line":"                    _user \u003d self.identity_api.get_user(user_id)"},{"line_number":853,"context_line":"                    formated_user \u003d _format_role_data(_user)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_b8eb45db","line":850,"in_reply_to":"fa69d971_f7b8f912","updated":"2016-01-14 21:19:35.000000000","message":"Since i am not creating multiple entities it is not hitting this code.  I will create a test to fix this.  Thank you Brant","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":857,"context_line":"            grp_id \u003d role_asgmt.get(\u0027group_id\u0027)"},{"line_number":858,"context_line":"            if grp_id:"},{"line_number":859,"context_line":"                if entities[\u0027group_entity\u0027].get(grp_id):"},{"line_number":860,"context_line":"                    new_rl[\u0027group_entity\u0027] \u003d entities[\u0027group_entity\u0027][grp_id]"},{"line_number":861,"context_line":"                else:"},{"line_number":862,"context_line":"                    _group \u003d self.identity_api.get_group(grp_id)"},{"line_number":863,"context_line":"                    formated_group \u003d _format_role_data(_group)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_7743a913","line":860,"updated":"2016-01-06 15:30:34.000000000","message":"not tested.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":857,"context_line":"            grp_id \u003d role_asgmt.get(\u0027group_id\u0027)"},{"line_number":858,"context_line":"            if grp_id:"},{"line_number":859,"context_line":"                if entities[\u0027group_entity\u0027].get(grp_id):"},{"line_number":860,"context_line":"                    new_rl[\u0027group_entity\u0027] \u003d entities[\u0027group_entity\u0027][grp_id]"},{"line_number":861,"context_line":"                else:"},{"line_number":862,"context_line":"                    _group \u003d self.identity_api.get_group(grp_id)"},{"line_number":863,"context_line":"                    formated_group \u003d _format_role_data(_group)"}],"source_content_type":"text/x-python","patch_set":19,"id":"da6ed579_108b6a69","line":860,"in_reply_to":"fa69d971_7743a913","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":877,"context_line":"            rl_id \u003d role_asgmt.get(\u0027role_id\u0027)"},{"line_number":878,"context_line":"            if rl_id:"},{"line_number":879,"context_line":"                if entities[\u0027role_entity\u0027].get(rl_id):"},{"line_number":880,"context_line":"                    new_rl[\u0027role_entity\u0027] \u003d entities[\u0027role_entity\u0027][rl_id]"},{"line_number":881,"context_line":"                else:"},{"line_number":882,"context_line":"                    _role \u003d self.role_api.get_role(rl_id)"},{"line_number":883,"context_line":"                    formated_role \u003d {\u0027id\u0027: _role[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_174fcd37","line":880,"updated":"2016-01-06 15:30:34.000000000","message":"not tested.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":877,"context_line":"            rl_id \u003d role_asgmt.get(\u0027role_id\u0027)"},{"line_number":878,"context_line":"            if rl_id:"},{"line_number":879,"context_line":"                if entities[\u0027role_entity\u0027].get(rl_id):"},{"line_number":880,"context_line":"                    new_rl[\u0027role_entity\u0027] \u003d entities[\u0027role_entity\u0027][rl_id]"},{"line_number":881,"context_line":"                else:"},{"line_number":882,"context_line":"                    _role \u003d self.role_api.get_role(rl_id)"},{"line_number":883,"context_line":"                    formated_role \u003d {\u0027id\u0027: _role[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_18b3710b","line":880,"in_reply_to":"fa69d971_174fcd37","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":894,"context_line":"                    formated_domain \u003d {\u0027id\u0027: _domain[\u0027id\u0027],"},{"line_number":895,"context_line":"                                       \u0027name\u0027: _domain[\u0027name\u0027]}"},{"line_number":896,"context_line":"                    new_rl[\u0027domain_entity\u0027] \u003d formated_domain"},{"line_number":897,"context_line":"                    entities[\u0027dmn_entity\u0027][dmn_id] \u003d formated_domain"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"            yield new_rl"},{"line_number":900,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_3771b176","line":897,"updated":"2016-01-06 15:30:34.000000000","message":"not tested (maybe this is tested and the cover tool isn\u0027t working right?)","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":894,"context_line":"                    formated_domain \u003d {\u0027id\u0027: _domain[\u0027id\u0027],"},{"line_number":895,"context_line":"                                       \u0027name\u0027: _domain[\u0027name\u0027]}"},{"line_number":896,"context_line":"                    new_rl[\u0027domain_entity\u0027] \u003d formated_domain"},{"line_number":897,"context_line":"                    entities[\u0027dmn_entity\u0027][dmn_id] \u003d formated_domain"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"            yield new_rl"},{"line_number":900,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_f8cc5d8a","line":897,"in_reply_to":"fa69d971_3771b176","updated":"2016-01-14 21:19:35.000000000","message":"Ha I wish i could say it was that way. but you are correct.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":1314,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":1315,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":1316,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":1317,"context_line":"                              include_names\u003dFalse):"},{"line_number":1318,"context_line":"        return self.driver.list_role_assignments("},{"line_number":1319,"context_line":"            role_id\u003drole_id,"},{"line_number":1320,"context_line":"            user_id\u003duser_id, group_ids\u003dgroup_ids,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_a5ac8a8c","line":1317,"updated":"2016-01-06 15:30:34.000000000","message":"There driver interface isn\u0027t changing, so this change is not needed.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":1314,"context_line":"                              user_id\u003dNone, group_ids\u003dNone,"},{"line_number":1315,"context_line":"                              domain_id\u003dNone, project_ids\u003dNone,"},{"line_number":1316,"context_line":"                              inherited_to_projects\u003dNone,"},{"line_number":1317,"context_line":"                              include_names\u003dFalse):"},{"line_number":1318,"context_line":"        return self.driver.list_role_assignments("},{"line_number":1319,"context_line":"            role_id\u003drole_id,"},{"line_number":1320,"context_line":"            user_id\u003duser_id, group_ids\u003dgroup_ids,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_78a70dbd","line":1317,"in_reply_to":"fa69d971_a5ac8a8c","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c696a75bdfc3d322f9503bf64d667841db83baa8","unresolved":false,"context_lines":[{"line_number":787,"context_line":"        affect a user, for example the roles that would be placed in a token."},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        If include_names is set to true the entities\u0027 names are returned"},{"line_number":790,"context_line":"        rather than their id\u0027s"},{"line_number":791,"context_line":""},{"line_number":792,"context_line":"        If OS-INHERIT extension is disabled or the used driver does not support"},{"line_number":793,"context_line":"        inherited roles retrieval, inherited role assignments will be ignored."}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_633450fb","line":790,"range":{"start_line":790,"start_character":8,"end_line":790,"end_character":29},"updated":"2016-01-15 06:00:58.000000000","message":"rather than...or...in addition to....","commit_id":"05a69e8358caa4dd675a3490aeb088a6febfc38f"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"da9f1bf5f5b7cf33536d5a8d76b0128ff113191b","unresolved":false,"context_lines":[{"line_number":787,"context_line":"        affect a user, for example the roles that would be placed in a token."},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        If include_names is set to true the entities\u0027 names are returned"},{"line_number":790,"context_line":"        rather than their id\u0027s"},{"line_number":791,"context_line":""},{"line_number":792,"context_line":"        If OS-INHERIT extension is disabled or the used driver does not support"},{"line_number":793,"context_line":"        inherited roles retrieval, inherited role assignments will be ignored."}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_704dddc2","line":790,"range":{"start_line":790,"start_character":8,"end_line":790,"end_character":29},"in_reply_to":"da6ed579_633450fb","updated":"2016-01-15 14:56:34.000000000","message":"Done","commit_id":"05a69e8358caa4dd675a3490aeb088a6febfc38f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"3b962a2ca24f10172ffadd7451b2b8988e608766","unresolved":false,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assignments(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache entites to reduce redundant calls to the drivers"},{"line_number":823,"context_line":"        user_entity \u003d group_entity \u003d prj_entity \u003d role_entity \u003d dmn_entity \u003d {}"},{"line_number":824,"context_line":"        role_entity_list \u003d []"},{"line_number":825,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_b5b48b82","line":822,"range":{"start_line":822,"start_character":8,"end_line":822,"end_character":64},"updated":"2016-01-16 00:09:06.000000000","message":"as an aside, so caching seems like a good thing.  However don\u0027t we already have a caching layer in the manager? So won\u0027t that layer cache these anyway?","commit_id":"78d8ea741af4ddae97e919f93ce9229e05bd2596"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"74e095303a39fa0c7a20eec91b7d2060a74fb4da","unresolved":false,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assignments(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache entites to reduce redundant calls to the drivers"},{"line_number":823,"context_line":"        user_entity \u003d group_entity \u003d prj_entity \u003d role_entity \u003d dmn_entity \u003d {}"},{"line_number":824,"context_line":"        role_entity_list \u003d []"},{"line_number":825,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"ba63e191_85acb5ee","line":822,"range":{"start_line":822,"start_character":8,"end_line":822,"end_character":64},"in_reply_to":"da6ed579_b5b48b82","updated":"2016-01-18 20:15:18.000000000","message":"I think i am confused on how the cache works.  To my knowledge, i thought the cache is only used for get_role(). https://github.com/openstack/keystone/blob/master/keystone/assignment/core.py#L1297 \n\nList_role_assignments calls the driver directly, where does it handle the cache.  Thank you Henry","commit_id":"78d8ea741af4ddae97e919f93ce9229e05bd2596"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c944f836ca20132a1d4ce960af89518b23364f31","unresolved":false,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assignments(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache entites to reduce redundant calls to the drivers"},{"line_number":823,"context_line":"        user_entity \u003d group_entity \u003d prj_entity \u003d role_entity \u003d dmn_entity \u003d {}"},{"line_number":824,"context_line":"        role_entity_list \u003d []"},{"line_number":825,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"ba63e191_5ec52a59","line":822,"range":{"start_line":822,"start_character":8,"end_line":822,"end_character":64},"updated":"2016-01-18 21:19:58.000000000","message":"Reply to your comment on the previous patch:\n\nAgreed, list_role_assignments doesn\u0027t cache....but all the get_\u003centity\u003e() methods do - e.g. get_user, get_domain, get_group, get_role....and isn\u0027t it those entities that you are essentially caching here?","commit_id":"8a7c2d0caab56793692a4cdf857af2f78db02125"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"6e56e3eccac5c5eb8990a6d35a9aa56ea81c1a66","unresolved":false,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assignments(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache entites to reduce redundant calls to the drivers"},{"line_number":823,"context_line":"        user_entity \u003d group_entity \u003d prj_entity \u003d role_entity \u003d dmn_entity \u003d {}"},{"line_number":824,"context_line":"        role_entity_list \u003d []"},{"line_number":825,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"ba63e191_be43066c","line":822,"range":{"start_line":822,"start_character":8,"end_line":822,"end_character":64},"in_reply_to":"ba63e191_1e7ed2e4","updated":"2016-01-18 21:32:55.000000000","message":"Agreed.  I will make those changes now. Thank you for pointing that out","commit_id":"8a7c2d0caab56793692a4cdf857af2f78db02125"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"724d1246247b0bcfee0da121a0708a8b8b986492","unresolved":false,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assignments(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache entites to reduce redundant calls to the drivers"},{"line_number":823,"context_line":"        user_entity \u003d group_entity \u003d prj_entity \u003d role_entity \u003d dmn_entity \u003d {}"},{"line_number":824,"context_line":"        role_entity_list \u003d []"},{"line_number":825,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"ba63e191_7ea34e9f","line":822,"range":{"start_line":822,"start_character":8,"end_line":822,"end_character":64},"in_reply_to":"ba63e191_5ec52a59","updated":"2016-01-18 21:23:26.000000000","message":"Yes definitely, ahh I see now, I was looking in the wrong manager, thanks.  So what else do you think i can do to optimize this?","commit_id":"8a7c2d0caab56793692a4cdf857af2f78db02125"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"20683635881adcbab681921976ec259ce02acc70","unresolved":false,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assignments(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        # Cache entites to reduce redundant calls to the drivers"},{"line_number":823,"context_line":"        user_entity \u003d group_entity \u003d prj_entity \u003d role_entity \u003d dmn_entity \u003d {}"},{"line_number":824,"context_line":"        role_entity_list \u003d []"},{"line_number":825,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"ba63e191_1e7ed2e4","line":822,"range":{"start_line":822,"start_character":8,"end_line":822,"end_character":64},"in_reply_to":"ba63e191_7ea34e9f","updated":"2016-01-18 21:25:51.000000000","message":"So my argument would be: we\u0027re overcomplicating this code by adding caching that won\u0027t gain us anything.....so we should remove the caching here are rely on our existing caching!  I know stevemar was concerned over the performance here, so be interested in his view.","commit_id":"8a7c2d0caab56793692a4cdf857af2f78db02125"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b8a13224d7af1cf49254992ef0cb54786dc93b28","unresolved":false,"context_lines":[{"line_number":817,"context_line":"            return self._get_names_from_role_assignments(role_assignments)"},{"line_number":818,"context_line":"        return role_assignments"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assignments(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        role_entity_list \u003d []"},{"line_number":823,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_df949138","line":820,"updated":"2016-01-19 13:13:36.000000000","message":"misnamed. you are not getting names, but rather full entities","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"e95b1afda7f696879071aa7539217dad5d5e3052","unresolved":false,"context_lines":[{"line_number":817,"context_line":"            return self._get_names_from_role_assignments(role_assignments)"},{"line_number":818,"context_line":"        return role_assignments"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_names_from_role_assignments(self, role_assignments):"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        role_entity_list \u003d []"},{"line_number":823,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_501639a8","line":820,"in_reply_to":"ba63e191_df949138","updated":"2016-01-19 20:41:28.000000000","message":"Done","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2f4c29a6c2b3f199a5453c8b837f201763ab6959","unresolved":false,"context_lines":[{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        role_entity_list \u003d []"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"        def _format_role_data(entity):"},{"line_number":825,"context_line":"            _domain \u003d self.resource_api.get_domain(entity[\u0027domain_id\u0027])"},{"line_number":826,"context_line":"            return {"},{"line_number":827,"context_line":"                \u0027id\u0027: entity[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_3e413d0c","line":824,"range":{"start_line":824,"start_character":12,"end_line":824,"end_character":29},"updated":"2016-01-19 09:31:16.000000000","message":"this should be something like _format_entity, since they are not all roles","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"e95b1afda7f696879071aa7539217dad5d5e3052","unresolved":false,"context_lines":[{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        role_entity_list \u003d []"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"        def _format_role_data(entity):"},{"line_number":825,"context_line":"            _domain \u003d self.resource_api.get_domain(entity[\u0027domain_id\u0027])"},{"line_number":826,"context_line":"            return {"},{"line_number":827,"context_line":"                \u0027id\u0027: entity[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_301385ba","line":824,"range":{"start_line":824,"start_character":12,"end_line":824,"end_character":29},"in_reply_to":"ba63e191_3e413d0c","updated":"2016-01-19 20:41:28.000000000","message":"Done","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2f4c29a6c2b3f199a5453c8b837f201763ab6959","unresolved":false,"context_lines":[{"line_number":839,"context_line":"                elif id_type \u003d\u003d \u0027user_id\u0027:"},{"line_number":840,"context_line":"                    _user \u003d self.identity_api.get_user(id_)"},{"line_number":841,"context_line":"                    formated_user \u003d _format_role_data(_user)"},{"line_number":842,"context_line":"                    new_entity[\u0027user_entity\u0027] \u003d formated_user"},{"line_number":843,"context_line":"                elif id_type \u003d\u003d \u0027group_id\u0027:"},{"line_number":844,"context_line":"                    _group \u003d self.identity_api.get_group(id_)"},{"line_number":845,"context_line":"                    new_entity[\u0027group_entity\u0027] \u003d _format_role_data(_group)"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_9e0aa9d1","line":842,"range":{"start_line":842,"start_character":20,"end_line":842,"end_character":61},"updated":"2016-01-19 09:31:16.000000000","message":"this should be like the others below:\n\n  new_entity[\u0027user_entity\u0027] \u003d _format_role_data(_user)","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"3cf0d4268d855ca918b74d015a9c33fd660470ff","unresolved":false,"context_lines":[{"line_number":839,"context_line":"                elif id_type \u003d\u003d \u0027user_id\u0027:"},{"line_number":840,"context_line":"                    _user \u003d self.identity_api.get_user(id_)"},{"line_number":841,"context_line":"                    formated_user \u003d _format_role_data(_user)"},{"line_number":842,"context_line":"                    new_entity[\u0027user_entity\u0027] \u003d formated_user"},{"line_number":843,"context_line":"                elif id_type \u003d\u003d \u0027group_id\u0027:"},{"line_number":844,"context_line":"                    _group \u003d self.identity_api.get_group(id_)"},{"line_number":845,"context_line":"                    new_entity[\u0027group_entity\u0027] \u003d _format_role_data(_group)"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_f1c1812f","line":842,"range":{"start_line":842,"start_character":20,"end_line":842,"end_character":61},"in_reply_to":"ba63e191_9e0aa9d1","updated":"2016-01-19 15:26:23.000000000","message":"good call! i missed that one :-)","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"e95b1afda7f696879071aa7539217dad5d5e3052","unresolved":false,"context_lines":[{"line_number":839,"context_line":"                elif id_type \u003d\u003d \u0027user_id\u0027:"},{"line_number":840,"context_line":"                    _user \u003d self.identity_api.get_user(id_)"},{"line_number":841,"context_line":"                    formated_user \u003d _format_role_data(_user)"},{"line_number":842,"context_line":"                    new_entity[\u0027user_entity\u0027] \u003d formated_user"},{"line_number":843,"context_line":"                elif id_type \u003d\u003d \u0027group_id\u0027:"},{"line_number":844,"context_line":"                    _group \u003d self.identity_api.get_group(id_)"},{"line_number":845,"context_line":"                    new_entity[\u0027group_entity\u0027] \u003d _format_role_data(_group)"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_704a5dc7","line":842,"range":{"start_line":842,"start_character":20,"end_line":842,"end_character":61},"in_reply_to":"ba63e191_f1c1812f","updated":"2016-01-19 20:41:28.000000000","message":"Done","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":4294,"context_line":"        self.role_api.create_role(role1[\u0027id\u0027], role1)"},{"line_number":4295,"context_line":""},{"line_number":4296,"context_line":"        new_domain \u003d self._get_domain_fixture()"},{"line_number":4297,"context_line":"        new_user \u003d unit.new_user_ref(name\u003d\u0027tom\u0027, domain_id\u003dnew_domain[\u0027id\u0027])"},{"line_number":4298,"context_line":"        new_user \u003d self.identity_api.create_user(new_user)"},{"line_number":4299,"context_line":"        new_project \u003d {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":4300,"context_line":"                       \u0027name\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_ee8d86d3","line":4297,"updated":"2015-12-08 18:41:06.000000000","message":"use a random string for the name.","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":4294,"context_line":"        self.role_api.create_role(role1[\u0027id\u0027], role1)"},{"line_number":4295,"context_line":""},{"line_number":4296,"context_line":"        new_domain \u003d self._get_domain_fixture()"},{"line_number":4297,"context_line":"        new_user \u003d unit.new_user_ref(name\u003d\u0027tom\u0027, domain_id\u003dnew_domain[\u0027id\u0027])"},{"line_number":4298,"context_line":"        new_user \u003d self.identity_api.create_user(new_user)"},{"line_number":4299,"context_line":"        new_project \u003d {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":4300,"context_line":"                       \u0027name\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_ced19f24","line":4297,"in_reply_to":"7a740942_ee8d86d3","updated":"2015-12-08 22:20:57.000000000","message":"woops forgot i left that in","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":4319,"context_line":"            include_names\u003dTrue)"},{"line_number":4320,"context_line":""},{"line_number":4321,"context_line":"        # Should be 1 assignment returned"},{"line_number":4322,"context_line":"        self.assertEqual(1, len(_asgmt_prj))"},{"line_number":4323,"context_line":"        self.assertEqual(1, len(_asgmt_grp))"},{"line_number":4324,"context_line":""},{"line_number":4325,"context_line":"        # Checks the names are in the project response"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_4eb5ba7b","line":4322,"updated":"2015-12-08 18:41:06.000000000","message":"use the HasLength matcher then we\u0027ll get better output in the case of mismatch.","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":4319,"context_line":"            include_names\u003dTrue)"},{"line_number":4320,"context_line":""},{"line_number":4321,"context_line":"        # Should be 1 assignment returned"},{"line_number":4322,"context_line":"        self.assertEqual(1, len(_asgmt_prj))"},{"line_number":4323,"context_line":"        self.assertEqual(1, len(_asgmt_grp))"},{"line_number":4324,"context_line":""},{"line_number":4325,"context_line":"        # Checks the names are in the project response"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_aeebf3da","line":4322,"in_reply_to":"7a740942_4eb5ba7b","updated":"2015-12-08 22:20:57.000000000","message":"Done","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed740ea631c8e0b58705ca5b6e1d85b3d6565ec","unresolved":false,"context_lines":[{"line_number":4327,"context_line":"        self.assertEqual(new_project[\u0027name\u0027], _asgmt_prj[0][\u0027project_name\u0027])"},{"line_number":4328,"context_line":"        self.assertEqual(role1[\u0027name\u0027], _asgmt_prj[0][\u0027role_name\u0027])"},{"line_number":4329,"context_line":""},{"line_number":4330,"context_line":"        # Checks the names are in the group response"},{"line_number":4331,"context_line":"        self.assertEqual(new_group[\u0027name\u0027], _asgmt_grp[0][\u0027group_name\u0027])"},{"line_number":4332,"context_line":"        self.assertEqual(new_project[\u0027name\u0027], _asgmt_grp[0][\u0027project_name\u0027])"},{"line_number":4333,"context_line":"        self.assertEqual(role1[\u0027name\u0027], _asgmt_grp[0][\u0027role_name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_8e664228","line":4330,"updated":"2015-12-08 18:41:06.000000000","message":"I assume you\u0027re planning to also add a domain assignment?","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"21d2ad1b3dc65a75447ec767014fb4be2d744a11","unresolved":false,"context_lines":[{"line_number":4327,"context_line":"        self.assertEqual(new_project[\u0027name\u0027], _asgmt_prj[0][\u0027project_name\u0027])"},{"line_number":4328,"context_line":"        self.assertEqual(role1[\u0027name\u0027], _asgmt_prj[0][\u0027role_name\u0027])"},{"line_number":4329,"context_line":""},{"line_number":4330,"context_line":"        # Checks the names are in the group response"},{"line_number":4331,"context_line":"        self.assertEqual(new_group[\u0027name\u0027], _asgmt_grp[0][\u0027group_name\u0027])"},{"line_number":4332,"context_line":"        self.assertEqual(new_project[\u0027name\u0027], _asgmt_grp[0][\u0027project_name\u0027])"},{"line_number":4333,"context_line":"        self.assertEqual(role1[\u0027name\u0027], _asgmt_grp[0][\u0027role_name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_5d056b0e","line":4330,"in_reply_to":"7a740942_8e664228","updated":"2015-12-08 22:20:57.000000000","message":"Yes! haha i noticed that a couple days ago.  I will add that tomorrow","commit_id":"08c137106cb071df465f7b948078dfcc8c155b9c"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"e620eaadbebb99db801ecf41735c8e5fc861c022","unresolved":false,"context_lines":[{"line_number":4106,"context_line":"        new_domain \u003d self._get_domain_fixture()"},{"line_number":4107,"context_line":"        new_user \u003d unit.new_user_ref(domain_id\u003dnew_domain[\u0027id\u0027])"},{"line_number":4108,"context_line":"        new_user \u003d self.identity_api.create_user(new_user)"},{"line_number":4109,"context_line":"        new_project \u003d {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":4110,"context_line":"                       \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":4111,"context_line":"                       \u0027domain_id\u0027: new_domain[\u0027id\u0027]}"},{"line_number":4112,"context_line":"        new_group \u003d unit.new_group_ref(domain_id\u003dnew_domain[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_79d105cd","line":4109,"updated":"2015-12-15 14:03:15.000000000","message":"I think that you can use the refs to keep the pattern, like: \ndomain \u003d unit.new_domain_ref()\nproject \u003d unit.new_project_ref(domain_id\u003ddomain[\u0027\u0027id\u0027])\n\nplease see line 4010 for reference.","commit_id":"ee8b9b7b81a6e6db75c3e23e34488ee60e4c7e27"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"3b962a2ca24f10172ffadd7451b2b8988e608766","unresolved":false,"context_lines":[{"line_number":4158,"context_line":"                         temp_grp[\u0027project_entity\u0027][\u0027domain\u0027][\u0027id\u0027])"},{"line_number":4159,"context_line":"        self.assertEqual(role1[\u0027name\u0027], temp_grp[\u0027role_entity\u0027][\u0027name\u0027])"},{"line_number":4160,"context_line":""},{"line_number":4161,"context_line":"    def test_list_role_assignments_with_include_names(self):"},{"line_number":4162,"context_line":"        role1 \u003d unit.new_role_ref()"},{"line_number":4163,"context_line":"        self.role_api.create_role(role1[\u0027id\u0027], role1)"},{"line_number":4164,"context_line":"        new_domain \u003d unit.new_domain_ref()"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_55542f20","line":4161,"range":{"start_line":4161,"start_character":8,"end_line":4161,"end_character":53},"updated":"2016-01-16 00:09:06.000000000","message":"not quite clear what this is doing that the test above is not....","commit_id":"78d8ea741af4ddae97e919f93ce9229e05bd2596"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"74e095303a39fa0c7a20eec91b7d2060a74fb4da","unresolved":false,"context_lines":[{"line_number":4158,"context_line":"                         temp_grp[\u0027project_entity\u0027][\u0027domain\u0027][\u0027id\u0027])"},{"line_number":4159,"context_line":"        self.assertEqual(role1[\u0027name\u0027], temp_grp[\u0027role_entity\u0027][\u0027name\u0027])"},{"line_number":4160,"context_line":""},{"line_number":4161,"context_line":"    def test_list_role_assignments_with_include_names(self):"},{"line_number":4162,"context_line":"        role1 \u003d unit.new_role_ref()"},{"line_number":4163,"context_line":"        self.role_api.create_role(role1[\u0027id\u0027], role1)"},{"line_number":4164,"context_line":"        new_domain \u003d unit.new_domain_ref()"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba63e191_856fd591","line":4161,"range":{"start_line":4161,"start_character":8,"end_line":4161,"end_character":53},"in_reply_to":"da6ed579_55542f20","updated":"2016-01-18 20:15:18.000000000","message":"Yes your right that is confusing. The bottom tests domain scope while the top tests project scope.  It was brought over from test_backend_sql.py since i didn\u0027t know where to exclude ldap test.  I will clean it up and add comment so it makes much more sense.","commit_id":"78d8ea741af4ddae97e919f93ce9229e05bd2596"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"3b962a2ca24f10172ffadd7451b2b8988e608766","unresolved":false,"context_lines":[{"line_number":4176,"context_line":"        _first_asgmt_usr \u003d _asgmt_usr[0]"},{"line_number":4177,"context_line":"        self.assertEqual(new_domain[\u0027name\u0027],"},{"line_number":4178,"context_line":"                         _first_asgmt_usr[\u0027domain_entity\u0027][\u0027name\u0027])"},{"line_number":4179,"context_line":""},{"line_number":4180,"context_line":""},{"line_number":4181,"context_line":"class TokenTests(object):"},{"line_number":4182,"context_line":"    def _create_token_id(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_552bcf94","line":4179,"updated":"2016-01-16 00:09:06.000000000","message":"We should also test that the names are NOT included when you don\u0027t set include_names\u003dTrue....unless that would already be caught by a test","commit_id":"78d8ea741af4ddae97e919f93ce9229e05bd2596"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2fa7a569091d962cfc7cc5fe08a97d6152fc8ff3","unresolved":false,"context_lines":[{"line_number":4176,"context_line":"        _first_asgmt_usr \u003d _asgmt_usr[0]"},{"line_number":4177,"context_line":"        self.assertEqual(new_domain[\u0027name\u0027],"},{"line_number":4178,"context_line":"                         _first_asgmt_usr[\u0027domain_entity\u0027][\u0027name\u0027])"},{"line_number":4179,"context_line":""},{"line_number":4180,"context_line":""},{"line_number":4181,"context_line":"class TokenTests(object):"},{"line_number":4182,"context_line":"    def _create_token_id(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba63e191_0b1d4166","line":4179,"in_reply_to":"da6ed579_552bcf94","updated":"2016-01-18 17:01:57.000000000","message":"Good call. I will do that now. and clean up the above tests.","commit_id":"78d8ea741af4ddae97e919f93ce9229e05bd2596"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b8a13224d7af1cf49254992ef0cb54786dc93b28","unresolved":false,"context_lines":[{"line_number":4102,"context_line":"                                  {\u0027name\u0027: self.role_member[\u0027name\u0027]})"},{"line_number":4103,"context_line":"        # If the previous line didn\u0027t raise an exception then the test passes."},{"line_number":4104,"context_line":""},{"line_number":4105,"context_line":"    def test_list_role_assignment_containing_names(self):"},{"line_number":4106,"context_line":"        # Create Refs"},{"line_number":4107,"context_line":"        new_role \u003d unit.new_role_ref()"},{"line_number":4108,"context_line":"        new_domain \u003d self._get_domain_fixture()"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_9f037973","line":4105,"updated":"2016-01-19 13:13:36.000000000","message":"I doubt this is able to actually cover all of the \"if\" statements in the code. Have you check to see what coverage says?","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"e95b1afda7f696879071aa7539217dad5d5e3052","unresolved":false,"context_lines":[{"line_number":4102,"context_line":"                                  {\u0027name\u0027: self.role_member[\u0027name\u0027]})"},{"line_number":4103,"context_line":"        # If the previous line didn\u0027t raise an exception then the test passes."},{"line_number":4104,"context_line":""},{"line_number":4105,"context_line":"    def test_list_role_assignment_containing_names(self):"},{"line_number":4106,"context_line":"        # Create Refs"},{"line_number":4107,"context_line":"        new_role \u003d unit.new_role_ref()"},{"line_number":4108,"context_line":"        new_domain \u003d self._get_domain_fixture()"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_ebc0a27e","line":4105,"in_reply_to":"ba63e191_2014a942","updated":"2016-01-19 20:41:28.000000000","message":"Yeah. still 100% Just yellow on the last \u0027elif\u0027 in core.py (that block is covered though)","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"3cf0d4268d855ca918b74d015a9c33fd660470ff","unresolved":false,"context_lines":[{"line_number":4102,"context_line":"                                  {\u0027name\u0027: self.role_member[\u0027name\u0027]})"},{"line_number":4103,"context_line":"        # If the previous line didn\u0027t raise an exception then the test passes."},{"line_number":4104,"context_line":""},{"line_number":4105,"context_line":"    def test_list_role_assignment_containing_names(self):"},{"line_number":4106,"context_line":"        # Create Refs"},{"line_number":4107,"context_line":"        new_role \u003d unit.new_role_ref()"},{"line_number":4108,"context_line":"        new_domain \u003d self._get_domain_fixture()"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba63e191_2014a942","line":4105,"in_reply_to":"ba63e191_9f037973","updated":"2016-01-19 15:26:23.000000000","message":"last time i checked it was 2 commits ago,  i will check now and get back to you! Thanks.","commit_id":"6c9aeda66ce73b61218996b9fd3dcfff5dc780ce"}],"keystone/tests/unit/test_backend_sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f6a50d74501389ac00f27ecf9a3e37f1c8f37cde","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        # roles assignments."},{"line_number":412,"context_line":"        self.assertThat(user_domains, matchers.HasLength(0))"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    def test_list_role_assignments_with_include_names(self):"},{"line_number":415,"context_line":"        \"\"\"Test that domain name is correctly returned from sql"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        Only test domain name is correctly returned from sql since"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_a58faa73","line":414,"updated":"2016-01-06 15:30:34.000000000","message":"this test should be moved to test_backend and then skip the test in test_backend_ldap","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        # roles assignments."},{"line_number":412,"context_line":"        self.assertThat(user_domains, matchers.HasLength(0))"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    def test_list_role_assignments_with_include_names(self):"},{"line_number":415,"context_line":"        \"\"\"Test that domain name is correctly returned from sql"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        Only test domain name is correctly returned from sql since"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_81661328","line":414,"in_reply_to":"fa69d971_a58faa73","updated":"2016-01-14 21:19:35.000000000","message":"Thanks, I was wondering if this was the correct way of doing this.","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"}],"keystone/tests/unit/test_v3_assignment.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"28b10db9aebfb261fe0f73a2061ece71c554b0e3","unresolved":false,"context_lines":[{"line_number":1456,"context_line":"        self.assertEqual(rs.status_int, http_client.OK)"},{"line_number":1457,"context_line":"        body \u003d json.loads(rs.body)"},{"line_number":1458,"context_line":""},{"line_number":1459,"context_line":"        expectDict \u003d {"},{"line_number":1460,"context_line":"            \u0027links\u0027: {"},{"line_number":1461,"context_line":"                \u0027assignment\u0027: \u0027http://localhost/v3/projects/\u0027 + project1[\u0027id\u0027]"},{"line_number":1462,"context_line":"                              + \u0027/users/\u0027 + user1[\u0027id\u0027] + \u0027/roles/\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_605c2419","line":1459,"updated":"2016-01-07 03:28:02.000000000","message":"camelCase? suggest how about \"expected \u003d\"","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"2880f1e5c4001b6180377cb05eb92954d8fb1659","unresolved":false,"context_lines":[{"line_number":1456,"context_line":"        self.assertEqual(rs.status_int, http_client.OK)"},{"line_number":1457,"context_line":"        body \u003d json.loads(rs.body)"},{"line_number":1458,"context_line":""},{"line_number":1459,"context_line":"        expectDict \u003d {"},{"line_number":1460,"context_line":"            \u0027links\u0027: {"},{"line_number":1461,"context_line":"                \u0027assignment\u0027: \u0027http://localhost/v3/projects/\u0027 + project1[\u0027id\u0027]"},{"line_number":1462,"context_line":"                              + \u0027/users/\u0027 + user1[\u0027id\u0027] + \u0027/roles/\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_61f16a95","line":1459,"in_reply_to":"fa69d971_605c2419","updated":"2016-01-14 21:19:35.000000000","message":"Done","commit_id":"6c8e6d738678733f846592de8b35bb9f62c780b2"}],"releasenotes/notes/list_role_assignment_names-33aedc1e521230b6.yaml":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3ece5df008672c4920efd2d222a09bd6527cd387","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`bug 1479569 \u003chttps://bugs.launchpad.net/keystone/+bug/1479569\u003e`_]"},{"line_number":5,"context_line":"    Names have been added to list role assignments, rather than returning"},{"line_number":6,"context_line":"    just the internal ids of the objects the names are also returned."}],"source_content_type":"text/x-yaml","patch_set":32,"id":"ba63e191_cb01176c","line":5,"range":{"start_line":5,"start_character":29,"end_line":5,"end_character":50},"updated":"2016-01-19 22:11:40.000000000","message":"actually writing out the API would be good \"(GET /role_assignments?include_names\u003dTrue)\"","commit_id":"f51d34bde3faabc3638e065b2f2315c84e33ba8f"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"48c6924ba6451ab0066c4e4295182de93cca3510","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`bug 1479569 \u003chttps://bugs.launchpad.net/keystone/+bug/1479569\u003e`_]"},{"line_number":5,"context_line":"    Names have been added to list role assignments, rather than returning"},{"line_number":6,"context_line":"    just the internal ids of the objects the names are also returned."}],"source_content_type":"text/x-yaml","patch_set":32,"id":"ba63e191_76cd6e5c","line":5,"range":{"start_line":5,"start_character":29,"end_line":5,"end_character":50},"in_reply_to":"ba63e191_cb01176c","updated":"2016-01-19 22:23:51.000000000","message":"will do on a follow on patch","commit_id":"f51d34bde3faabc3638e065b2f2315c84e33ba8f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3ece5df008672c4920efd2d222a09bd6527cd387","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`bug 1479569 \u003chttps://bugs.launchpad.net/keystone/+bug/1479569\u003e`_]"},{"line_number":5,"context_line":"    Names have been added to list role assignments, rather than returning"},{"line_number":6,"context_line":"    just the internal ids of the objects the names are also returned."}],"source_content_type":"text/x-yaml","patch_set":32,"id":"ba63e191_0be16fd0","line":6,"range":{"start_line":6,"start_character":22,"end_line":6,"end_character":25},"updated":"2016-01-19 22:11:40.000000000","message":"IDs","commit_id":"f51d34bde3faabc3638e065b2f2315c84e33ba8f"}]}
