)]}'
{"keystone/credential/backends/sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        with session.begin():"},{"line_number":97,"context_line":"            query \u003d session.query(CredentialModel)"},{"line_number":98,"context_line":"            query \u003d query.filter_by(project_id\u003dproject_id)"},{"line_number":99,"context_line":"            query.delete()"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def delete_credentials_for_user(self, user_id):"},{"line_number":102,"context_line":"        session \u003d self.get_session()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8veM%3D","line":99,"updated":"2013-12-20 19:57:32.000000000","message":"nice!","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"}],"keystone/credential/core.py":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"d58c329f1e32512e654ed6b02db02f55a4b39b35","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @abc.abstractmethod"},{"line_number":100,"context_line":"    def delete_credentials_for_project(self, project_id):"},{"line_number":101,"context_line":"        \"\"\"Deletes all exisiting credentials for an existing project.\"\"\""},{"line_number":102,"context_line":"        for cred in self.list_credentials():"},{"line_number":103,"context_line":"            if cred[\u0027project_id\u0027] \u003d\u003d project_id:"},{"line_number":104,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9Fck%3D","line":101,"updated":"2013-12-16 22:50:51.000000000","message":"typo: exisiting should be existing","commit_id":"9ff2a8bc108fe02be957707fc6f30fb777cda3d4"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"cb2a5bf0a4aa48dd7b0e98744aaac337486848fb","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @abc.abstractmethod"},{"line_number":100,"context_line":"    def delete_credentials_for_project(self, project_id):"},{"line_number":101,"context_line":"        \"\"\"Deletes all exisiting credentials for an existing project.\"\"\""},{"line_number":102,"context_line":"        for cred in self.list_credentials():"},{"line_number":103,"context_line":"            if cred[\u0027project_id\u0027] \u003d\u003d project_id:"},{"line_number":104,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9FD0%3D","line":101,"in_reply_to":"AAAATn%2F9Fck%3D","updated":"2013-12-17 00:32:00.000000000","message":"Done","commit_id":"9ff2a8bc108fe02be957707fc6f30fb777cda3d4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @abc.abstractmethod"},{"line_number":100,"context_line":"    def delete_credentials_for_project(self, project_id):"},{"line_number":101,"context_line":"        \"\"\"Deletes all existing credentials for an existing project.\"\"\""},{"line_number":102,"context_line":"        for cred in self.list_credentials():"},{"line_number":103,"context_line":"            if cred[\u0027project_id\u0027] \u003d\u003d project_id:"},{"line_number":104,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vi8%3D","line":101,"updated":"2013-12-20 19:57:32.000000000","message":"suggest remove \"existing\" from this sentence since it\u0027s redundant... how would you delete non-existent credentials? ... also, this isn\u0027t checking that the project exists.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                except exception.CredentialNotFound:"},{"line_number":107,"context_line":"                    # NOTE(morganfainberg): If the credential doesn\u0027t exist"},{"line_number":108,"context_line":"                    # it doesn\u0027t matter, it is meant to be deleted. Continue"},{"line_number":109,"context_line":"                    # on and delete the rest."},{"line_number":110,"context_line":"                    pass"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vig%3D","line":109,"updated":"2013-12-20 19:57:32.000000000","message":"suggest do a debug log here, then could probably remove the comment.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                    pass"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @abc.abstractmethod"},{"line_number":113,"context_line":"    def delete_credentials_for_user(self, user_id):"},{"line_number":114,"context_line":"        for cred in self.list_credentials():"},{"line_number":115,"context_line":"            if cred[\u0027user_id\u0027] \u003d\u003d user_id:"},{"line_number":116,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8viU%3D","line":113,"updated":"2013-12-20 19:57:32.000000000","message":"should have a docstring.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                except exception.CredentialNotFound:"},{"line_number":119,"context_line":"                    # NOTE(morganfainberg): If the credential doesn\u0027t exist"},{"line_number":120,"context_line":"                    # it doesn\u0027t matter, it is meant to be deleted. Continue"},{"line_number":121,"context_line":"                    # on and delete the rest."},{"line_number":122,"context_line":"                    pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8viY%3D","line":121,"updated":"2013-12-20 19:57:32.000000000","message":"suggest do a debug log here, then could probably remove the comment.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                    # NOTE(morganfainberg): If the credential doesn\u0027t exist"},{"line_number":120,"context_line":"                    # it doesn\u0027t matter, it is meant to be deleted. Continue"},{"line_number":121,"context_line":"                    # on and delete the rest."},{"line_number":122,"context_line":"                    pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vh8%3D","line":122,"updated":"2013-12-20 19:57:32.000000000","message":"the code in 102-110 is very similar to 114-122... suggest refactor into a common function.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"}],"keystone/identity/controllers.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ea66ae46f7c3b119ae48759eca6f5170090d9dc0","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        # First delete the projects themselves"},{"line_number":615,"context_line":"        for project_id in proj_ids:"},{"line_number":616,"context_line":"            # NOTE(morganfainberg): Ensure we cleanup the credentials for the"},{"line_number":617,"context_line":"            # project and any outstanding tokens."},{"line_number":618,"context_line":"            self.credential_api.delete_credentials_for_project(project_id)"},{"line_number":619,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9EkY%3D","line":616,"updated":"2013-12-17 04:15:42.000000000","message":"This also seems to be duplicate logic. See below for an explanation.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":619,"context_line":"            try:"},{"line_number":620,"context_line":"                self._delete_tokens_for_project(project_id)"},{"line_number":621,"context_line":"                self.assignment_api.delete_project(project_id)"},{"line_number":622,"context_line":"            except exception.ProjectNotFound:"},{"line_number":623,"context_line":"                # NOTE(morganfainberg): We should still perform the cleanups"},{"line_number":624,"context_line":"                # if the project can\u0027t be found for sanity-sake."},{"line_number":625,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vgo%3D","line":622,"updated":"2013-12-20 19:57:32.000000000","message":"should we skip attempting to delete the project if _delete_tokens_for_project() raises ProjectNotFound?","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":622,"context_line":"            except exception.ProjectNotFound:"},{"line_number":623,"context_line":"                # NOTE(morganfainberg): We should still perform the cleanups"},{"line_number":624,"context_line":"                # if the project can\u0027t be found for sanity-sake."},{"line_number":625,"context_line":"                pass"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        for group_id in group_ids:"},{"line_number":628,"context_line":"            # NOTE(morganfainberg): Cleanup any existing groups."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vgk%3D","line":625,"updated":"2013-12-20 19:57:32.000000000","message":"suggest log.debug here.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ea66ae46f7c3b119ae48759eca6f5170090d9dc0","unresolved":false,"context_lines":[{"line_number":625,"context_line":"                pass"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        for group_id in group_ids:"},{"line_number":628,"context_line":"            # NOTE(morganfainberg): Cleanup any existing groups."},{"line_number":629,"context_line":"            try:"},{"line_number":630,"context_line":"                self.identity_api.delete_group(group_id,"},{"line_number":631,"context_line":"                                               domain_scope\u003dr[\u0027domain_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9Eko%3D","line":628,"updated":"2013-12-17 04:15:42.000000000","message":"Does this also need some of the extra logic from the delete_group method?","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b49d1a0f24aea87b97136cb37be43756b702bad3","unresolved":false,"context_lines":[{"line_number":625,"context_line":"                pass"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        for group_id in group_ids:"},{"line_number":628,"context_line":"            # NOTE(morganfainberg): Cleanup any existing groups."},{"line_number":629,"context_line":"            try:"},{"line_number":630,"context_line":"                self.identity_api.delete_group(group_id,"},{"line_number":631,"context_line":"                                               domain_scope\u003dr[\u0027domain_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8%2F6o%3D","line":628,"in_reply_to":"AAAATn%2F9Eko%3D","updated":"2013-12-17 21:32:50.000000000","message":"As per the IRC discussion today this logic will move down to the manager as we progress in the patchset and cleanup.  This is a long line of patches to get there and making each one a small and digestible as possible is the best course of action.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":628,"context_line":"            # NOTE(morganfainberg): Cleanup any existing groups."},{"line_number":629,"context_line":"            try:"},{"line_number":630,"context_line":"                self.identity_api.delete_group(group_id,"},{"line_number":631,"context_line":"                                               domain_scope\u003dr[\u0027domain_id\u0027])"},{"line_number":632,"context_line":"            except exception.GroupNotFound:"},{"line_number":633,"context_line":"                # NOTE(morganfainberg): In the case that a race has occurred"},{"line_number":634,"context_line":"                # and the group no longer exists, continue on and delete the"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vfE%3D","line":631,"updated":"2013-12-20 19:57:32.000000000","message":"what is r?","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":633,"context_line":"                # NOTE(morganfainberg): In the case that a race has occurred"},{"line_number":634,"context_line":"                # and the group no longer exists, continue on and delete the"},{"line_number":635,"context_line":"                # rest of the groups."},{"line_number":636,"context_line":"                pass"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        # And finally, delete the users themselves"},{"line_number":639,"context_line":"        for user_id in user_ids:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vgQ%3D","line":636,"updated":"2013-12-20 19:57:32.000000000","message":"suggest log.debug here.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ea66ae46f7c3b119ae48759eca6f5170090d9dc0","unresolved":false,"context_lines":[{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        # And finally, delete the users themselves"},{"line_number":639,"context_line":"        for user_id in user_ids:"},{"line_number":640,"context_line":"            # Delete any credentials that reference this user"},{"line_number":641,"context_line":"            self.credential_api.delete_credentials_for_user(user_id)"},{"line_number":642,"context_line":"            # Make sure any tokens are marked as deleted"},{"line_number":643,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9ElE%3D","line":640,"updated":"2013-12-17 04:15:42.000000000","message":"This seems to be a duplication of the logic in delete_user.  The only thing not in there is the try-except which probably should/could be since deleting a user should be idempotent.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"31591c1eceb78cfbf25c5fa6afd05bf9f2e79250","unresolved":false,"context_lines":[{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        # And finally, delete the users themselves"},{"line_number":639,"context_line":"        for user_id in user_ids:"},{"line_number":640,"context_line":"            # Delete any credentials that reference this user"},{"line_number":641,"context_line":"            self.credential_api.delete_credentials_for_user(user_id)"},{"line_number":642,"context_line":"            # Make sure any tokens are marked as deleted"},{"line_number":643,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9AZw%3D","line":640,"in_reply_to":"AAAATn%2F9ElE%3D","updated":"2013-12-17 19:26:16.000000000","message":"I\u0027ll work on making deletes idempotent at the manager or driver level as a separate patchset.  I think this is a much bigger task than I want to attempt in this part of the refactor.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":643,"context_line":"            try:"},{"line_number":644,"context_line":"                self._delete_tokens_for_user(user_id)"},{"line_number":645,"context_line":"                self.identity_api.delete_user(user_id,"},{"line_number":646,"context_line":"                                              domain_scope\u003dr[\u0027domain_id\u0027])"},{"line_number":647,"context_line":"            except exception.UserNotFound:"},{"line_number":648,"context_line":"                # NOTE(morganfainberg): In the case that a race has occurred"},{"line_number":649,"context_line":"                # and the user no longer exists, continue on and delete the"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vf4%3D","line":646,"updated":"2013-12-20 19:57:32.000000000","message":"should we skip attempting to delete the user if _delete_tokens_for_user raises UserNotFound?","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":648,"context_line":"                # NOTE(morganfainberg): In the case that a race has occurred"},{"line_number":649,"context_line":"                # and the user no longer exists, continue on and delete the"},{"line_number":650,"context_line":"                # rest of the users."},{"line_number":651,"context_line":"                pass"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"    @controller.protected()"},{"line_number":654,"context_line":"    def delete_domain(self, context, domain_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vf8%3D","line":651,"updated":"2013-12-20 19:57:32.000000000","message":"suggest log.debug here.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":720,"context_line":"    def delete_project(self, context, project_id):"},{"line_number":721,"context_line":"        self.credential_api.delete_credentials_for_project(project_id)"},{"line_number":722,"context_line":"        self._delete_tokens_for_project(project_id)"},{"line_number":723,"context_line":"        return self.assignment_api.delete_project(project_id)"},{"line_number":724,"context_line":""},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"@dependency.requires(\u0027identity_api\u0027, \u0027credential_api\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vfo%3D","line":723,"updated":"2013-12-20 19:57:32.000000000","message":"this is duplicated from 618-621 so should be consolidated.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":816,"context_line":"        # Finally delete the user itself - the backend is"},{"line_number":817,"context_line":"        # responsible for deleting any role assignments related"},{"line_number":818,"context_line":"        # to this user"},{"line_number":819,"context_line":"        return self.identity_api.delete_user(user_id, domain_scope\u003ddomain_id)"},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"    @controller.protected()"},{"line_number":822,"context_line":"    def change_password(self, context, user_id, user):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8ve0%3D","line":819,"updated":"2013-12-20 19:57:32.000000000","message":"this looks duplicated.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":901,"context_line":"            group_id, domain_scope\u003ddomain_id)"},{"line_number":902,"context_line":"        self.identity_api.delete_group(group_id, domain_scope\u003ddomain_id)"},{"line_number":903,"context_line":"        for user in user_refs:"},{"line_number":904,"context_line":"            self._delete_tokens_for_user(user[\u0027id\u0027])"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027identity_api\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vew%3D","line":904,"updated":"2013-12-20 19:57:32.000000000","message":"also duplicated.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"}],"keystone/tests/test_v3_credential.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_credential_api_delete_credentials_for_project(self):"},{"line_number":41,"context_line":"        self.credential_api.delete_credentials_for_project(self.project_id)"},{"line_number":42,"context_line":"        self.assertRaises(exception.CredentialNotFound,"},{"line_number":43,"context_line":"                          self.credential_api.get_credential,"},{"line_number":44,"context_line":"                          credential_id\u003dself.credential_id)"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8veo%3D","line":42,"updated":"2013-12-20 19:57:32.000000000","message":"add a comment why this should fail.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a9d5b1bc6f64e163d28c9486906f865bfb78d1f7","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_credential_api_delete_credentials_for_user(self):"},{"line_number":47,"context_line":"        self.credential_api.delete_credentials_for_user(self.user_id)"},{"line_number":48,"context_line":"        self.assertRaises(exception.CredentialNotFound,"},{"line_number":49,"context_line":"                          self.credential_api.get_credential,"},{"line_number":50,"context_line":"                          credential_id\u003dself.credential_id)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8vek%3D","line":48,"updated":"2013-12-20 19:57:32.000000000","message":"add a comment why this should fail.","commit_id":"dcefec5e0ff0f45fa079210990b363d667b38442"}]}
