)]}'
{"keystone/identity/backends/kvs.py":[{"author":{"_account_id":6,"name":"Joe Heck","email":"heckj@mac.com","username":"heckj"},"change_message_id":"dd79f9b3f272de2ddcddf4b41f0323b1349e7ee7","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                metaId1 \u003d key.split(\u0027-\u0027)[1]"},{"line_number":411,"context_line":"                metaId2 \u003d key.split(\u0027-\u0027)[2]"},{"line_number":412,"context_line":"                try:"},{"line_number":413,"context_line":"                    self.delete_grant(role_id, project_id\u003dmetaId1,"},{"line_number":414,"context_line":"                                      user_id\u003dmetaId2)"},{"line_number":415,"context_line":"                except exception.NotFound:"},{"line_number":416,"context_line":"                    pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BxOk%3D","line":413,"updated":"2013-02-19 17:00:56.000000000","message":"why the twice repeat, and why would you expect it to work the second time, when it didn\u0027t the first?","commit_id":"54dd872a67b3ac7c50ba5d66e146358a66a8b1ab"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2e99a054767288cc2c76ce19de3ba051999240ae","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                metaId1 \u003d key.split(\u0027-\u0027)[1]"},{"line_number":411,"context_line":"                metaId2 \u003d key.split(\u0027-\u0027)[2]"},{"line_number":412,"context_line":"                try:"},{"line_number":413,"context_line":"                    self.delete_grant(role_id, project_id\u003dmetaId1,"},{"line_number":414,"context_line":"                                      user_id\u003dmetaId2)"},{"line_number":415,"context_line":"                except exception.NotFound:"},{"line_number":416,"context_line":"                    pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BxIQ%3D","line":413,"in_reply_to":"AAAAM3%2F%2BxOk%3D","updated":"2013-02-19 17:24:52.000000000","message":"sorry, which part is repeated? the delete_grant() run through each possible grant combination: project-user, project-group, domain-user, domain-group. the code looks nearly identical to me so i may be completely missing something","commit_id":"54dd872a67b3ac7c50ba5d66e146358a66a8b1ab"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8c7034cacb411ba10b3c7a4d138b1ddfce5572ee","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def delete_role(self, role_id):"},{"line_number":405,"context_line":"        try:"},{"line_number":406,"context_line":"            self.get_role(role_id)"},{"line_number":407,"context_line":"            metadata_keys \u003d filter(lambda x: x.startswith(\"metadata-\"),"},{"line_number":408,"context_line":"                                   self.db.keys())"},{"line_number":409,"context_line":"            for key in metadata_keys:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2Byk%3D","line":406,"updated":"2013-03-04 18:45:27.000000000","message":"this already raises RoleNotFound if not found. suggest remove it from try/except.\n\nThen remove try/except because all the NotFounds are ignored.","commit_id":"af357f6bfc46176686203392e479a820c931e16a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"850ad945230568273396ebc9be7819f14e13076e","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def delete_role(self, role_id):"},{"line_number":405,"context_line":"        try:"},{"line_number":406,"context_line":"            self.get_role(role_id)"},{"line_number":407,"context_line":"            metadata_keys \u003d filter(lambda x: x.startswith(\"metadata-\"),"},{"line_number":408,"context_line":"                                   self.db.keys())"},{"line_number":409,"context_line":"            for key in metadata_keys:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2BGs%3D","line":406,"in_reply_to":"AAAAN3%2F%2F%2Byk%3D","updated":"2013-03-05 00:39:19.000000000","message":"Done","commit_id":"af357f6bfc46176686203392e479a820c931e16a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8c7034cacb411ba10b3c7a4d138b1ddfce5572ee","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            metadata_keys \u003d filter(lambda x: x.startswith(\"metadata-\"),"},{"line_number":408,"context_line":"                                   self.db.keys())"},{"line_number":409,"context_line":"            for key in metadata_keys:"},{"line_number":410,"context_line":"                metaId1 \u003d key.split(\u0027-\u0027)[1]"},{"line_number":411,"context_line":"                metaId2 \u003d key.split(\u0027-\u0027)[2]"},{"line_number":412,"context_line":"                try:"},{"line_number":413,"context_line":"                    self.delete_grant(role_id, project_id\u003dmetaId1,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2FBQ%3D","line":410,"updated":"2013-03-04 18:45:27.000000000","message":"(nit) variables should use lowercase with _, change \"metaId1\" to \"meta_id_1\", same for metaId2.","commit_id":"af357f6bfc46176686203392e479a820c931e16a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"25024fe71ed5b27bc8bb8853193edf9168a93035","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            metadata_keys \u003d filter(lambda x: x.startswith(\"metadata-\"),"},{"line_number":408,"context_line":"                                   self.db.keys())"},{"line_number":409,"context_line":"            for key in metadata_keys:"},{"line_number":410,"context_line":"                metaId1 \u003d key.split(\u0027-\u0027)[1]"},{"line_number":411,"context_line":"                metaId2 \u003d key.split(\u0027-\u0027)[2]"},{"line_number":412,"context_line":"                try:"},{"line_number":413,"context_line":"                    self.delete_grant(role_id, project_id\u003dmetaId1,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2B0U%3D","line":410,"updated":"2013-03-04 18:37:02.000000000","message":"meta_id1","commit_id":"af357f6bfc46176686203392e479a820c931e16a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"850ad945230568273396ebc9be7819f14e13076e","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            metadata_keys \u003d filter(lambda x: x.startswith(\"metadata-\"),"},{"line_number":408,"context_line":"                                   self.db.keys())"},{"line_number":409,"context_line":"            for key in metadata_keys:"},{"line_number":410,"context_line":"                metaId1 \u003d key.split(\u0027-\u0027)[1]"},{"line_number":411,"context_line":"                metaId2 \u003d key.split(\u0027-\u0027)[2]"},{"line_number":412,"context_line":"                try:"},{"line_number":413,"context_line":"                    self.delete_grant(role_id, project_id\u003dmetaId1,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2BGo%3D","line":410,"in_reply_to":"AAAAN3%2F%2F%2B0U%3D","updated":"2013-03-05 00:39:19.000000000","message":"Done","commit_id":"af357f6bfc46176686203392e479a820c931e16a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"25024fe71ed5b27bc8bb8853193edf9168a93035","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                                   self.db.keys())"},{"line_number":409,"context_line":"            for key in metadata_keys:"},{"line_number":410,"context_line":"                metaId1 \u003d key.split(\u0027-\u0027)[1]"},{"line_number":411,"context_line":"                metaId2 \u003d key.split(\u0027-\u0027)[2]"},{"line_number":412,"context_line":"                try:"},{"line_number":413,"context_line":"                    self.delete_grant(role_id, project_id\u003dmetaId1,"},{"line_number":414,"context_line":"                                      user_id\u003dmetaId2)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2B0Q%3D","line":411,"updated":"2013-03-04 18:37:02.000000000","message":"meta_id2","commit_id":"af357f6bfc46176686203392e479a820c931e16a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"850ad945230568273396ebc9be7819f14e13076e","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                                   self.db.keys())"},{"line_number":409,"context_line":"            for key in metadata_keys:"},{"line_number":410,"context_line":"                metaId1 \u003d key.split(\u0027-\u0027)[1]"},{"line_number":411,"context_line":"                metaId2 \u003d key.split(\u0027-\u0027)[2]"},{"line_number":412,"context_line":"                try:"},{"line_number":413,"context_line":"                    self.delete_grant(role_id, project_id\u003dmetaId1,"},{"line_number":414,"context_line":"                                      user_id\u003dmetaId2)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2BGk%3D","line":411,"in_reply_to":"AAAAN3%2F%2F%2B0Q%3D","updated":"2013-03-05 00:39:19.000000000","message":"Done","commit_id":"af357f6bfc46176686203392e479a820c931e16a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4643d1b2904e429099f1990546553119be209299","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        self.db.delete(\u0027role-%s\u0027 % role_id)"},{"line_number":432,"context_line":"        role_list \u003d set(self.db.get(\u0027role_list\u0027, []))"},{"line_number":433,"context_line":"        role_list.remove(role_id)"},{"line_number":434,"context_line":"        self.db.set(\u0027role_list\u0027, list(role_list))"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    def create_grant(self, role_id, user_id\u003dNone, group_id\u003dNone,"},{"line_number":437,"context_line":"                     domain_id\u003dNone, project_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAN3%2F%2F%2BFA%3D","line":434,"updated":"2013-03-05 00:39:23.000000000","message":"this method looks good","commit_id":"e16742bdf2f1fa7386f2983b037a78fde4a576c3"}],"keystone/identity/backends/sql.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"95b9599ee91b11a24a010717522d65f7cec81bb6","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"            except exception.RoleNotFound:"},{"line_number":1027,"context_line":"                pass"},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"        with session.begin():"},{"line_number":1030,"context_line":"            if not session.query(Role).filter_by(id\u003drole_id).delete():"},{"line_number":1031,"context_line":"                raise exception.RoleNotFound(role_id\u003drole_id)"},{"line_number":1032,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bzls%3D","line":1029,"updated":"2013-02-18 21:37:42.000000000","message":"there\u0027s not really a need for one query to be wrapped in a transaction?","commit_id":"4712a081f51369f9b5cbe29310e877f3dd39d5f5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"271a02051946ee84f6db3945349bef397a75750c","unresolved":false,"context_lines":[{"line_number":951,"context_line":"            ref \u003d session.query(Role).filter_by(id\u003drole_id).one()"},{"line_number":952,"context_line":"        except sql.NotFound:"},{"line_number":953,"context_line":"            raise exception.RoleNotFound(role_id\u003drole_id)"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"        for metadata_ref in session.query(UserProjectGrant):"},{"line_number":956,"context_line":"            meta \u003d metadata_ref.to_dict()"},{"line_number":957,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BxkU%3D","line":954,"updated":"2013-02-19 15:26:45.000000000","message":"what happened to \"with session.begin()\", was that not correct?","commit_id":"54dd872a67b3ac7c50ba5d66e146358a66a8b1ab"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a22383e9732e71399ce0e3a8ba3503b61687660d","unresolved":false,"context_lines":[{"line_number":951,"context_line":"            ref \u003d session.query(Role).filter_by(id\u003drole_id).one()"},{"line_number":952,"context_line":"        except sql.NotFound:"},{"line_number":953,"context_line":"            raise exception.RoleNotFound(role_id\u003drole_id)"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"        for metadata_ref in session.query(UserProjectGrant):"},{"line_number":956,"context_line":"            meta \u003d metadata_ref.to_dict()"},{"line_number":957,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Bxg0%3D","line":954,"in_reply_to":"AAAAM3%2F%2BxkU%3D","updated":"2013-02-19 15:35:31.000000000","message":"Dolph mentioned that there isn\u0027t a need for it for a single query.  Not that familiar with it myself but in the current file i found session.begin both used and not used in the scenario.","commit_id":"54dd872a67b3ac7c50ba5d66e146358a66a8b1ab"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d2d4e05c3526be130311fdd2ccc50d0197b347e8","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"                self.delete_grant(role_id, user_id\u003dmeta[\u0027user_id\u0027],"},{"line_number":1021,"context_line":"                                  project_id\u003dmeta[\u0027project_id\u0027])"},{"line_number":1022,"context_line":"            except exception.RoleNotFound:"},{"line_number":1023,"context_line":"                pass"},{"line_number":1024,"context_line":"        for metadata_ref in session.query(UserDomainGrant):"},{"line_number":1025,"context_line":"            meta \u003d metadata_ref.to_dict()"},{"line_number":1026,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BqF8%3D","line":1023,"updated":"2013-02-22 16:22:02.000000000","message":"why continue with delete_role if the role doesn\u0027t exist... seems like mission accomplished in this case. (Maybe this should be checking for UserNotFound and ProjectNotFound?)","commit_id":"12ca19a1d5ee1f8ae15015bef3457c01e6ec5bd2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"abb199bee2445b98dfccb61fe556376e81ff3b39","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"                self.delete_grant(role_id, user_id\u003dmeta[\u0027user_id\u0027],"},{"line_number":1021,"context_line":"                                  project_id\u003dmeta[\u0027project_id\u0027])"},{"line_number":1022,"context_line":"            except exception.RoleNotFound:"},{"line_number":1023,"context_line":"                pass"},{"line_number":1024,"context_line":"        for metadata_ref in session.query(UserDomainGrant):"},{"line_number":1025,"context_line":"            meta \u003d metadata_ref.to_dict()"},{"line_number":1026,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BpwU%3D","line":1023,"in_reply_to":"AAAAM3%2F%2Bp7g%3D","updated":"2013-02-22 19:28:10.000000000","message":"yes, in delete_grant, it actually throws RoleNoteFound when either the role doesn\u0027t exist or when the role doesn\u0027t exist in the interaction pair.  the catch here is more for the latter as the former can\u0027t be triggered given our previous check up top.","commit_id":"12ca19a1d5ee1f8ae15015bef3457c01e6ec5bd2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1162c720ba43b50daeb1f7237b4c0515505289d1","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"                self.delete_grant(role_id, user_id\u003dmeta[\u0027user_id\u0027],"},{"line_number":1021,"context_line":"                                  project_id\u003dmeta[\u0027project_id\u0027])"},{"line_number":1022,"context_line":"            except exception.RoleNotFound:"},{"line_number":1023,"context_line":"                pass"},{"line_number":1024,"context_line":"        for metadata_ref in session.query(UserDomainGrant):"},{"line_number":1025,"context_line":"            meta \u003d metadata_ref.to_dict()"},{"line_number":1026,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bp7g%3D","line":1023,"in_reply_to":"AAAAM3%2F%2BqBU%3D","updated":"2013-02-22 18:28:59.000000000","message":"ok, I see that delete_grant raises RoleNotFound if the role wasn\u0027t granted. Which is weird, since RoleNotFound is normally (and also by delete_grant) used to indicate that the role doesn\u0027t exist.","commit_id":"12ca19a1d5ee1f8ae15015bef3457c01e6ec5bd2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"5bd2250f54a597cd9834dcac4b6d2b7d06bf2d78","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"                self.delete_grant(role_id, user_id\u003dmeta[\u0027user_id\u0027],"},{"line_number":1021,"context_line":"                                  project_id\u003dmeta[\u0027project_id\u0027])"},{"line_number":1022,"context_line":"            except exception.RoleNotFound:"},{"line_number":1023,"context_line":"                pass"},{"line_number":1024,"context_line":"        for metadata_ref in session.query(UserDomainGrant):"},{"line_number":1025,"context_line":"            meta \u003d metadata_ref.to_dict()"},{"line_number":1026,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BqBU%3D","line":1023,"in_reply_to":"AAAAM3%2F%2BqF8%3D","updated":"2013-02-22 16:57:10.000000000","message":"there are 4 grant tables, each containing an interaction pair (ie. user-project, user-domain, etc..) and a role associated with that pair.  delete_role goes through each table to see if that role exists in that specific table. the initial check up top actually checks to see if role exists and if not, skips this whole process.","commit_id":"12ca19a1d5ee1f8ae15015bef3457c01e6ec5bd2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d2d4e05c3526be130311fdd2ccc50d0197b347e8","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        if not session.query(Role).filter_by(id\u003drole_id).delete():"},{"line_number":1047,"context_line":"            raise exception.RoleNotFound(role_id\u003drole_id)"},{"line_number":1048,"context_line":""},{"line_number":1049,"context_line":"        with session.begin():"},{"line_number":1050,"context_line":"            session.delete(ref)"},{"line_number":1051,"context_line":"            session.flush()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BqF4%3D","line":1049,"updated":"2013-02-22 16:22:02.000000000","message":"Is a session a transaction? (Maybe I should look up the answer myself.) Creating a \"session\" seems unneccessary if it\u0027s just covering a single delete operation since it\u0027s either going to work and be committed or fail and get rolled back.","commit_id":"12ca19a1d5ee1f8ae15015bef3457c01e6ec5bd2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"abb199bee2445b98dfccb61fe556376e81ff3b39","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        if not session.query(Role).filter_by(id\u003drole_id).delete():"},{"line_number":1047,"context_line":"            raise exception.RoleNotFound(role_id\u003drole_id)"},{"line_number":1048,"context_line":""},{"line_number":1049,"context_line":"        with session.begin():"},{"line_number":1050,"context_line":"            session.delete(ref)"},{"line_number":1051,"context_line":"            session.flush()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BpsM%3D","line":1049,"in_reply_to":"AAAAM3%2F%2Bp7E%3D","updated":"2013-02-22 19:28:10.000000000","message":"i originally chose to wrap it around the delete action. but now that i review code further, i just noticed that the previous query is really a delete as well. \n\nmaybe it makes sense to wrap it all if the transactions within delete_grant are considered subtransactions.","commit_id":"12ca19a1d5ee1f8ae15015bef3457c01e6ec5bd2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1162c720ba43b50daeb1f7237b4c0515505289d1","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        if not session.query(Role).filter_by(id\u003drole_id).delete():"},{"line_number":1047,"context_line":"            raise exception.RoleNotFound(role_id\u003drole_id)"},{"line_number":1048,"context_line":""},{"line_number":1049,"context_line":"        with session.begin():"},{"line_number":1050,"context_line":"            session.delete(ref)"},{"line_number":1051,"context_line":"            session.flush()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bp7E%3D","line":1049,"in_reply_to":"AAAAM3%2F%2BqAg%3D","updated":"2013-02-22 18:28:59.000000000","message":"the first warning in that doc indicates that we shouldn\u0027t be using autocommit... are we using autcommit? (Maybe I should look up the answer myself...) The previous project I worked on used autocommit with the db and it worked well for us, so I don\u0027t totally agree with the warning.\n\nThe original version of this function had the session.begin() around a much bigger chunk of code, not just the session.delete(). Why change to only just the session.delete()?","commit_id":"12ca19a1d5ee1f8ae15015bef3457c01e6ec5bd2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"5bd2250f54a597cd9834dcac4b6d2b7d06bf2d78","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        if not session.query(Role).filter_by(id\u003drole_id).delete():"},{"line_number":1047,"context_line":"            raise exception.RoleNotFound(role_id\u003drole_id)"},{"line_number":1048,"context_line":""},{"line_number":1049,"context_line":"        with session.begin():"},{"line_number":1050,"context_line":"            session.delete(ref)"},{"line_number":1051,"context_line":"            session.flush()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BqAg%3D","line":1049,"in_reply_to":"AAAAM3%2F%2BqF4%3D","updated":"2013-02-22 16:57:10.000000000","message":"not that familiar with it myself, so i could be completely wrong using it.  i added session.begin back because of this: http://docs.sqlalchemy.org/en/latest/orm/session.html (see first warning)","commit_id":"12ca19a1d5ee1f8ae15015bef3457c01e6ec5bd2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"25024fe71ed5b27bc8bb8853193edf9168a93035","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"                except exception.RoleNotFound:"},{"line_number":1024,"context_line":"                    pass"},{"line_number":1025,"context_line":"            for metadata_ref in session.query(UserDomainGrant):"},{"line_number":1026,"context_line":"                meta \u003d metadata_ref.to_dict()"},{"line_number":1027,"context_line":"                try:"},{"line_number":1028,"context_line":"                    self.delete_grant(role_id, user_id\u003dmeta[\u0027user_id\u0027],"},{"line_number":1029,"context_line":"                                      domain_id\u003dmeta[\u0027domain_id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2Bz8%3D","line":1026,"updated":"2013-03-04 18:37:02.000000000","message":"why bother with .to_dict() ?","commit_id":"af357f6bfc46176686203392e479a820c931e16a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"850ad945230568273396ebc9be7819f14e13076e","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"                except exception.RoleNotFound:"},{"line_number":1024,"context_line":"                    pass"},{"line_number":1025,"context_line":"            for metadata_ref in session.query(UserDomainGrant):"},{"line_number":1026,"context_line":"                meta \u003d metadata_ref.to_dict()"},{"line_number":1027,"context_line":"                try:"},{"line_number":1028,"context_line":"                    self.delete_grant(role_id, user_id\u003dmeta[\u0027user_id\u0027],"},{"line_number":1029,"context_line":"                                      domain_id\u003dmeta[\u0027domain_id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2BGE%3D","line":1026,"in_reply_to":"AAAAN3%2F%2F%2Bz8%3D","updated":"2013-03-05 00:39:19.000000000","message":"copy/paste logic. dropped to_dict()","commit_id":"af357f6bfc46176686203392e479a820c931e16a"}],"keystone/identity/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"25024fe71ed5b27bc8bb8853193edf9168a93035","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        \"\"\""},{"line_number":173,"context_line":"        raise exception.NotImplemented()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    # TODO(chungg): should probably drop this once grants implemented in LDAP."},{"line_number":176,"context_line":"    def remove_role_from_user_and_project(self, user_id, tenant_id, role_id):"},{"line_number":177,"context_line":"        \"\"\"Remove a role from a user within given tenant."},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2Bzw%3D","line":175,"updated":"2013-03-04 18:37:02.000000000","message":"... because? (i\u0027m really not sure why)","commit_id":"af357f6bfc46176686203392e479a820c931e16a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"850ad945230568273396ebc9be7819f14e13076e","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        \"\"\""},{"line_number":173,"context_line":"        raise exception.NotImplemented()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    # TODO(chungg): should probably drop this once grants implemented in LDAP."},{"line_number":176,"context_line":"    def remove_role_from_user_and_project(self, user_id, tenant_id, role_id):"},{"line_number":177,"context_line":"        \"\"\"Remove a role from a user within given tenant."},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F%2BFE%3D","line":175,"in_reply_to":"AAAAN3%2F%2F%2Bzw%3D","updated":"2013-03-05 00:39:19.000000000","message":"originally i added this because the logic was near identical to delete_grant().  i\u0027ve removed it since remove_role_from_user_and_project appears to remove all UserProjectGrants for the project as well.","commit_id":"af357f6bfc46176686203392e479a820c931e16a"}],"tests/test_backend.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4643d1b2904e429099f1990546553119be209299","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"        roles_ref \u003d self.identity_api.list_grants("},{"line_number":1114,"context_line":"            group_id\u003dgroup1[\u0027id\u0027],"},{"line_number":1115,"context_line":"            domain_id\u003ddomain1[\u0027id\u0027])"},{"line_number":1116,"context_line":"        self.assertEquals(len(roles_ref), 0)"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"    def test_delete_user_with_group_project_domain_links(self):"},{"line_number":1119,"context_line":"        role1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAN3%2F%2F%2BFI%3D","line":1116,"updated":"2013-03-05 00:39:23.000000000","message":"nice add","commit_id":"e16742bdf2f1fa7386f2983b037a78fde4a576c3"}]}
