)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13914f0a12ee4f5b892615d02749bc4005b60e48","unresolved":false,"context_lines":[{"line_number":12,"context_line":"information will be cleared."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I5726defea2533a86082da99e5c5a0ffe497a7008"},{"line_number":15,"context_line":"Closes-Bug: #1523368"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a5ae5dd_c2b4da83","line":15,"range":{"start_line":15,"start_character":13,"end_line":15,"end_character":20},"updated":"2016-02-09 07:18:08.000000000","message":"wrong bug: 1523369","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"c05bae7bce97887d4c22d76ad3d3a77f8001874b","unresolved":false,"context_lines":[{"line_number":20,"context_line":"that users may list that project as their default project. This"},{"line_number":21,"context_line":"patch provides tests that exposes this issue."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Create V9 driver for identity backend"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Upcoming changes will add new methods to the identity drivers, so"},{"line_number":26,"context_line":"in preparation for that we create a new versioned driver."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"In order to allow the use of a legacy driver, one of the unit tests"},{"line_number":29,"context_line":"had to be changed. Further, in order to maintain distinct models"},{"line_number":30,"context_line":"for Identity, the copy of the sql driver for legacy testing required"},{"line_number":31,"context_line":"all the classes/tables names to be given the V8 suffix."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Limitations:"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a122d0e_73b5ce2f","line":31,"range":{"start_line":23,"start_character":0,"end_line":31,"end_character":55},"updated":"2016-04-18 13:49:36.000000000","message":"You\u0027re not doing this part here, right? since this was made in the precious patch, so I suggest remove this part of the commit message.","commit_id":"ed8cec0ff1df408b06f2f9289ab8272e01c394e3"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"43cfddf70555397ca723ebaf4f206313ac36f358","unresolved":false,"context_lines":[{"line_number":20,"context_line":"that users may list that project as their default project. This"},{"line_number":21,"context_line":"patch provides tests that exposes this issue."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Create V9 driver for identity backend"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Upcoming changes will add new methods to the identity drivers, so"},{"line_number":26,"context_line":"in preparation for that we create a new versioned driver."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"In order to allow the use of a legacy driver, one of the unit tests"},{"line_number":29,"context_line":"had to be changed. Further, in order to maintain distinct models"},{"line_number":30,"context_line":"for Identity, the copy of the sql driver for legacy testing required"},{"line_number":31,"context_line":"all the classes/tables names to be given the V8 suffix."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Limitations:"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a122d0e_338516ad","line":31,"range":{"start_line":23,"start_character":0,"end_line":31,"end_character":55},"in_reply_to":"1a122d0e_73b5ce2f","updated":"2016-04-18 13:59:46.000000000","message":"Yes you are correct. removed.\nI am learning gradually.","commit_id":"ed8cec0ff1df408b06f2f9289ab8272e01c394e3"}],"keystone/assignment/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13914f0a12ee4f5b892615d02749bc4005b60e48","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                          role_id)"},{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_82da62e8","line":228,"range":{"start_line":228,"start_character":8,"end_line":228,"end_character":32},"updated":"2016-02-09 07:18:08.000000000","message":"this should be a private method, prefix with an underscore _remove_default_project_from_user","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"0f412d9d76e885f861929d4a32d76dcdb79dbe6d","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                          role_id)"},{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_22dda514","line":228,"range":{"start_line":228,"start_character":8,"end_line":228,"end_character":32},"in_reply_to":"5a5ae5dd_82da62e8","updated":"2016-02-10 08:19:36.000000000","message":"I have moved this method to Identity.","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13914f0a12ee4f5b892615d02749bc4005b60e48","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_8225820b","line":229,"range":{"start_line":229,"start_character":45,"end_line":229,"end_character":51},"updated":"2016-02-09 07:18:08.000000000","message":"project","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13914f0a12ee4f5b892615d02749bc4005b60e48","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_e20f9686","line":229,"range":{"start_line":229,"start_character":17,"end_line":229,"end_character":23},"updated":"2016-02-09 07:18:08.000000000","message":"project","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"0f412d9d76e885f861929d4a32d76dcdb79dbe6d","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_2204c57c","line":229,"range":{"start_line":229,"start_character":45,"end_line":229,"end_character":51},"in_reply_to":"5a5ae5dd_8225820b","updated":"2016-02-10 08:19:36.000000000","message":"This line does not exist any more.","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"0f412d9d76e885f861929d4a32d76dcdb79dbe6d","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_e2fd4d6f","line":229,"range":{"start_line":229,"start_character":17,"end_line":229,"end_character":23},"in_reply_to":"5a5ae5dd_e20f9686","updated":"2016-02-10 08:19:36.000000000","message":"This line does not exist any more.","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13914f0a12ee4f5b892615d02749bc4005b60e48","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"},{"line_number":233,"context_line":"        user[\u0027id\u0027] \u003d user.pop(\u0027user_id\u0027)"},{"line_number":234,"context_line":"        if \u0027project_id\u0027 in user:"},{"line_number":235,"context_line":"            user[\u0027default_project_id\u0027] \u003d user.pop(\u0027project_id\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_a208be2e","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":29},"updated":"2016-02-09 07:18:08.000000000","message":"if copying, use copy.deepcopy()","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"0f412d9d76e885f861929d4a32d76dcdb79dbe6d","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"},{"line_number":233,"context_line":"        user[\u0027id\u0027] \u003d user.pop(\u0027user_id\u0027)"},{"line_number":234,"context_line":"        if \u0027project_id\u0027 in user:"},{"line_number":235,"context_line":"            user[\u0027default_project_id\u0027] \u003d user.pop(\u0027project_id\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_2d627fae","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":29},"in_reply_to":"5a5ae5dd_a208be2e","updated":"2016-02-10 08:19:36.000000000","message":"Done","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13914f0a12ee4f5b892615d02749bc4005b60e48","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        user \u003d payload.copy()"},{"line_number":233,"context_line":"        user[\u0027id\u0027] \u003d user.pop(\u0027user_id\u0027)"},{"line_number":234,"context_line":"        if \u0027project_id\u0027 in user:"},{"line_number":235,"context_line":"            user[\u0027default_project_id\u0027] \u003d user.pop(\u0027project_id\u0027)"},{"line_number":236,"context_line":"            user[\u0027default_project_id\u0027] \u003d None"},{"line_number":237,"context_line":"        self.identity_api.update_user(user_id, user)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_a250be5f","line":236,"range":{"start_line":235,"start_character":12,"end_line":236,"end_character":45},"updated":"2016-02-09 07:18:08.000000000","message":"i don\u0027t get the point of this, you are setting it, to the tenant value, then setting it to None.","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"0f412d9d76e885f861929d4a32d76dcdb79dbe6d","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        user \u003d payload.copy()"},{"line_number":233,"context_line":"        user[\u0027id\u0027] \u003d user.pop(\u0027user_id\u0027)"},{"line_number":234,"context_line":"        if \u0027project_id\u0027 in user:"},{"line_number":235,"context_line":"            user[\u0027default_project_id\u0027] \u003d user.pop(\u0027project_id\u0027)"},{"line_number":236,"context_line":"            user[\u0027default_project_id\u0027] \u003d None"},{"line_number":237,"context_line":"        self.identity_api.update_user(user_id, user)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_82efb9af","line":236,"range":{"start_line":235,"start_character":12,"end_line":236,"end_character":45},"in_reply_to":"5a5ae5dd_a250be5f","updated":"2016-02-10 08:19:36.000000000","message":"Done","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13914f0a12ee4f5b892615d02749bc4005b60e48","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                          role_id)"},{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"},{"line_number":233,"context_line":"        user[\u0027id\u0027] \u003d user.pop(\u0027user_id\u0027)"},{"line_number":234,"context_line":"        if \u0027project_id\u0027 in user:"},{"line_number":235,"context_line":"            user[\u0027default_project_id\u0027] \u003d user.pop(\u0027project_id\u0027)"},{"line_number":236,"context_line":"            user[\u0027default_project_id\u0027] \u003d None"},{"line_number":237,"context_line":"        self.identity_api.update_user(user_id, user)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":240,"context_line":"    # point in the future."}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_c2105a5c","line":237,"range":{"start_line":228,"start_character":0,"end_line":237,"end_character":52},"updated":"2016-02-09 07:18:08.000000000","message":"you may be able to get away with a fairly minimal function, like:\n\ndef _set_default_project_to_none(self, user_id)\n    # set default project to None if project has been removed\n    self.identity_api.update_user(user_id, {\u0027default_project_id\u0027: None})\n\nalso, i\u0027m not clear on why this has to exist in this file, and no in resource/core.py","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"0f412d9d76e885f861929d4a32d76dcdb79dbe6d","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                          role_id)"},{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"},{"line_number":233,"context_line":"        user[\u0027id\u0027] \u003d user.pop(\u0027user_id\u0027)"},{"line_number":234,"context_line":"        if \u0027project_id\u0027 in user:"},{"line_number":235,"context_line":"            user[\u0027default_project_id\u0027] \u003d user.pop(\u0027project_id\u0027)"},{"line_number":236,"context_line":"            user[\u0027default_project_id\u0027] \u003d None"},{"line_number":237,"context_line":"        self.identity_api.update_user(user_id, user)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":240,"context_line":"    # point in the future."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_e2346d4b","line":237,"range":{"start_line":228,"start_character":0,"end_line":237,"end_character":52},"in_reply_to":"5a5ae5dd_c2105a5c","updated":"2016-02-10 08:19:36.000000000","message":"Done\nMoved this method to identity.","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6f7e7baef6e4621cee8a79576259eeb5fc9e4512","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                          role_id)"},{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_e869a226","line":228,"updated":"2016-02-09 14:31:07.000000000","message":"I\u0027d suggest using explicit variables that are more descriptive of what we need from the payload dictionary: \n\n    def remove_project_from_user(self, user_id, project_id):\n\nThe variable name `payload` is ambiguous.","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"11c808c952d04688ae51b9c025398bdc72d62563","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                          role_id)"},{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_820019ac","line":228,"in_reply_to":"5a5ae5dd_e869a226","updated":"2016-02-10 08:20:52.000000000","message":"I have changed to explicit variables. \ndef set_default_project_to_none(self, user_id)","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e20266bfdcafcfe1b98c2af38c8ac92259c8d0fb","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_fcc89aaa","line":229,"range":{"start_line":229,"start_character":17,"end_line":229,"end_character":23},"updated":"2016-02-09 08:27:58.000000000","message":"I would suggest using the word project here.","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"adeaf60db68200735c66d4b158dbe595b73dc168","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_b24d62c6","line":229,"range":{"start_line":229,"start_character":17,"end_line":229,"end_character":23},"in_reply_to":"5a5ae5dd_fcc89aaa","updated":"2016-02-09 12:34:12.000000000","message":"I will change to project.","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e20266bfdcafcfe1b98c2af38c8ac92259c8d0fb","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                          role_id)"},{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"},{"line_number":233,"context_line":"        user[\u0027id\u0027] \u003d user.pop(\u0027user_id\u0027)"},{"line_number":234,"context_line":"        if \u0027project_id\u0027 in user:"},{"line_number":235,"context_line":"            user[\u0027default_project_id\u0027] \u003d user.pop(\u0027project_id\u0027)"},{"line_number":236,"context_line":"            user[\u0027default_project_id\u0027] \u003d None"},{"line_number":237,"context_line":"        self.identity_api.update_user(user_id, user)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":240,"context_line":"    # point in the future."}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_dcd91e85","line":237,"range":{"start_line":228,"start_character":0,"end_line":237,"end_character":52},"updated":"2016-02-09 08:27:58.000000000","message":"I\u0027m not sure why this is in assignment - since it is not changing any assignments (we already delete all the assignments for a project being deleted). I think what you are doing is deleting thev value in  default project attribute of the user entity? In which case this should be in identity. Also, you should consider using the project deletion message for such communication (see the way identity traps the delete domain message at the top of the controller)","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6f7e7baef6e4621cee8a79576259eeb5fc9e4512","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        if \u0027project_id\u0027 in user:"},{"line_number":235,"context_line":"            user[\u0027default_project_id\u0027] \u003d user.pop(\u0027project_id\u0027)"},{"line_number":236,"context_line":"            user[\u0027default_project_id\u0027] \u003d None"},{"line_number":237,"context_line":"        self.identity_api.update_user(user_id, user)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":240,"context_line":"    # point in the future."}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_c83e2629","line":237,"in_reply_to":"5a5ae5dd_585bed2e","updated":"2016-02-09 14:31:07.000000000","message":"++","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"11c808c952d04688ae51b9c025398bdc72d62563","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                          role_id)"},{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"},{"line_number":233,"context_line":"        user[\u0027id\u0027] \u003d user.pop(\u0027user_id\u0027)"},{"line_number":234,"context_line":"        if \u0027project_id\u0027 in user:"},{"line_number":235,"context_line":"            user[\u0027default_project_id\u0027] \u003d user.pop(\u0027project_id\u0027)"},{"line_number":236,"context_line":"            user[\u0027default_project_id\u0027] \u003d None"},{"line_number":237,"context_line":"        self.identity_api.update_user(user_id, user)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":240,"context_line":"    # point in the future."}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_82eed9ea","line":237,"range":{"start_line":228,"start_character":0,"end_line":237,"end_character":52},"in_reply_to":"5a5ae5dd_585bed2e","updated":"2016-02-10 08:20:52.000000000","message":"Moved the method to identity and changed the method name to \"set_default_project_to_none\".","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"adeaf60db68200735c66d4b158dbe595b73dc168","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                          role_id)"},{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"},{"line_number":233,"context_line":"        user[\u0027id\u0027] \u003d user.pop(\u0027user_id\u0027)"},{"line_number":234,"context_line":"        if \u0027project_id\u0027 in user:"},{"line_number":235,"context_line":"            user[\u0027default_project_id\u0027] \u003d user.pop(\u0027project_id\u0027)"},{"line_number":236,"context_line":"            user[\u0027default_project_id\u0027] \u003d None"},{"line_number":237,"context_line":"        self.identity_api.update_user(user_id, user)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":240,"context_line":"    # point in the future."}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_f2767ad7","line":237,"range":{"start_line":228,"start_character":0,"end_line":237,"end_character":52},"in_reply_to":"5a5ae5dd_dcd91e85","updated":"2016-02-09 12:34:12.000000000","message":"\u003e Also, you should consider using the project deletion message for such communication (see the way identity traps the delete domain message at the top of the controller)\n\nThanks for your comment. \nDo you mean it is good to add comments in code? like mentioned below. Or improve the warning message in LOG.warning?\n# NOTE(morganfainberg): This is not a critical error it\n# just means that the project cannot be removed from\n# the user information.\n# This could occur if roles aren\u0027t found\n# or if the user is invalid or if there are no roles\n# for the user on that project.","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6bd7a175afaa428beed9c13ec03ec3f08c20d77a","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                          role_id)"},{"line_number":226,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def remove_project_from_user(self, payload):"},{"line_number":229,"context_line":"        # Remove tanent from a user once the tanent is deleted"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        user_id \u003d payload[\u0027user_id\u0027]"},{"line_number":232,"context_line":"        user \u003d payload.copy()"},{"line_number":233,"context_line":"        user[\u0027id\u0027] \u003d user.pop(\u0027user_id\u0027)"},{"line_number":234,"context_line":"        if \u0027project_id\u0027 in user:"},{"line_number":235,"context_line":"            user[\u0027default_project_id\u0027] \u003d user.pop(\u0027project_id\u0027)"},{"line_number":236,"context_line":"            user[\u0027default_project_id\u0027] \u003d None"},{"line_number":237,"context_line":"        self.identity_api.update_user(user_id, user)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":240,"context_line":"    # point in the future."}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_585bed2e","line":237,"range":{"start_line":228,"start_character":0,"end_line":237,"end_character":52},"in_reply_to":"5a5ae5dd_f2767ad7","updated":"2016-02-09 12:47:31.000000000","message":"What I meant is that this whole method should be in identity/core.py not in assignment/core.py","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"}],"keystone/identity/backends/base.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"6b83b7188734920b54e775f859dcfe5578299240","unresolved":false,"context_lines":[{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    \"\"\""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    pass"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"class V9IdentityWrapperForV8Driver(IdentityDriverV9):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_eb116953","line":300,"range":{"start_line":300,"start_character":4,"end_line":300,"end_character":8},"updated":"2016-06-08 13:12:47.000000000","message":"list_users_with_default_project_id should go here","commit_id":"ca1cc72fdd80ffa00beb462d9b613088f8bb37ec"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6959b384996f09e249289b67124a35a386b1a470","unresolved":false,"context_lines":[{"line_number":362,"context_line":"    def list_users(self, hints):"},{"line_number":363,"context_line":"        return self.driver.list_users(hints)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":366,"context_line":"        return self.driver.list_users_with_default_project_id(project_id,"},{"line_number":367,"context_line":"                                                              hints)"},{"line_number":368,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a122d0e_9cbd17da","line":365,"range":{"start_line":365,"start_character":8,"end_line":365,"end_character":42},"updated":"2016-04-18 14:37:12.000000000","message":"This shouldn\u0027t go in the wrapper - since the wrapper is to support calls to the V8 Interface when you are running a V9 driver. This signature should go in the IdentityDriverV9 class.","commit_id":"ca1cc72fdd80ffa00beb462d9b613088f8bb37ec"}],"keystone/identity/backends/ldap.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"80d63b3b4a130f56e1ae555940e71498c1bc5d83","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def list_users(self, hints):"},{"line_number":85,"context_line":"        return self.user.get_all_filtered(hints)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":88,"context_line":"        pass"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def get_user_by_name(self, user_name, domain_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_4e755e96","line":87,"updated":"2016-03-30 14:19:36.000000000","message":"We should at least add a comment as to why we don\u0027t do this for LDAP (vs. SQL).","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"c156e7c4a0ecfe24bb6175bbdbbbe82ed0d1d79f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def list_users(self, hints):"},{"line_number":85,"context_line":"        return self.user.get_all_filtered(hints)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":88,"context_line":"        pass"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def get_user_by_name(self, user_name, domain_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_bccc296b","line":87,"in_reply_to":"ba0121b8_4e755e96","updated":"2016-04-01 04:53:17.000000000","message":"Yes. I will add a comment for the same.","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a356d2e0742022bb22e2a2c6a1be3baa02938ab1","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def list_users(self, hints):"},{"line_number":85,"context_line":"        return self.user.get_all_filtered(hints)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":88,"context_line":"        # This function is not implemented as the LDAP backed"},{"line_number":89,"context_line":"        # support will be removed. LDAP backend will be treated as"},{"line_number":90,"context_line":"        # readonly."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba0121b8_8d2ee3a2","line":87,"range":{"start_line":87,"start_character":0,"end_line":87,"end_character":68},"updated":"2016-04-01 15:27:21.000000000","message":"What does this have to do with deleting the project_id?  New driver method, perhaps add this to your commit message.","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"9fad83c5783fc624e490485706263a01fbe1dd96","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def list_users(self, hints):"},{"line_number":85,"context_line":"        return self.user.get_all_filtered(hints)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":88,"context_line":"        # This function is not implemented as the LDAP backed"},{"line_number":89,"context_line":"        # support will be removed. LDAP backend will be treated as"},{"line_number":90,"context_line":"        # readonly."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba0121b8_d3019806","line":87,"range":{"start_line":87,"start_character":0,"end_line":87,"end_character":68},"in_reply_to":"ba0121b8_8d2ee3a2","updated":"2016-04-01 15:32:31.000000000","message":"Also, you added a new driver method, but you didn\u0027t update the abstract base class:\nhttps://github.com/openstack/keystone/blob/master/keystone/identity/core.py#L1257","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"d85e6c3cab20a6df2cf5719b7e5eeb3166ce8170","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def list_users(self, hints):"},{"line_number":85,"context_line":"        return self.user.get_all_filtered(hints)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":88,"context_line":"        # This function is not implemented as the LDAP backed"},{"line_number":89,"context_line":"        # support will be removed. LDAP backend will be treated as"},{"line_number":90,"context_line":"        # readonly."}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_17ff7435","line":87,"range":{"start_line":87,"start_character":0,"end_line":87,"end_character":68},"in_reply_to":"ba0121b8_8d2ee3a2","updated":"2016-04-04 07:45:24.000000000","message":"Untill the LDAP support is removed this menthod should be there or else it will throw error for LDAP backend.\n\nThe comment mentioned in this section will be updated in commit message.","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"d85e6c3cab20a6df2cf5719b7e5eeb3166ce8170","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def list_users(self, hints):"},{"line_number":85,"context_line":"        return self.user.get_all_filtered(hints)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":88,"context_line":"        # This function is not implemented as the LDAP backed"},{"line_number":89,"context_line":"        # support will be removed. LDAP backend will be treated as"},{"line_number":90,"context_line":"        # readonly."}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_d7a33c4e","line":87,"range":{"start_line":87,"start_character":0,"end_line":87,"end_character":68},"in_reply_to":"ba0121b8_d3019806","updated":"2016-04-04 07:45:24.000000000","message":"Will add the same.","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fd179ff5bf24d2bc5701c6aebe30db2c4c93eca6","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        return self.user.get_all_filtered(hints)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":88,"context_line":"        # This function is not implemented as the LDAP backed"},{"line_number":89,"context_line":"        # support will be removed. LDAP backend will be treated as"},{"line_number":90,"context_line":"        # readonly."},{"line_number":91,"context_line":"        pass"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def get_user_by_name(self, user_name, domain_id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_5df90b4d","line":90,"range":{"start_line":88,"start_character":0,"end_line":90,"end_character":19},"updated":"2016-04-04 08:45:44.000000000","message":"This is the wrong comment, however. We are not going to remove LDAP support any time soon. We are going to remove the ability to write to the LDAP backend soon (since most installations talk to their corporate LDAP stores in RO mode).","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"6b83b7188734920b54e775f859dcfe5578299240","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        return self.user.get_all_filtered(hints)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":88,"context_line":"        # This function is not implemented as the LDAP backed"},{"line_number":89,"context_line":"        # support will be removed. LDAP backend will be treated as"},{"line_number":90,"context_line":"        # readonly."},{"line_number":91,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_cb562d05","line":88,"range":{"start_line":88,"start_character":55,"end_line":88,"end_character":61},"updated":"2016-06-08 13:12:47.000000000","message":"backend","commit_id":"ca1cc72fdd80ffa00beb462d9b613088f8bb37ec"}],"keystone/identity/backends/sql.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"80d63b3b4a130f56e1ae555940e71498c1bc5d83","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            query \u003d session.query(User)"},{"line_number":235,"context_line":"            query \u003d query.filter(sqlalchemy.and_("},{"line_number":236,"context_line":"                                 User.default_project_id \u003d\u003d project_id))"},{"line_number":237,"context_line":"            user_refs \u003d sql.filter_limit_query(User, query, hints)"},{"line_number":238,"context_line":"            return [identity.filter_user(x.to_dict()) for x in user_refs]"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _get_user(self, session, user_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_2e510a0f","line":237,"updated":"2016-03-30 14:19:36.000000000","message":"hints is always just an empty Hints object. Is passing hints required for filter_limit_query()?","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"c156e7c4a0ecfe24bb6175bbdbbbe82ed0d1d79f","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            query \u003d session.query(User)"},{"line_number":235,"context_line":"            query \u003d query.filter(sqlalchemy.and_("},{"line_number":236,"context_line":"                                 User.default_project_id \u003d\u003d project_id))"},{"line_number":237,"context_line":"            user_refs \u003d sql.filter_limit_query(User, query, hints)"},{"line_number":238,"context_line":"            return [identity.filter_user(x.to_dict()) for x in user_refs]"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _get_user(self, session, user_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_a282edc5","line":237,"in_reply_to":"ba0121b8_2e510a0f","updated":"2016-04-01 04:53:17.000000000","message":"hint: this is an object of \"keystone.common.driver_hints.Hints\"\n\nThe method expects this parameter to be passed. If we do not pass this parameter then the following error may occur.\n\"filter_limit_query() takes exactly 3 arguments (2 given) (HTTP 400) (Request-ID: req-85d5c8be-d38d-4e89-b2de-95873131b30e)\"\n\nFor handling this, changes should be done in sqlalchemy.\nBut this method is used in multiple places in keystone.\nAccording to my understanding that can be a bigger impact.\nIt is safe to keep it as it is.\nPlease suggest.","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9f179a738793ca71dbb55ec6168524b5e8c24a9","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            user_refs \u003d sql.filter_limit_query(User, query, hints)"},{"line_number":230,"context_line":"            return [base.filter_user(x.to_dict()) for x in user_refs]"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":233,"context_line":"        with sql.session_for_read() as session:"},{"line_number":234,"context_line":"            query \u003d session.query(User)"},{"line_number":235,"context_line":"            query \u003d query.filter(sqlalchemy.and_("}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_ae69c2c0","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":42},"updated":"2016-04-18 12:46:38.000000000","message":"You need to add a method signature to the V9 driver in backends/base.py for this....","commit_id":"bb386ed99df69c43c9922e9b705e8935ca1671de"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"a2810a172c011ed5b32779bc7449769b2495a156","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            user_refs \u003d sql.filter_limit_query(User, query, hints)"},{"line_number":230,"context_line":"            return [base.filter_user(x.to_dict()) for x in user_refs]"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":233,"context_line":"        with sql.session_for_read() as session:"},{"line_number":234,"context_line":"            query \u003d session.query(User)"},{"line_number":235,"context_line":"            query \u003d query.filter(sqlalchemy.and_("}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_303b4c3a","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":42},"in_reply_to":"1a122d0e_ae69c2c0","updated":"2016-04-18 13:41:40.000000000","message":"added.","commit_id":"bb386ed99df69c43c9922e9b705e8935ca1671de"}],"keystone/identity/core.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7b0d975fdc914402c4d3e6ee12f1ab62010c6b6a","unresolved":false,"context_lines":[{"line_number":535,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":536,"context_line":"                                     payload):"},{"line_number":537,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":538,"context_line":"        project_user_ids \u003d ("},{"line_number":539,"context_line":"            self.assignment_api.list_user_ids_for_project(project_id))"},{"line_number":540,"context_line":"        # set default project to None if project has been removed"},{"line_number":541,"context_line":"        for user_id in project_user_ids:"},{"line_number":542,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_674dbc3d","line":539,"range":{"start_line":538,"start_character":8,"end_line":539,"end_character":70},"updated":"2016-03-03 11:57:07.000000000","message":"I\u0027m not sure this is guaranteed to catch all of the cases.  What if all the roles were deleted for a user on a project, but the project was still listed as the default project for the user?\n\nI would suggest a more robust solution is simply to each though the user records for one that reference the project in the default project id attribute. The only issue with this is that it might be expensive -if we are concerned about that, then may need to provide a dedicated driver method to do it.","commit_id":"a8a16a4753c57c33dd0d0b4a5b37879c692225f0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"80d63b3b4a130f56e1ae555940e71498c1bc5d83","unresolved":false,"context_lines":[{"line_number":544,"context_line":"                                     payload):"},{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":547,"context_line":"        user_detailed_list \u003d ("},{"line_number":548,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":549,"context_line":"        if user_detailed_list is not None:"},{"line_number":550,"context_line":"            project_user_ids \u003d [x.get(\u0027id\u0027) for x in user_detailed_list]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_6b02d470","line":547,"updated":"2016-03-30 14:19:36.000000000","message":"Why not just use user_list?","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"c156e7c4a0ecfe24bb6175bbdbbbe82ed0d1d79f","unresolved":false,"context_lines":[{"line_number":544,"context_line":"                                     payload):"},{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":547,"context_line":"        user_detailed_list \u003d ("},{"line_number":548,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":549,"context_line":"        if user_detailed_list is not None:"},{"line_number":550,"context_line":"            project_user_ids \u003d [x.get(\u0027id\u0027) for x in user_detailed_list]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_7d2236a4","line":547,"in_reply_to":"ba0121b8_6b02d470","updated":"2016-04-01 04:53:17.000000000","message":"Will change the variable name.","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"80d63b3b4a130f56e1ae555940e71498c1bc5d83","unresolved":false,"context_lines":[{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":547,"context_line":"        user_detailed_list \u003d ("},{"line_number":548,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":549,"context_line":"        if user_detailed_list is not None:"},{"line_number":550,"context_line":"            project_user_ids \u003d [x.get(\u0027id\u0027) for x in user_detailed_list]"},{"line_number":551,"context_line":"            # set default project to None if project has been removed"},{"line_number":552,"context_line":"            for user_id in project_user_ids:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_0b4b58ca","line":549,"updated":"2016-03-30 14:19:36.000000000","message":"Could this be simplified to: \n\n    if user_list:\n        ...","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"80d63b3b4a130f56e1ae555940e71498c1bc5d83","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        user_detailed_list \u003d ("},{"line_number":548,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":549,"context_line":"        if user_detailed_list is not None:"},{"line_number":550,"context_line":"            project_user_ids \u003d [x.get(\u0027id\u0027) for x in user_detailed_list]"},{"line_number":551,"context_line":"            # set default project to None if project has been removed"},{"line_number":552,"context_line":"            for user_id in project_user_ids:"},{"line_number":553,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_eb1c24c3","line":550,"updated":"2016-03-30 14:19:36.000000000","message":"Do we need to make a second list for user IDs if we already have all the information we need in user_detailed_list? \n\n    if user_list:\n        for user_ref in user_list:\n            try: \n                self.update_user(user[\u0027id\u0027], {\u0027default_project_id\u0027: None})\n            except:\n                # logging\n\nWe might just be able to get away with: \n\n    for user_ref in user_list:\n        try: \n            self.update_user(user[\u0027id\u0027], {\u0027default_project_id\u0027: None})\n        except:\n            # logging","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"c156e7c4a0ecfe24bb6175bbdbbbe82ed0d1d79f","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        user_detailed_list \u003d ("},{"line_number":548,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":549,"context_line":"        if user_detailed_list is not None:"},{"line_number":550,"context_line":"            project_user_ids \u003d [x.get(\u0027id\u0027) for x in user_detailed_list]"},{"line_number":551,"context_line":"            # set default project to None if project has been removed"},{"line_number":552,"context_line":"            for user_id in project_user_ids:"},{"line_number":553,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_bd384ed4","line":550,"in_reply_to":"ba0121b8_eb1c24c3","updated":"2016-04-01 04:53:17.000000000","message":"Done according to the first suggestion.","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a356d2e0742022bb22e2a2c6a1be3baa02938ab1","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                           \u0027cleanup.\u0027),"},{"line_number":541,"context_line":"                          {\u0027userid\u0027: user[\u0027id\u0027], \u0027domainid\u0027: domain_id})"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":544,"context_line":"                                     payload):"},{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba0121b8_78718b0b","line":543,"range":{"start_line":543,"start_character":8,"end_line":543,"end_character":36},"updated":"2016-04-01 15:27:21.000000000","message":"This seems to be the wrong place for this functionality.  Wouldn\u0027t it be better as part of the project delete:\nhttps://github.com/openstack/keystone/blob/master/keystone/resource/core.py#L480\n\nAnd you could run a migration script to first update any default_project_id to None where the project no longer exists.\n\nAlso, add a foreign key constraint from the user table to the project table to prevent from the database.","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fd179ff5bf24d2bc5701c6aebe30db2c4c93eca6","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                           \u0027cleanup.\u0027),"},{"line_number":541,"context_line":"                          {\u0027userid\u0027: user[\u0027id\u0027], \u0027domainid\u0027: domain_id})"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":544,"context_line":"                                     payload):"},{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_dd5ebb75","line":543,"range":{"start_line":543,"start_character":8,"end_line":543,"end_character":36},"in_reply_to":"9a061dce_973544f9","updated":"2016-04-04 08:45:44.000000000","message":"So doing this through event callbacks stops there being too tighter an integration between the identity and resource components.  Also, in regard to have a foreign key, that is not appropriate since the identity (i.e. user/group) could be in a different database to the project table...or even using a different backend technology (e.g. LDAP)","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"ba2a8a6af78e3a712a6b9b051b3fcbe35512189d","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                           \u0027cleanup.\u0027),"},{"line_number":541,"context_line":"                          {\u0027userid\u0027: user[\u0027id\u0027], \u0027domainid\u0027: domain_id})"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":544,"context_line":"                                     payload):"},{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_9574f3cf","line":543,"range":{"start_line":543,"start_character":8,"end_line":543,"end_character":36},"in_reply_to":"9a061dce_973544f9","updated":"2016-04-04 21:19:26.000000000","message":"Yeah, I understand you are doing this through events, I just think it\u0027s more direct to do this clean up when the project is deleted (_post_delete_cleanup_project).  The same way the project assignments get deleted.","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"cdde1379a2cb7e4a2e0e636896175721af4afed3","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                           \u0027cleanup.\u0027),"},{"line_number":541,"context_line":"                          {\u0027userid\u0027: user[\u0027id\u0027], \u0027domainid\u0027: domain_id})"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":544,"context_line":"                                     payload):"},{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_553a5b37","line":543,"range":{"start_line":543,"start_character":8,"end_line":543,"end_character":36},"in_reply_to":"9a061dce_dd5ebb75","updated":"2016-04-04 21:11:23.000000000","message":"The foreign key relationship would ensure that if a default_project_id did exist in the user table, that the id existed in the project table.  This wouldn\u0027t matter if the identity was in LDAP.","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"d85e6c3cab20a6df2cf5719b7e5eeb3166ce8170","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                           \u0027cleanup.\u0027),"},{"line_number":541,"context_line":"                          {\u0027userid\u0027: user[\u0027id\u0027], \u0027domainid\u0027: domain_id})"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":544,"context_line":"                                     payload):"},{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_973544f9","line":543,"range":{"start_line":543,"start_character":8,"end_line":543,"end_character":36},"in_reply_to":"ba0121b8_78718b0b","updated":"2016-04-04 07:45:24.000000000","message":"The section you have mentioned in the link, this function is called from that block itself. \nIt is done through event notification. Check \"event_callbacks\"\nIt is the similar implementation done in delete_domain. This functionality should be in Identity itself, where this method will be called indirectly on the event of delete_project.\nPlease see comment of henry-nash on Feb 11 12:39 PM (Patch Set 3: Code-Review-1)","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fd179ff5bf24d2bc5701c6aebe30db2c4c93eca6","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":547,"context_line":"        user_list \u003d ("},{"line_number":548,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":549,"context_line":"        if user_list:"},{"line_number":550,"context_line":"            # set default project to None if project has been removed"},{"line_number":551,"context_line":"            for user_ref in user_list:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_7d816f8f","line":548,"range":{"start_line":548,"start_character":12,"end_line":548,"end_character":78},"updated":"2016-04-04 08:45:44.000000000","message":"So ++ for making this efficient. Unfortunately, since you are changing the driver interface you need to make a new version of the driver (i.e. V10), and add this new method to the V10 interface only. If you  need help on this, let me know.","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bb36c796998e65461c67635dd10665a15bc29fdb","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":547,"context_line":"        user_list \u003d ("},{"line_number":548,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":549,"context_line":"        if user_list:"},{"line_number":550,"context_line":"            # set default project to None if project has been removed"},{"line_number":551,"context_line":"            for user_ref in user_list:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a18252c_ee8615da","line":548,"range":{"start_line":548,"start_character":12,"end_line":548,"end_character":78},"in_reply_to":"7a1b2928_ba100d50","updated":"2016-04-13 10:03:37.000000000","message":"Sure...will post it in the next day or so.","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"9a373c7cafebe892bba783fc8830445ea27b264d","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":547,"context_line":"        user_list \u003d ("},{"line_number":548,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":549,"context_line":"        if user_list:"},{"line_number":550,"context_line":"            # set default project to None if project has been removed"},{"line_number":551,"context_line":"            for user_ref in user_list:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_ea176a52","line":548,"range":{"start_line":548,"start_character":12,"end_line":548,"end_character":78},"in_reply_to":"9a061dce_7d816f8f","updated":"2016-04-04 12:34:43.000000000","message":"Hi Henry,\n\nThanks for the comment. \nDo you mean to say a separate driver like \"shadow_backends (V9)\" or \"mapping_backends (V8)\"? \nI am trying it from my side. If I need any support will let you know surely.","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"e7ac3ad3593aaf4d016671b66a78b8ca94888990","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":547,"context_line":"        user_list \u003d ("},{"line_number":548,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":549,"context_line":"        if user_list:"},{"line_number":550,"context_line":"            # set default project to None if project has been removed"},{"line_number":551,"context_line":"            for user_ref in user_list:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a1b2928_ba100d50","line":548,"range":{"start_line":548,"start_character":12,"end_line":548,"end_character":78},"in_reply_to":"9a061dce_b7cf5b7e","updated":"2016-04-11 13:41:18.000000000","message":"Hi Henry,\n\nIt would be really helpful if you can create a patch for this. I was trying to create the new driver but facing terrible horrible errors :). It will also be a good learning for me as I am very new to Keystone.\nThanks for you continuous support.","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"253beb22846189f8d671f0ee414aefaea45b5109","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":546,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":547,"context_line":"        user_list \u003d ("},{"line_number":548,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":549,"context_line":"        if user_list:"},{"line_number":550,"context_line":"            # set default project to None if project has been removed"},{"line_number":551,"context_line":"            for user_ref in user_list:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_b7cf5b7e","line":548,"range":{"start_line":548,"start_character":12,"end_line":548,"end_character":78},"in_reply_to":"9a061dce_ea176a52","updated":"2016-04-11 13:07:15.000000000","message":"Yes, you need to create identity V9 backend.  You also need to save off a version of the current backend into the legacy backends and arrange for this to be tested as part of the tox legacy drivers tests. This is quite a lot of work, albeit mechanical. I have done it before, so would be happy to create a patch for you that you could base your change on - let me know if you want that.","commit_id":"61145e57f10cff1a1ec6ac391015a0e313d60e2f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"6b83b7188734920b54e775f859dcfe5578299240","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                    self.update_user(user_ref[\u0027id\u0027],"},{"line_number":541,"context_line":"                                     {\u0027default_project_id\u0027: None})"},{"line_number":542,"context_line":"                except exception.UserNotFound:"},{"line_number":543,"context_line":"                    LOG.debug((\u0027User %(user)s not found when deleting project \u0027"},{"line_number":544,"context_line":"                               \u0027contents for %(project)s, continuing with \u0027"},{"line_number":545,"context_line":"                               \u0027cleanup.\u0027),"},{"line_number":546,"context_line":"                              {\u0027user\u0027: user_ref[\u0027id\u0027], \u0027project\u0027: project_id})"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    # Domain ID normalization methods"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_abf5a1ed","line":545,"range":{"start_line":543,"start_character":61,"end_line":545,"end_character":40},"updated":"2016-06-08 13:12:47.000000000","message":"you\u0027re not deleting the project, you\u0027re updating its default_project_id property, please update this message accordingly","commit_id":"ca1cc72fdd80ffa00beb462d9b613088f8bb37ec"}],"keystone/resource/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13914f0a12ee4f5b892615d02749bc4005b60e48","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        for user_id in project_user_ids:"},{"line_number":364,"context_line":"            try:"},{"line_number":365,"context_line":"                payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":366,"context_line":"                self.assignment_api.remove_project_from_user(payload)"},{"line_number":367,"context_line":"            except exception.NotFound:"},{"line_number":368,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"},{"line_number":369,"context_line":"                          \u0027%(user)s.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_e2eb1677","line":366,"range":{"start_line":366,"start_character":61,"end_line":366,"end_character":68},"updated":"2016-02-09 07:18:08.000000000","message":"might just be easier to pass in the args you need","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"0f412d9d76e885f861929d4a32d76dcdb79dbe6d","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        for user_id in project_user_ids:"},{"line_number":364,"context_line":"            try:"},{"line_number":365,"context_line":"                payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":366,"context_line":"                self.assignment_api.remove_project_from_user(payload)"},{"line_number":367,"context_line":"            except exception.NotFound:"},{"line_number":368,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"},{"line_number":369,"context_line":"                          \u0027%(user)s.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_c2237104","line":366,"range":{"start_line":366,"start_character":61,"end_line":366,"end_character":68},"in_reply_to":"5a5ae5dd_e2eb1677","updated":"2016-02-10 08:19:36.000000000","message":"Done\nUsed explicit variables.","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"13914f0a12ee4f5b892615d02749bc4005b60e48","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            try:"},{"line_number":365,"context_line":"                payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":366,"context_line":"                self.assignment_api.remove_project_from_user(payload)"},{"line_number":367,"context_line":"            except exception.NotFound:"},{"line_number":368,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"},{"line_number":369,"context_line":"                          \u0027%(user)s.\u0027)"},{"line_number":370,"context_line":"                LOG.warning(msg, {\u0027project\u0027: project_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_2d2a7f7f","line":367,"range":{"start_line":367,"start_character":12,"end_line":367,"end_character":38},"updated":"2016-02-09 07:18:08.000000000","message":"what\u0027s the point of the try/except? we know the project being deleted, and project_user_ids should only return valid users","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"0f412d9d76e885f861929d4a32d76dcdb79dbe6d","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            try:"},{"line_number":365,"context_line":"                payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":366,"context_line":"                self.assignment_api.remove_project_from_user(payload)"},{"line_number":367,"context_line":"            except exception.NotFound:"},{"line_number":368,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"},{"line_number":369,"context_line":"                          \u0027%(user)s.\u0027)"},{"line_number":370,"context_line":"                LOG.warning(msg, {\u0027project\u0027: project_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_2263651c","line":367,"range":{"start_line":367,"start_character":12,"end_line":367,"end_character":38},"in_reply_to":"5a5ae5dd_2d2a7f7f","updated":"2016-02-10 08:19:36.000000000","message":"try is implemented here as for few cases in tox testing, it\u0027s exception handling was not done for test_backend_ldap.\n\"Could not find user:\" error occurs. added comment in code for the same.","commit_id":"90bd75825d28f7aaea0483ef8a28fec66f7cfcbe"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6f7e7baef6e4621cee8a79576259eeb5fc9e4512","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            self.assignment_api.list_user_ids_for_project(project_id))"},{"line_number":363,"context_line":"        for user_id in project_user_ids:"},{"line_number":364,"context_line":"            try:"},{"line_number":365,"context_line":"                payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":366,"context_line":"                self.assignment_api.remove_project_from_user(payload)"},{"line_number":367,"context_line":"            except exception.NotFound:"},{"line_number":368,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_68cb721f","line":365,"updated":"2016-02-09 14:31:07.000000000","message":"I don\u0027t think you need to build a special payload just for this. I think passing the user_id and project_id to remove_project_from_user() is fine.","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"11c808c952d04688ae51b9c025398bdc72d62563","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            self.assignment_api.list_user_ids_for_project(project_id))"},{"line_number":363,"context_line":"        for user_id in project_user_ids:"},{"line_number":364,"context_line":"            try:"},{"line_number":365,"context_line":"                payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":366,"context_line":"                self.assignment_api.remove_project_from_user(payload)"},{"line_number":367,"context_line":"            except exception.NotFound:"},{"line_number":368,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_42bb01c5","line":365,"in_reply_to":"3a57f1b5_f1aafd84","updated":"2016-02-10 08:20:52.000000000","message":"Moved the method to Identity.","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"11c808c952d04688ae51b9c025398bdc72d62563","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            self.assignment_api.list_user_ids_for_project(project_id))"},{"line_number":363,"context_line":"        for user_id in project_user_ids:"},{"line_number":364,"context_line":"            try:"},{"line_number":365,"context_line":"                payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":366,"context_line":"                self.assignment_api.remove_project_from_user(payload)"},{"line_number":367,"context_line":"            except exception.NotFound:"},{"line_number":368,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_a2a3d59d","line":365,"in_reply_to":"5a5ae5dd_68cb721f","updated":"2016-02-10 08:20:52.000000000","message":"Yes. I have not used payload dictionary any more. I have used explicit variables.\nself.identity_api.set_default_project_to_none(user_id)","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"5fea82479344210c77e174c02f6936f38196bdc7","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            self.assignment_api.list_user_ids_for_project(project_id))"},{"line_number":363,"context_line":"        for user_id in project_user_ids:"},{"line_number":364,"context_line":"            try:"},{"line_number":365,"context_line":"                payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":366,"context_line":"                self.assignment_api.remove_project_from_user(payload)"},{"line_number":367,"context_line":"            except exception.NotFound:"},{"line_number":368,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_f1aafd84","line":365,"in_reply_to":"5a5ae5dd_68cb721f","updated":"2016-02-10 06:03:00.000000000","message":"as written, I agree with you - however, if we move this to identity, then we should probably use the delete project event to trigger it (in the same way we currently use the delete domain event)","commit_id":"7254cecaf28f4fe4f1223fa740ff963b099c77ae"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"feacbd979b9fcc991bc6100ea3634a658b003533","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            self.assignment_api.list_user_ids_for_project(project_id))"},{"line_number":363,"context_line":"        for user_id in project_user_ids:"},{"line_number":364,"context_line":"            try:"},{"line_number":365,"context_line":"                # This function will remove the project details from"},{"line_number":366,"context_line":"                # user information. try is implemented for cases"},{"line_number":367,"context_line":"                # where the user is not found. Mainly for tox testing"},{"line_number":368,"context_line":"                # of LDAP backend tests."}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_0883e0cd","line":365,"range":{"start_line":365,"start_character":48,"end_line":365,"end_character":63},"updated":"2016-02-10 12:56:27.000000000","message":"default project from ...","commit_id":"6605ef95cb3d5541a652eaedd2d40e1cd3eac4f2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"feacbd979b9fcc991bc6100ea3634a658b003533","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            try:"},{"line_number":365,"context_line":"                # This function will remove the project details from"},{"line_number":366,"context_line":"                # user information. try is implemented for cases"},{"line_number":367,"context_line":"                # where the user is not found. Mainly for tox testing"},{"line_number":368,"context_line":"                # of LDAP backend tests."},{"line_number":369,"context_line":"                self.identity_api.set_default_project_to_none(user_id)"},{"line_number":370,"context_line":"            except exception.NotFound:"},{"line_number":371,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_a3fc2d3f","line":368,"range":{"start_line":367,"start_character":47,"end_line":368,"end_character":40},"updated":"2016-02-10 12:56:27.000000000","message":"we are not coding to make it pass the existed testcases but coding as this is really needed.","commit_id":"6605ef95cb3d5541a652eaedd2d40e1cd3eac4f2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"16d6172de834b1e7ffab2bfe0b97f741a88347bc","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                # of LDAP backend tests."},{"line_number":369,"context_line":"                self.identity_api.set_default_project_to_none(user_id)"},{"line_number":370,"context_line":"            except exception.NotFound:"},{"line_number":371,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"},{"line_number":372,"context_line":"                          \u0027%(user)s.\u0027)"},{"line_number":373,"context_line":"                LOG.warning(msg, {\u0027project\u0027: project_id,"},{"line_number":374,"context_line":"                                  \u0027user\u0027: user_id})"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_222b65ed","line":371,"range":{"start_line":371,"start_character":44,"end_line":371,"end_character":48},"updated":"2016-02-10 08:10:30.000000000","message":"project?","commit_id":"6605ef95cb3d5541a652eaedd2d40e1cd3eac4f2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"16d6172de834b1e7ffab2bfe0b97f741a88347bc","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                # of LDAP backend tests."},{"line_number":369,"context_line":"                self.identity_api.set_default_project_to_none(user_id)"},{"line_number":370,"context_line":"            except exception.NotFound:"},{"line_number":371,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"},{"line_number":372,"context_line":"                          \u0027%(user)s.\u0027)"},{"line_number":373,"context_line":"                LOG.warning(msg, {\u0027project\u0027: project_id,"},{"line_number":374,"context_line":"                                  \u0027user\u0027: user_id})"},{"line_number":375,"context_line":"            payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_a2267514","line":372,"range":{"start_line":371,"start_character":26,"end_line":372,"end_character":37},"updated":"2016-02-10 08:10:30.000000000","message":"how about something more descriptive: \"Attempted to remove default_project %(project) from user %(user)s , but user could not be found.\"","commit_id":"6605ef95cb3d5541a652eaedd2d40e1cd3eac4f2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"feacbd979b9fcc991bc6100ea3634a658b003533","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                # of LDAP backend tests."},{"line_number":369,"context_line":"                self.identity_api.set_default_project_to_none(user_id)"},{"line_number":370,"context_line":"            except exception.NotFound:"},{"line_number":371,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"},{"line_number":372,"context_line":"                          \u0027%(user)s.\u0027)"},{"line_number":373,"context_line":"                LOG.warning(msg, {\u0027project\u0027: project_id,"},{"line_number":374,"context_line":"                                  \u0027user\u0027: user_id})"},{"line_number":375,"context_line":"            payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_c8ddc871","line":372,"range":{"start_line":371,"start_character":26,"end_line":372,"end_character":37},"in_reply_to":"3a57f1b5_a2267514","updated":"2016-02-10 12:56:27.000000000","message":"++","commit_id":"6605ef95cb3d5541a652eaedd2d40e1cd3eac4f2"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"80594227305d9a7bc06514dbeeeb76ab8dfa5702","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        project_user_ids \u003d ("},{"line_number":362,"context_line":"            self.assignment_api.list_user_ids_for_project(project_id))"},{"line_number":363,"context_line":"        for user_id in project_user_ids:"},{"line_number":364,"context_line":"            try:"},{"line_number":365,"context_line":"                # This function will remove the project details from"},{"line_number":366,"context_line":"                # user information. try is implemented for cases"},{"line_number":367,"context_line":"                # where the user is not found. Mainly for tox testing"},{"line_number":368,"context_line":"                # of LDAP backend tests."},{"line_number":369,"context_line":"                self.identity_api.set_default_project_to_none(user_id)"},{"line_number":370,"context_line":"            except exception.NotFound:"},{"line_number":371,"context_line":"                msg \u003d _LW(\u0027Unable to remove user %(project)s from \u0027"},{"line_number":372,"context_line":"                          \u0027%(user)s.\u0027)"},{"line_number":373,"context_line":"                LOG.warning(msg, {\u0027project\u0027: project_id,"},{"line_number":374,"context_line":"                                  \u0027user\u0027: user_id})"},{"line_number":375,"context_line":"            payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":376,"context_line":"            self._emit_invalidate_user_project_tokens_notification(payload)"},{"line_number":377,"context_line":"        ret \u003d self.driver.delete_project(project_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_8a47921c","line":374,"range":{"start_line":364,"start_character":12,"end_line":374,"end_character":51},"updated":"2016-02-11 07:09:30.000000000","message":"So I think (an amended version of) this entire logic should be in identity, in response to a project deletion event. Several reasons:\n1) Not all users with a default project have a role on that project (i.e. the member role could have been deleted)\n2) We try not to have cross calls into identity like this\n3) We already handle domain deletion cleanups via event processing (see identity)","commit_id":"6605ef95cb3d5541a652eaedd2d40e1cd3eac4f2"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7b0d975fdc914402c4d3e6ee12f1ab62010c6b6a","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        for user_id in project_user_ids:"},{"line_number":489,"context_line":"            payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":490,"context_line":"            self._emit_invalidate_user_project_tokens_notification(payload)"},{"line_number":491,"context_line":"        notifications.Audit.deleted(self._PROJECT, project_id, initiator)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def _post_delete_cleanup_project(self, project_id, project,"},{"line_number":494,"context_line":"                                     initiator\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_c795b033","line":491,"range":{"start_line":491,"start_character":8,"end_line":491,"end_character":73},"updated":"2016-03-03 11:57:07.000000000","message":"see my comment in identity/core.py - if we take the approach I suggest, then you won\u0027t need to move this...","commit_id":"a8a16a4753c57c33dd0d0b4a5b37879c692225f0"}],"keystone/tests/unit/resource/test_backends.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"80d63b3b4a130f56e1ae555940e71498c1bc5d83","unresolved":false,"context_lines":[{"line_number":1598,"context_line":"        self.resource_api.create_project(project[\u0027id\u0027], project)"},{"line_number":1599,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":1600,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1601,"context_line":"        if \u0027default_project_id\u0027 in user.keys():"},{"line_number":1602,"context_line":"            self.assertIsNotNone(user[\u0027default_project_id\u0027])"},{"line_number":1603,"context_line":""},{"line_number":1604,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_8eb136e4","line":1601,"updated":"2016-03-30 14:19:36.000000000","message":"This key should always be returned, right?","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"c156e7c4a0ecfe24bb6175bbdbbbe82ed0d1d79f","unresolved":false,"context_lines":[{"line_number":1598,"context_line":"        self.resource_api.create_project(project[\u0027id\u0027], project)"},{"line_number":1599,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":1600,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1601,"context_line":"        if \u0027default_project_id\u0027 in user.keys():"},{"line_number":1602,"context_line":"            self.assertIsNotNone(user[\u0027default_project_id\u0027])"},{"line_number":1603,"context_line":""},{"line_number":1604,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_9da46a08","line":1601,"in_reply_to":"ba0121b8_8eb136e4","updated":"2016-04-01 04:53:17.000000000","message":"For this test, the key will not be returned for many cases of LDAP. We can remove this if condition once the LDAP support is completely removed.","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"80d63b3b4a130f56e1ae555940e71498c1bc5d83","unresolved":false,"context_lines":[{"line_number":1603,"context_line":""},{"line_number":1604,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"},{"line_number":1605,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1606,"context_line":"        if \u0027default_project_id\u0027 in user.keys():"},{"line_number":1607,"context_line":"            self.assertIsNone(user[\u0027default_project_id\u0027])"},{"line_number":1608,"context_line":""},{"line_number":1609,"context_line":"    def test_delete_project_with_roles_clears_default_project_id(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_6e394241","line":1606,"updated":"2016-03-30 14:19:36.000000000","message":"Same comment here","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"80d63b3b4a130f56e1ae555940e71498c1bc5d83","unresolved":false,"context_lines":[{"line_number":1621,"context_line":""},{"line_number":1622,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"},{"line_number":1623,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1624,"context_line":"        if \u0027default_project_id\u0027 in user.keys():"},{"line_number":1625,"context_line":"            self.assertIsNone(user[\u0027default_project_id\u0027])"},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_4e7a7ef2","line":1624,"updated":"2016-03-30 14:19:36.000000000","message":"Same comment here","commit_id":"ad2baa2c60e1716333c3c326dd7f878575cee385"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c9f179a738793ca71dbb55ec6168524b5e8c24a9","unresolved":false,"context_lines":[{"line_number":1590,"context_line":"        project_ref \u003d self.resource_api.get_project(project[\u0027id\u0027])"},{"line_number":1591,"context_line":"        self.assertDictEqual(updated_project_ref, project_ref)"},{"line_number":1592,"context_line":""},{"line_number":1593,"context_line":"    def test_delete_project_clears_default_project_id(self):"},{"line_number":1594,"context_line":"        project \u003d unit.new_project_ref("},{"line_number":1595,"context_line":"            domain_id\u003dCONF.identity.default_domain_id)"},{"line_number":1596,"context_line":"        user \u003d unit.new_user_ref(domain_id\u003dCONF.identity.default_domain_id,"},{"line_number":1597,"context_line":"                                 project_id\u003dproject[\u0027id\u0027])"},{"line_number":1598,"context_line":"        self.resource_api.create_project(project[\u0027id\u0027], project)"},{"line_number":1599,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":1600,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1601,"context_line":"        if \u0027default_project_id\u0027 in user.keys():"},{"line_number":1602,"context_line":"            self.assertIsNotNone(user[\u0027default_project_id\u0027])"},{"line_number":1603,"context_line":""},{"line_number":1604,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"},{"line_number":1605,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1606,"context_line":"        if \u0027default_project_id\u0027 in user.keys():"},{"line_number":1607,"context_line":"            self.assertIsNone(user[\u0027default_project_id\u0027])"},{"line_number":1608,"context_line":""},{"line_number":1609,"context_line":"    def test_delete_project_with_roles_clears_default_project_id(self):"},{"line_number":1610,"context_line":"        project \u003d unit.new_project_ref("},{"line_number":1611,"context_line":"            domain_id\u003dCONF.identity.default_domain_id)"},{"line_number":1612,"context_line":"        user \u003d unit.new_user_ref(domain_id\u003dCONF.identity.default_domain_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_ae97028f","line":1609,"range":{"start_line":1593,"start_character":0,"end_line":1609,"end_character":71},"updated":"2016-04-18 12:46:38.000000000","message":"one https://review.openstack.org/#/c/288403/4  merges (and you we rebase the patches), then this code will no longer be part of this patch...","commit_id":"bb386ed99df69c43c9922e9b705e8935ca1671de"},{"author":{"_account_id":19456,"name":"Kalaswan Datta","email":"kalaswan.datta@nectechnologies.in","username":"Kalaswan"},"change_message_id":"a2810a172c011ed5b32779bc7449769b2495a156","unresolved":false,"context_lines":[{"line_number":1590,"context_line":"        project_ref \u003d self.resource_api.get_project(project[\u0027id\u0027])"},{"line_number":1591,"context_line":"        self.assertDictEqual(updated_project_ref, project_ref)"},{"line_number":1592,"context_line":""},{"line_number":1593,"context_line":"    def test_delete_project_clears_default_project_id(self):"},{"line_number":1594,"context_line":"        project \u003d unit.new_project_ref("},{"line_number":1595,"context_line":"            domain_id\u003dCONF.identity.default_domain_id)"},{"line_number":1596,"context_line":"        user \u003d unit.new_user_ref(domain_id\u003dCONF.identity.default_domain_id,"},{"line_number":1597,"context_line":"                                 project_id\u003dproject[\u0027id\u0027])"},{"line_number":1598,"context_line":"        self.resource_api.create_project(project[\u0027id\u0027], project)"},{"line_number":1599,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":1600,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1601,"context_line":"        if \u0027default_project_id\u0027 in user.keys():"},{"line_number":1602,"context_line":"            self.assertIsNotNone(user[\u0027default_project_id\u0027])"},{"line_number":1603,"context_line":""},{"line_number":1604,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"},{"line_number":1605,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1606,"context_line":"        if \u0027default_project_id\u0027 in user.keys():"},{"line_number":1607,"context_line":"            self.assertIsNone(user[\u0027default_project_id\u0027])"},{"line_number":1608,"context_line":""},{"line_number":1609,"context_line":"    def test_delete_project_with_roles_clears_default_project_id(self):"},{"line_number":1610,"context_line":"        project \u003d unit.new_project_ref("},{"line_number":1611,"context_line":"            domain_id\u003dCONF.identity.default_domain_id)"},{"line_number":1612,"context_line":"        user \u003d unit.new_user_ref(domain_id\u003dCONF.identity.default_domain_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_f0ea74ab","line":1609,"range":{"start_line":1593,"start_character":0,"end_line":1609,"end_character":71},"in_reply_to":"1a122d0e_ae97028f","updated":"2016-04-18 13:41:40.000000000","message":"Removed from this patch. and rebased from other patch","commit_id":"bb386ed99df69c43c9922e9b705e8935ca1671de"}],"keystone/tests/unit/test_backend_ldap.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b0a45813d5cffa5f2d11fe2c02daa5bd7cd22249","unresolved":false,"context_lines":[{"line_number":2662,"context_line":"                          self.resource_api.get_domain,"},{"line_number":2663,"context_line":"                          domain[\u0027id\u0027])"},{"line_number":2664,"context_line":""},{"line_number":2665,"context_line":"    def test_delete_project_with_user_added(self):"},{"line_number":2666,"context_line":"        domain \u003d unit.new_domain_ref()"},{"line_number":2667,"context_line":"        project \u003d unit.new_project_ref(domain_id\u003ddomain[\u0027id\u0027])"},{"line_number":2668,"context_line":"        user \u003d unit.new_user_ref(domain_id\u003ddomain[\u0027id\u0027], project_id\u003dproject[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_f44c999f","line":2665,"range":{"start_line":2665,"start_character":8,"end_line":2665,"end_character":43},"updated":"2016-03-04 11:36:31.000000000","message":"This doesn\u0027t really test the new fucntionality","commit_id":"a8a16a4753c57c33dd0d0b4a5b37879c692225f0"}]}
