)]}'
{"keystoneclient/tests/v3/test_oauth1.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                         consumer_key)"},{"line_number":138,"context_line":"        self.assertEqual(header_params.get(\u0027oauth_token\u0027), request_key)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        self.assertTrue(isinstance(token, dict))"},{"line_number":141,"context_line":"        self.assertTrue(token[\u0027access_token_secret\u0027])"},{"line_number":142,"context_line":"        self.assertTrue(token[\u0027access_token_key\u0027])"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbGU%3D","line":140,"updated":"2013-09-26 23:42:05.000000000","message":"nit: assertIsInstance","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7467ccf086ef4477e8734ff13035864dd441a5c2","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                         consumer_key)"},{"line_number":138,"context_line":"        self.assertEqual(header_params.get(\u0027oauth_token\u0027), request_key)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        self.assertTrue(isinstance(token, dict))"},{"line_number":141,"context_line":"        self.assertTrue(token[\u0027access_token_secret\u0027])"},{"line_number":142,"context_line":"        self.assertTrue(token[\u0027access_token_key\u0027])"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FX%2BA%3D","line":140,"in_reply_to":"AAAAS3%2F%2FbGU%3D","updated":"2013-09-27 21:23:20.000000000","message":"Changed this to assertIsInstance(AccessToken)","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                         consumer_key)"},{"line_number":138,"context_line":"        self.assertEqual(header_params.get(\u0027oauth_token\u0027), request_key)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        self.assertTrue(isinstance(token, dict))"},{"line_number":141,"context_line":"        self.assertTrue(token[\u0027access_token_secret\u0027])"},{"line_number":142,"context_line":"        self.assertTrue(token[\u0027access_token_key\u0027])"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2Faxs%3D","line":140,"in_reply_to":"AAAAS3%2F%2FbGU%3D","updated":"2013-09-27 04:17:39.000000000","message":"Done","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        self.assertTrue(isinstance(token, dict))"},{"line_number":141,"context_line":"        self.assertTrue(token[\u0027access_token_secret\u0027])"},{"line_number":142,"context_line":"        self.assertTrue(token[\u0027access_token_key\u0027])"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @httpretty.activate"},{"line_number":145,"context_line":"    def test_authenticate_access_token(self):"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbGQ%3D","line":142,"updated":"2013-09-26 23:42:05.000000000","message":"are these really \u0027True\u0027, use assertIn?","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        self.assertTrue(isinstance(token, dict))"},{"line_number":141,"context_line":"        self.assertTrue(token[\u0027access_token_secret\u0027])"},{"line_number":142,"context_line":"        self.assertTrue(token[\u0027access_token_key\u0027])"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @httpretty.activate"},{"line_number":145,"context_line":"    def test_authenticate_access_token(self):"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FaxY%3D","line":142,"in_reply_to":"AAAAS3%2F%2FbGQ%3D","updated":"2013-09-27 04:17:39.000000000","message":"You are correct. I\u0027ll change these.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7467ccf086ef4477e8734ff13035864dd441a5c2","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        self.assertTrue(isinstance(token, dict))"},{"line_number":141,"context_line":"        self.assertTrue(token[\u0027access_token_secret\u0027])"},{"line_number":142,"context_line":"        self.assertTrue(token[\u0027access_token_key\u0027])"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @httpretty.activate"},{"line_number":145,"context_line":"    def test_authenticate_access_token(self):"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FX%2BE%3D","line":142,"in_reply_to":"AAAAS3%2F%2FbGQ%3D","updated":"2013-09-27 21:23:20.000000000","message":"since the return type of create changed to an object, i don\u0027t believe i can use assertIn, so i\u0027ve updated the assertTrue\u0027s to be assertNotNone.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        for token in token_list:"},{"line_number":196,"context_line":"            self.assertTrue(token.authorizing_user_id)"},{"line_number":197,"context_line":"            self.assertTrue(token.project_id)"},{"line_number":198,"context_line":"            self.assertTrue(token.consumer_id)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @httpretty.activate"},{"line_number":201,"context_line":"    def test_get_access_token(self):"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbGE%3D","line":198,"updated":"2013-09-26 23:42:05.000000000","message":"should really be assertequal -ing the value rather than just that it\u0027s there","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7467ccf086ef4477e8734ff13035864dd441a5c2","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        for token in token_list:"},{"line_number":196,"context_line":"            self.assertTrue(token.authorizing_user_id)"},{"line_number":197,"context_line":"            self.assertTrue(token.project_id)"},{"line_number":198,"context_line":"            self.assertTrue(token.consumer_id)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @httpretty.activate"},{"line_number":201,"context_line":"    def test_get_access_token(self):"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FX94%3D","line":198,"in_reply_to":"AAAAS3%2F%2FaxQ%3D","updated":"2013-09-27 21:23:20.000000000","message":"Done","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        for token in token_list:"},{"line_number":196,"context_line":"            self.assertTrue(token.authorizing_user_id)"},{"line_number":197,"context_line":"            self.assertTrue(token.project_id)"},{"line_number":198,"context_line":"            self.assertTrue(token.consumer_id)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @httpretty.activate"},{"line_number":201,"context_line":"    def test_get_access_token(self):"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FaxQ%3D","line":198,"in_reply_to":"AAAAS3%2F%2FbGE%3D","updated":"2013-09-27 04:17:39.000000000","message":"I could, they are just the values specified in resp_ref anyway.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        token \u003d self.manager.get(user_id, access_id)"},{"line_number":220,"context_line":"        self.assertTrue(token.authorizing_user_id)"},{"line_number":221,"context_line":"        self.assertTrue(token.project_id)"},{"line_number":222,"context_line":"        self.assertTrue(token.consumer_id)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @httpretty.activate"},{"line_number":225,"context_line":"    def test_delete_access_token(self):"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbGI%3D","line":222,"updated":"2013-09-26 23:42:05.000000000","message":"should really be assertequal -ing the value rather than just that it\u0027s there","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        token \u003d self.manager.get(user_id, access_id)"},{"line_number":220,"context_line":"        self.assertTrue(token.authorizing_user_id)"},{"line_number":221,"context_line":"        self.assertTrue(token.project_id)"},{"line_number":222,"context_line":"        self.assertTrue(token.consumer_id)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @httpretty.activate"},{"line_number":225,"context_line":"    def test_delete_access_token(self):"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FaxM%3D","line":222,"in_reply_to":"AAAAS3%2F%2FbGI%3D","updated":"2013-09-27 04:17:39.000000000","message":"same as above.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"}],"keystoneclient/v3/client.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"3281fb531c5df6481de28edf696efafe6a86f036","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self.endpoints \u003d endpoints.EndpointManager(self)"},{"line_number":73,"context_line":"        self.domains \u003d domains.DomainManager(self)"},{"line_number":74,"context_line":"        self.groups \u003d groups.GroupManager(self)"},{"line_number":75,"context_line":"        self.oauths \u003d oauths.OAuthManager(self)"},{"line_number":76,"context_line":"        self.policies \u003d policies.PolicyManager(self)"},{"line_number":77,"context_line":"        self.projects \u003d projects.ProjectManager(self)"},{"line_number":78,"context_line":"        self.roles \u003d roles.RoleManager(self)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2FgyM%3D","line":75,"updated":"2013-06-28 19:23:36.000000000","message":"do either of these need to be plural?","commit_id":"18b622c0c5e7251a9c13a15229f643f0c22fbc08"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"92bd7301f913c987812f0084e1f1beacead87ab6","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self.endpoints \u003d endpoints.EndpointManager(self)"},{"line_number":73,"context_line":"        self.domains \u003d domains.DomainManager(self)"},{"line_number":74,"context_line":"        self.groups \u003d groups.GroupManager(self)"},{"line_number":75,"context_line":"        self.oauths \u003d oauths.OAuthManager(self)"},{"line_number":76,"context_line":"        self.policies \u003d policies.PolicyManager(self)"},{"line_number":77,"context_line":"        self.projects \u003d projects.ProjectManager(self)"},{"line_number":78,"context_line":"        self.roles \u003d roles.RoleManager(self)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2Fgnc%3D","line":75,"in_reply_to":"AAAAPn%2F%2FgyM%3D","updated":"2013-06-28 20:28:14.000000000","message":"nope, i\u0027ll fix that.","commit_id":"18b622c0c5e7251a9c13a15229f643f0c22fbc08"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e53c34717b47aa1d6a9f263fcf750101494397bb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from keystoneclient.v3 import domains"},{"line_number":22,"context_line":"from keystoneclient.v3 import endpoints"},{"line_number":23,"context_line":"from keystoneclient.v3 import groups"},{"line_number":24,"context_line":"from keystoneclient.v3 import oauth"},{"line_number":25,"context_line":"from keystoneclient.v3 import policies"},{"line_number":26,"context_line":"from keystoneclient.v3 import projects"},{"line_number":27,"context_line":"from keystoneclient.v3 import roles"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F5ag%3D","line":24,"updated":"2013-08-15 15:40:02.000000000","message":"from keystoneclient.v3.contrib import oauth1","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d45eccc5f71dc1c69fcb367b247c221f62911221","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from keystoneclient.v3 import domains"},{"line_number":22,"context_line":"from keystoneclient.v3 import endpoints"},{"line_number":23,"context_line":"from keystoneclient.v3 import groups"},{"line_number":24,"context_line":"from keystoneclient.v3 import oauth"},{"line_number":25,"context_line":"from keystoneclient.v3 import policies"},{"line_number":26,"context_line":"from keystoneclient.v3 import projects"},{"line_number":27,"context_line":"from keystoneclient.v3 import roles"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F3lY%3D","line":24,"in_reply_to":"AAAARH%2F%2F5ag%3D","updated":"2013-08-16 00:02:48.000000000","message":"++ thanks","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d45eccc5f71dc1c69fcb367b247c221f62911221","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.endpoints \u003d endpoints.EndpointManager(self)"},{"line_number":94,"context_line":"        self.domains \u003d domains.DomainManager(self)"},{"line_number":95,"context_line":"        self.groups \u003d groups.GroupManager(self)"},{"line_number":96,"context_line":"        self.oauth \u003d oauth.OAuthManager(self)"},{"line_number":97,"context_line":"        self.policies \u003d policies.PolicyManager(self)"},{"line_number":98,"context_line":"        self.projects \u003d projects.ProjectManager(self)"},{"line_number":99,"context_line":"        self.roles \u003d roles.RoleManager(self)"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F3lQ%3D","line":96,"updated":"2013-08-16 00:02:48.000000000","message":"here too","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"048ddad1ea36b03a53e040af12fc407bb1225fed","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystoneclient import exceptions"},{"line_number":19,"context_line":"from keystoneclient import httpclient"},{"line_number":20,"context_line":"from keystoneclient.v3.contrib import consumers"},{"line_number":21,"context_line":"from keystoneclient.v3.contrib import tokens"},{"line_number":22,"context_line":"from keystoneclient.v3 import credentials"},{"line_number":23,"context_line":"from keystoneclient.v3 import domains"},{"line_number":24,"context_line":"from keystoneclient.v3 import endpoints"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAASX%2F%2F96s%3D","line":21,"updated":"2013-08-23 04:31:37.000000000","message":"These should probably reference an oauth namespace.  There is no guarantee that \"consumers\" and \"tokens\" couldn\u0027t be another contrib / namespace.","commit_id":"ca3421f0b81beba2f1b0ad57d5ccbba44b857a4e"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"6227c291339d589a84f2e30332a04052e1d10b3e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystoneclient import exceptions"},{"line_number":19,"context_line":"from keystoneclient import httpclient"},{"line_number":20,"context_line":"from keystoneclient.v3.contrib import consumers as oauth_consumers"},{"line_number":21,"context_line":"from keystoneclient.v3.contrib import tokens as oauth_tokens"},{"line_number":22,"context_line":"from keystoneclient.v3.contrib import trusts"},{"line_number":23,"context_line":"from keystoneclient.v3 import credentials"},{"line_number":24,"context_line":"from keystoneclient.v3 import domains"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2F7f8%3D","line":21,"updated":"2013-08-27 21:21:41.000000000","message":"i would prefer to see these both live behind the oauth object, even if it\u0027s nothing more than a container. \n\nclient.oauth.consumers","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0e711d2547906a956101bc4cd65fee4a721a1b90","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystoneclient import exceptions"},{"line_number":19,"context_line":"from keystoneclient import httpclient"},{"line_number":20,"context_line":"from keystoneclient.v3.contrib import consumers as oauth_consumers"},{"line_number":21,"context_line":"from keystoneclient.v3.contrib import tokens as oauth_tokens"},{"line_number":22,"context_line":"from keystoneclient.v3.contrib import trusts"},{"line_number":23,"context_line":"from keystoneclient.v3 import credentials"},{"line_number":24,"context_line":"from keystoneclient.v3 import domains"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FvpQ%3D","line":21,"in_reply_to":"AAAASn%2F%2F7f8%3D","updated":"2013-08-30 04:10:32.000000000","message":"Ah, I think I wasn\u0027t clear on my last comment about these.  ++ to what Jamie said here.","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"216d00fe8e0bda15e622e6027da415147324a036","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystoneclient import httpclient"},{"line_number":19,"context_line":"from keystoneclient.openstack.common import jsonutils"},{"line_number":20,"context_line":"from keystoneclient.v3.contrib.oauth import consumers as oauth_consumers"},{"line_number":21,"context_line":"from keystoneclient.v3.contrib.oauth import tokens as oauth_tokens"},{"line_number":22,"context_line":"from keystoneclient.v3.contrib import trusts"},{"line_number":23,"context_line":"from keystoneclient.v3 import credentials"},{"line_number":24,"context_line":"from keystoneclient.v3 import domains"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAAS3%2F%2FoI0%3D","line":21,"updated":"2013-09-23 18:46:03.000000000","message":"rename contrib.oauth to contrib.oauth1\n\nreplace both these lines with:\n\n  from keystoneclient.v3.contrib import oauth1\n\nin oauth1/__init__.py\n\ndo\n\n  from keystoneclient.v3.contrib.oauth1 import consumers\n  from keystoneclient.v3.contrib.oauth1 import tokens\n\nand then in this file, use:\n\n  oauth1.consumers.ConsumerManager()\n  oauth1.tokens.TokenManager()\n\n(dots instead of underscores)","commit_id":"c6f790a3d061ce0b014c44b0218d7c6d771d4bda"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"faa77e37413d8cbfd8bbea5f0218aaca3c176915","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystoneclient import httpclient"},{"line_number":19,"context_line":"from keystoneclient.openstack.common import jsonutils"},{"line_number":20,"context_line":"from keystoneclient.v3.contrib.oauth import consumers as oauth_consumers"},{"line_number":21,"context_line":"from keystoneclient.v3.contrib.oauth import tokens as oauth_tokens"},{"line_number":22,"context_line":"from keystoneclient.v3.contrib import trusts"},{"line_number":23,"context_line":"from keystoneclient.v3 import credentials"},{"line_number":24,"context_line":"from keystoneclient.v3 import domains"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAAS3%2F%2FoEM%3D","line":21,"in_reply_to":"AAAAS3%2F%2FoI0%3D","updated":"2013-09-23 19:11:34.000000000","message":"Done, and thanks for the feedback, it was a bit awkwardly structured before.","commit_id":"c6f790a3d061ce0b014c44b0218d7c6d771d4bda"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb4b18bdc92de486aeaf16b893a2a4b7f4904a3d","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        self.policies \u003d policies.PolicyManager(self)"},{"line_number":99,"context_line":"        self.projects \u003d projects.ProjectManager(self)"},{"line_number":100,"context_line":"        self.services \u003d services.ServiceManager(self)"},{"line_number":101,"context_line":"        self.roles \u003d roles.RoleManager(self)"},{"line_number":102,"context_line":"        self.users \u003d users.UserManager(self)"},{"line_number":103,"context_line":"        self.trusts \u003d trusts.TrustManager(self)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2Fe3o%3D","line":101,"updated":"2013-09-26 00:02:13.000000000","message":"why move roles? it\u0027s trusts that is breaking alphabetical order.","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"17863e83d3aa5aa0c1570f546726265997e82d4b","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        self.policies \u003d policies.PolicyManager(self)"},{"line_number":99,"context_line":"        self.projects \u003d projects.ProjectManager(self)"},{"line_number":100,"context_line":"        self.services \u003d services.ServiceManager(self)"},{"line_number":101,"context_line":"        self.roles \u003d roles.RoleManager(self)"},{"line_number":102,"context_line":"        self.users \u003d users.UserManager(self)"},{"line_number":103,"context_line":"        self.trusts \u003d trusts.TrustManager(self)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2Fex4%3D","line":101,"in_reply_to":"AAAAS3%2F%2Fe3o%3D","updated":"2013-09-26 01:12:11.000000000","message":"whoops, accident.","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"}],"keystoneclient/v3/contrib/consumers.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"07eadc55521f9f93f13683e2f4ed7e8eb1d6b1ac","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        return self._get(\"/OS-OAUTH1/consumers/%s\" %"},{"line_number":36,"context_line":"                         (base.getid(consumer)), \"consumer\")"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def update(self, consumer, description):"},{"line_number":39,"context_line":"        params \u003d {\"consumer\":"},{"line_number":40,"context_line":"                  {\u0027description\u0027: description,"},{"line_number":41,"context_line":"                   \u0027id\u0027: base.getid(consumer)}"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2F2pk%3D","line":38,"updated":"2013-08-28 19:53:05.000000000","message":"needs test coverage","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"}],"keystoneclient/v3/contrib/oauth1/access_tokens.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Manager class for manipulating Identity OAuth Access Tokens.\"\"\""},{"line_number":29,"context_line":"    resource_class \u003d AccessToken"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def list(self, user_id):"},{"line_number":32,"context_line":"        return self._list(\u0027/users/%s/OS-OAUTH1/access_tokens\u0027 % user_id,"},{"line_number":33,"context_line":"                          \"access_tokens\")"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbFk%3D","line":31,"updated":"2013-09-26 23:42:05.000000000","message":"should be able to take a User object. It should be optional as well but i\u0027m not sure if that makes sense here.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Manager class for manipulating Identity OAuth Access Tokens.\"\"\""},{"line_number":29,"context_line":"    resource_class \u003d AccessToken"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def list(self, user_id):"},{"line_number":32,"context_line":"        return self._list(\u0027/users/%s/OS-OAUTH1/access_tokens\u0027 % user_id,"},{"line_number":33,"context_line":"                          \"access_tokens\")"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2Faw4%3D","line":31,"in_reply_to":"AAAAS3%2F%2FbFk%3D","updated":"2013-09-27 04:17:39.000000000","message":"user object makes sense. but it can\u0027t be optional as it\u0027s part of the url. Same goes for get and delete.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        return self._list(\u0027/users/%s/OS-OAUTH1/access_tokens\u0027 % user_id,"},{"line_number":33,"context_line":"                          \"access_tokens\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def get(self, user_id, access_key):"},{"line_number":36,"context_line":"        return self._get(\u0027/users/%s/OS-OAUTH1/access_tokens/%s\u0027 %"},{"line_number":37,"context_line":"                         (user_id, access_key),"},{"line_number":38,"context_line":"                         \"access_token\")"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbFg%3D","line":35,"updated":"2013-09-26 23:42:05.000000000","message":"Must take a AccessToken(/id) as the only required argument. see base.Resource.get","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                         (user_id, access_key),"},{"line_number":38,"context_line":"                         \"access_token\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def delete(self, user_id, access_key):"},{"line_number":41,"context_line":"        return self._delete(\u0027/users/%s/OS-OAUTH1/access_tokens/%s\u0027 %"},{"line_number":42,"context_line":"                            (user_id, access_key))"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbFc%3D","line":40,"updated":"2013-09-26 23:42:05.000000000","message":"MUST take a AccessToken object as the only required argument. see base.Resource.delete","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7467ccf086ef4477e8734ff13035864dd441a5c2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                         (user_id, access_key),"},{"line_number":38,"context_line":"                         \"access_token\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def delete(self, user_id, access_key):"},{"line_number":41,"context_line":"        return self._delete(\u0027/users/%s/OS-OAUTH1/access_tokens/%s\u0027 %"},{"line_number":42,"context_line":"                            (user_id, access_key))"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FX9g%3D","line":40,"in_reply_to":"AAAAS3%2F%2FbFc%3D","updated":"2013-09-27 21:23:20.000000000","message":"I\u0027m really confused about this one. I need both otherwise the url is wrong. \n\nIs there a hard requirement on only having a single required argument (access-id in this case)? I could always check if user-id is not None.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        return self._delete(\u0027/users/%s/OS-OAUTH1/access_tokens/%s\u0027 %"},{"line_number":42,"context_line":"                            (user_id, access_key))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def create_access_token(self, consumer_key, consumer_secret,"},{"line_number":45,"context_line":"                            request_key, request_secret, verifier):"},{"line_number":46,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"},{"line_number":47,"context_line":"        token \u003d oauth.Token(request_key, request_secret)"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbF8%3D","line":44,"updated":"2013-09-26 23:42:05.000000000","message":"create()","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        return self._delete(\u0027/users/%s/OS-OAUTH1/access_tokens/%s\u0027 %"},{"line_number":42,"context_line":"                            (user_id, access_key))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def create_access_token(self, consumer_key, consumer_secret,"},{"line_number":45,"context_line":"                            request_key, request_secret, verifier):"},{"line_number":46,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"},{"line_number":47,"context_line":"        token \u003d oauth.Token(request_key, request_secret)"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2Faw0%3D","line":44,"in_reply_to":"AAAAS3%2F%2FbF8%3D","updated":"2013-09-27 04:17:39.000000000","message":"Done","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            expires \u003d credentials.get(\u0027oauth_expires_at\u0027)[0]"},{"line_number":71,"context_line":"            to_return[\u0027access_token_expires_at\u0027] \u003d expires"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        return to_return"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def authenticate_access_token(self, consumer_key,"},{"line_number":76,"context_line":"                                  consumer_secret, access_key,"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbFo%3D","line":73,"updated":"2013-09-26 23:42:05.000000000","message":"why do we return a dictionary here? we should be returning an AccessToken object.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            expires \u003d credentials.get(\u0027oauth_expires_at\u0027)[0]"},{"line_number":71,"context_line":"            to_return[\u0027access_token_expires_at\u0027] \u003d expires"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        return to_return"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def authenticate_access_token(self, consumer_key,"},{"line_number":76,"context_line":"                                  consumer_secret, access_key,"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FawU%3D","line":73,"in_reply_to":"AAAAS3%2F%2FbFo%3D","updated":"2013-09-27 04:17:39.000000000","message":"alrighty","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7467ccf086ef4477e8734ff13035864dd441a5c2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            expires \u003d credentials.get(\u0027oauth_expires_at\u0027)[0]"},{"line_number":71,"context_line":"            to_return[\u0027access_token_expires_at\u0027] \u003d expires"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        return to_return"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def authenticate_access_token(self, consumer_key,"},{"line_number":76,"context_line":"                                  consumer_secret, access_key,"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FX9Q%3D","line":73,"in_reply_to":"AAAAS3%2F%2FbFo%3D","updated":"2013-09-27 21:23:20.000000000","message":"re-wrote to:\nrequest_token \u003d RequestToken(self, {\u0027id\u0027: key, \u0027secret\u0027: secret})","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        return to_return"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def authenticate_access_token(self, consumer_key,"},{"line_number":76,"context_line":"                                  consumer_secret, access_key,"},{"line_number":77,"context_line":"                                  access_secret):"},{"line_number":78,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbF4%3D","line":75,"updated":"2013-09-26 23:42:05.000000000","message":"authenticate(), and i would be inclined to put an authenticate() on the AccessToken object as well - but don\u0027t worry until someone asks for it.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        return to_return"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def authenticate_access_token(self, consumer_key,"},{"line_number":76,"context_line":"                                  consumer_secret, access_key,"},{"line_number":77,"context_line":"                                  access_secret):"},{"line_number":78,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2Faws%3D","line":75,"in_reply_to":"AAAAS3%2F%2FbF4%3D","updated":"2013-09-27 04:17:39.000000000","message":"Done","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            consumer\u003dconsumer,"},{"line_number":85,"context_line":"            token\u003dtoken,"},{"line_number":86,"context_line":"            http_method\u003d\u0027POST\u0027,"},{"line_number":87,"context_line":"            http_url\u003dself.api.auth_url + url)"},{"line_number":88,"context_line":"        hmac \u003d oauth.SignatureMethod_HMAC_SHA1()"},{"line_number":89,"context_line":"        oreq.sign_request(hmac, consumer, token)"},{"line_number":90,"context_line":"        headers.update(oreq.to_header())"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbEw%3D","line":87,"updated":"2013-09-26 23:42:05.000000000","message":"you probably want management_url - but am i right in thinking method and url will be ignored here anyway?","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            consumer\u003dconsumer,"},{"line_number":85,"context_line":"            token\u003dtoken,"},{"line_number":86,"context_line":"            http_method\u003d\u0027POST\u0027,"},{"line_number":87,"context_line":"            http_url\u003dself.api.auth_url + url)"},{"line_number":88,"context_line":"        hmac \u003d oauth.SignatureMethod_HMAC_SHA1()"},{"line_number":89,"context_line":"        oreq.sign_request(hmac, consumer, token)"},{"line_number":90,"context_line":"        headers.update(oreq.to_header())"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FawY%3D","line":87,"in_reply_to":"AAAAS3%2F%2FbEw%3D","updated":"2013-09-27 04:17:39.000000000","message":"it is particularly important as the oreq is verified on the server side. \nWhat are the differences between auth_url and management_url?","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        resp, body \u003d self.api.post(url, headers\u003dheaders, body\u003dbody)"},{"line_number":93,"context_line":"        keystone_token_id \u003d resp.headers.get(\u0027X-Subject-Token\u0027)"},{"line_number":94,"context_line":"        keystone_token \u003d body.get(\u0027token\u0027)"},{"line_number":95,"context_line":"        keystone_token[\u0027X-Subject-Token\u0027] \u003d keystone_token_id"},{"line_number":96,"context_line":"        return keystone_token"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbEY%3D","line":95,"updated":"2013-09-26 23:42:05.000000000","message":"I recognise the pattern but isn\u0027t this a v2 thing - I\u0027m probably way off here but what\u0027s going on?","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        resp, body \u003d self.api.post(url, headers\u003dheaders, body\u003dbody)"},{"line_number":93,"context_line":"        keystone_token_id \u003d resp.headers.get(\u0027X-Subject-Token\u0027)"},{"line_number":94,"context_line":"        keystone_token \u003d body.get(\u0027token\u0027)"},{"line_number":95,"context_line":"        keystone_token[\u0027X-Subject-Token\u0027] \u003d keystone_token_id"},{"line_number":96,"context_line":"        return keystone_token"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2Fawk%3D","line":95,"in_reply_to":"AAAAS3%2F%2FbEY%3D","updated":"2013-09-27 04:17:39.000000000","message":"The point is, I need to return the token id too. How I do end up doing this - I don\u0027t particularly care, just want to make sure it\u0027s correct.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"}],"keystoneclient/v3/contrib/oauth1/consumers.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb922021561dce9efd1ee9e8eedccda5164bf8e9","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            description\u003ddescription)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def list(self):"},{"line_number":41,"context_line":"        return super(ConsumerManager, self).list()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def get(self, consumer):"},{"line_number":44,"context_line":"        return super(ConsumerManager, self).get("}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FnSk%3D","line":41,"updated":"2013-09-23 22:50:13.000000000","message":"why can\u0027t you just omit this?","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5028ffddfd134d2b473db60e98bfdbcf95cb07d1","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            description\u003ddescription)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def list(self):"},{"line_number":41,"context_line":"        return super(ConsumerManager, self).list()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def get(self, consumer):"},{"line_number":44,"context_line":"        return super(ConsumerManager, self).get("}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FkDU%3D","line":41,"in_reply_to":"AAAAS3%2F%2FnSk%3D","updated":"2013-09-24 16:54:56.000000000","message":"I have removed list()","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb922021561dce9efd1ee9e8eedccda5164bf8e9","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def get(self, consumer):"},{"line_number":44,"context_line":"        return super(ConsumerManager, self).get("},{"line_number":45,"context_line":"            consumer_id\u003dbase.getid(consumer))"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def update(self, consumer, description):"},{"line_number":48,"context_line":"        return super(ConsumerManager, self).update("}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FnRo%3D","line":45,"updated":"2013-09-23 22:50:13.000000000","message":"replace with just consumer\u003dconsumer","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5028ffddfd134d2b473db60e98bfdbcf95cb07d1","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def get(self, consumer):"},{"line_number":44,"context_line":"        return super(ConsumerManager, self).get("},{"line_number":45,"context_line":"            consumer_id\u003dbase.getid(consumer))"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def update(self, consumer, description):"},{"line_number":48,"context_line":"        return super(ConsumerManager, self).update("}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FkBM%3D","line":45,"in_reply_to":"AAAAS3%2F%2FnRo%3D","updated":"2013-09-24 16:54:56.000000000","message":"when i try your suggestion, the tests break; i\u0027ll ping you about it on irc","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb922021561dce9efd1ee9e8eedccda5164bf8e9","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def update(self, consumer, description):"},{"line_number":48,"context_line":"        return super(ConsumerManager, self).update("},{"line_number":49,"context_line":"            consumer_id\u003dbase.getid(consumer),"},{"line_number":50,"context_line":"            description\u003ddescription)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def delete(self, consumer):"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FnRk%3D","line":49,"updated":"2013-09-23 22:50:13.000000000","message":"consumer\u003dconsumer","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb922021561dce9efd1ee9e8eedccda5164bf8e9","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def delete(self, consumer):"},{"line_number":53,"context_line":"        return super(ConsumerManager, self).delete("},{"line_number":54,"context_line":"            consumer_id\u003dbase.getid(consumer))"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FnSQ%3D","line":54,"updated":"2013-09-23 22:50:13.000000000","message":"have another look in base.py, at how filter_kwargs works and some of the other managers. I don\u0027t think you need most of these functions, just let them go through to the base manager.\n\n\nEDIT: just had a look through some of the other managers again myself and they aren\u0027t necessarily all good examples.","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb4b18bdc92de486aeaf16b893a2a4b7f4904a3d","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def delete(self, consumer):"},{"line_number":49,"context_line":"        return super(ConsumerManager, self).delete("},{"line_number":50,"context_line":"            consumer_id\u003dbase.getid(consumer))"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2Fe34%3D","line":50,"updated":"2013-09-26 00:02:13.000000000","message":"just checking but are you happy with list() going through to the CrudManager or should it raise a notimplemented?","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"17863e83d3aa5aa0c1570f546726265997e82d4b","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def delete(self, consumer):"},{"line_number":49,"context_line":"        return super(ConsumerManager, self).delete("},{"line_number":50,"context_line":"            consumer_id\u003dbase.getid(consumer))"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2Fex0%3D","line":50,"in_reply_to":"AAAAS3%2F%2Fe34%3D","updated":"2013-09-26 01:12:11.000000000","message":"going through the CrudManager is fine.","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        return super(ConsumerManager, self).get("},{"line_number":41,"context_line":"            consumer_id\u003dbase.getid(consumer))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def update(self, consumer, description):"},{"line_number":44,"context_line":"        return super(ConsumerManager, self).update("},{"line_number":45,"context_line":"            consumer_id\u003dbase.getid(consumer),"},{"line_number":46,"context_line":"            description\u003ddescription)"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbEU%3D","line":43,"updated":"2013-09-26 23:42:05.000000000","message":"description should still be optional, maybe to delete a description or for when more attributes exist on Consumer","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        return super(ConsumerManager, self).get("},{"line_number":41,"context_line":"            consumer_id\u003dbase.getid(consumer))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def update(self, consumer, description):"},{"line_number":44,"context_line":"        return super(ConsumerManager, self).update("},{"line_number":45,"context_line":"            consumer_id\u003dbase.getid(consumer),"},{"line_number":46,"context_line":"            description\u003ddescription)"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FaxE%3D","line":43,"in_reply_to":"AAAAS3%2F%2FbEU%3D","updated":"2013-09-27 04:17:39.000000000","message":"yes, thanks. i\u0027ll change it to description\u003dNone.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"}],"keystoneclient/v3/contrib/oauth1/core.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb4b18bdc92de486aeaf16b893a2a4b7f4904a3d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystoneclient.v3.contrib.oauth1 import tokens"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class OAuthManager(base.Manager):"},{"line_number":21,"context_line":"    def __init__(self, api):"},{"line_number":22,"context_line":"        self.consumers \u003d consumers.ConsumerManager(api)"},{"line_number":23,"context_line":"        self.tokens \u003d tokens.TokenManager(api)"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2Fe4M%3D","line":20,"updated":"2013-09-26 00:02:13.000000000","message":"don\u0027t inherit from manager here, it gives you things that you don\u0027t need/make sense on this object.","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"17863e83d3aa5aa0c1570f546726265997e82d4b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystoneclient.v3.contrib.oauth1 import tokens"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class OAuthManager(base.Manager):"},{"line_number":21,"context_line":"    def __init__(self, api):"},{"line_number":22,"context_line":"        self.consumers \u003d consumers.ConsumerManager(api)"},{"line_number":23,"context_line":"        self.tokens \u003d tokens.TokenManager(api)"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2FetM%3D","line":20,"in_reply_to":"AAAAS3%2F%2Fe4M%3D","updated":"2013-09-26 01:12:11.000000000","message":"Done, inheriting from object.","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"}],"keystoneclient/v3/contrib/oauth1/request_tokens.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Manager class for manipulating Identity OAuth Request Tokens.\"\"\""},{"line_number":29,"context_line":"    resource_class \u003d RequestToken"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def authorize_request_token(self, request_key, role_ids):"},{"line_number":32,"context_line":"        url \u003d \u0027/OS-OAUTH1/authorize/%s\u0027 % (request_key)"},{"line_number":33,"context_line":"        body \u003d {}"},{"line_number":34,"context_line":"        role_list \u003d list()"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbD4%3D","line":31,"updated":"2013-09-26 23:42:05.000000000","message":"authorize() should really take a RequestToken object","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Manager class for manipulating Identity OAuth Request Tokens.\"\"\""},{"line_number":29,"context_line":"    resource_class \u003d RequestToken"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def authorize_request_token(self, request_key, role_ids):"},{"line_number":32,"context_line":"        url \u003d \u0027/OS-OAUTH1/authorize/%s\u0027 % (request_key)"},{"line_number":33,"context_line":"        body \u003d {}"},{"line_number":34,"context_line":"        role_list \u003d list()"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2Faw8%3D","line":31,"in_reply_to":"AAAAS3%2F%2FbD4%3D","updated":"2013-09-27 04:17:39.000000000","message":"alright, i can get the \u0027key\u0027 since it\u0027s the same as the id, by doing: base.getid(request_token)","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7467ccf086ef4477e8734ff13035864dd441a5c2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        body[\u0027roles\u0027] \u003d role_list"},{"line_number":40,"context_line":"        return self._update(url, body, \"token\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def create_request_token(self, consumer_key, consumer_secret, project_id):"},{"line_number":43,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"},{"line_number":44,"context_line":"        params \u003d {\u0027requested_project_id\u0027: project_id}"},{"line_number":45,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027}"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FX88%3D","line":42,"updated":"2013-09-27 21:23:20.000000000","message":"also changed project_id to just project, calling getid within the function.","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        body[\u0027roles\u0027] \u003d role_list"},{"line_number":40,"context_line":"        return self._update(url, body, \"token\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def create_request_token(self, consumer_key, consumer_secret, project_id):"},{"line_number":43,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"},{"line_number":44,"context_line":"        params \u003d {\u0027requested_project_id\u0027: project_id}"},{"line_number":45,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027}"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbEI%3D","line":42,"updated":"2013-09-26 23:42:05.000000000","message":"create()","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aeb13f7fc93674e1b1ffc70d70735646163b0f6","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        body[\u0027roles\u0027] \u003d role_list"},{"line_number":40,"context_line":"        return self._update(url, body, \"token\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def create_request_token(self, consumer_key, consumer_secret, project_id):"},{"line_number":43,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"},{"line_number":44,"context_line":"        params \u003d {\u0027requested_project_id\u0027: project_id}"},{"line_number":45,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027}"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FaxI%3D","line":42,"in_reply_to":"AAAAS3%2F%2FbEI%3D","updated":"2013-09-27 04:17:39.000000000","message":"Done","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c84255359e036b0b78d2b862cbb2df3ed4d55cac","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            expires \u003d credentials.get(\u0027oauth_expires_at\u0027)[0]"},{"line_number":68,"context_line":"            to_return[\u0027request_token_expires_at\u0027] \u003d expires"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        return to_return"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAS3%2F%2FbEA%3D","line":70,"updated":"2013-09-26 23:42:05.000000000","message":"should be returning a RequestToken object","commit_id":"e4f31ae33b8de82c9a7b5dd5b0b1d3713e6e95b2"}],"keystoneclient/v3/contrib/oauth1/tokens.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb4b18bdc92de486aeaf16b893a2a4b7f4904a3d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Manager class for manipulating Identity OAuth Tokens.\"\"\""},{"line_number":29,"context_line":"    resource_class \u003d Token"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def list_access_tokens(self, user_id):"},{"line_number":32,"context_line":"        return self._list(\u0027/users/%s/OS-OAUTH1/access_tokens\u0027 % user_id,"},{"line_number":33,"context_line":"                          \"access_tokens\")"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2Fe3Q%3D","line":31,"updated":"2013-09-26 00:02:13.000000000","message":"any reason this can\u0027t just be list()? \n\nas it is this will be accessed as client.oauth1.tokens.list_access_token.\nclient.oauth1.tokens.list is fairly explanatory and gives the feel of a regular manager even though the url is different.","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"17863e83d3aa5aa0c1570f546726265997e82d4b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Manager class for manipulating Identity OAuth Tokens.\"\"\""},{"line_number":29,"context_line":"    resource_class \u003d Token"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def list_access_tokens(self, user_id):"},{"line_number":32,"context_line":"        return self._list(\u0027/users/%s/OS-OAUTH1/access_tokens\u0027 % user_id,"},{"line_number":33,"context_line":"                          \"access_tokens\")"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2FetQ%3D","line":31,"in_reply_to":"AAAAS3%2F%2Fe3Q%3D","updated":"2013-09-26 01:12:11.000000000","message":"Hmm, okay, list() will go ahead and list the access tokens, same with the others.","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb4b18bdc92de486aeaf16b893a2a4b7f4904a3d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        return self._list(\u0027/users/%s/OS-OAUTH1/access_tokens\u0027 % user_id,"},{"line_number":33,"context_line":"                          \"access_tokens\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def get_access_token(self, user_id, access_key):"},{"line_number":36,"context_line":"        return self._get(\u0027/users/%s/OS-OAUTH1/access_tokens/%s\u0027 %"},{"line_number":37,"context_line":"                         (user_id, access_key),"},{"line_number":38,"context_line":"                         \"access_token\")"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2Fe3I%3D","line":35,"updated":"2013-09-26 00:02:13.000000000","message":"get()","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb4b18bdc92de486aeaf16b893a2a4b7f4904a3d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                         (user_id, access_key),"},{"line_number":38,"context_line":"                         \"access_token\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def delete_access_token(self, user_id, access_key):"},{"line_number":41,"context_line":"        return self._delete(\u0027/users/%s/OS-OAUTH1/access_tokens/%s\u0027 %"},{"line_number":42,"context_line":"                            (user_id, access_key))"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2Fe3E%3D","line":40,"updated":"2013-09-26 00:02:13.000000000","message":"delete()","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb4b18bdc92de486aeaf16b893a2a4b7f4904a3d","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        return to_return"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def authenticate_access_token(self, consumer_key,"},{"line_number":117,"context_line":"                                  consumer_secret, access_key,"},{"line_number":118,"context_line":"                                  access_secret):"},{"line_number":119,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2Fe2Q%3D","line":116,"updated":"2013-09-26 00:02:13.000000000","message":"the one above is authorize - is this on purpose?","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"17863e83d3aa5aa0c1570f546726265997e82d4b","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        return to_return"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def authenticate_access_token(self, consumer_key,"},{"line_number":117,"context_line":"                                  consumer_secret, access_key,"},{"line_number":118,"context_line":"                                  access_secret):"},{"line_number":119,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAS3%2F%2FetY%3D","line":116,"in_reply_to":"AAAAS3%2F%2Fe2Q%3D","updated":"2013-09-26 01:12:11.000000000","message":"regarding the naming convention? yes. \nAuthorize is for request tokens only and Authenticate is for access tokens.","commit_id":"8f027af662e40f18e57c4d188406202d697611e9"}],"keystoneclient/v3/contrib/tokens.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"07eadc55521f9f93f13683e2f4ed7e8eb1d6b1ac","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2F2ps%3D","line":1,"updated":"2013-08-28 19:53:05.000000000","message":"ran ./run_tests.sh -c and this file comes up as 19% tested.  It needs significantly better coverage before it can be merged","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a2107576ca67a709c352aefa35bae334a7444838","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2Fvq0%3D","line":1,"in_reply_to":"AAAASn%2F%2F2ps%3D","updated":"2013-08-30 03:54:32.000000000","message":"agreed","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"5fc87909cbd278542a8c67f392932da4f3651efb","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        return self._delete(\u0027/users/%s/OS-OAUTH1/access_tokens/%s\u0027 %"},{"line_number":46,"context_line":"                            (user_id, access_key))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def authorize_request_token(self, request_key, role_ids):"},{"line_number":49,"context_line":"        url \u003d \u0027/OS-OAUTH1/authorize/%s\u0027 % (request_key)"},{"line_number":50,"context_line":"        body \u003d {}"},{"line_number":51,"context_line":"        role_list \u003d list()"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2F4uw%3D","line":48,"updated":"2013-08-28 12:17:50.000000000","message":"according to the backend and openstack client, the role_ids are not needed here.\nbackend will get the role_ids from request token","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2e81eeb385673ee414e5c892fd658ffe6ef354ab","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        return self._delete(\u0027/users/%s/OS-OAUTH1/access_tokens/%s\u0027 %"},{"line_number":46,"context_line":"                            (user_id, access_key))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def authorize_request_token(self, request_key, role_ids):"},{"line_number":49,"context_line":"        url \u003d \u0027/OS-OAUTH1/authorize/%s\u0027 % (request_key)"},{"line_number":50,"context_line":"        body \u003d {}"},{"line_number":51,"context_line":"        role_list \u003d list()"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2F3V8%3D","line":48,"in_reply_to":"AAAASn%2F%2F4uw%3D","updated":"2013-08-28 17:33:18.000000000","message":"same as below","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"5fc87909cbd278542a8c67f392932da4f3651efb","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        body[\u0027roles\u0027] \u003d role_list"},{"line_number":57,"context_line":"        return self._update(url, body, \"token\", \"PUT\")"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def create_request_token(self, consumer_key, consumer_secret, project_id):"},{"line_number":60,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"},{"line_number":61,"context_line":"        params \u003d {\u0027requested_project_id\u0027: project_id}"},{"line_number":62,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027}"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2F4u4%3D","line":59,"updated":"2013-08-28 12:17:50.000000000","message":"according to the openstack client, we need one more parameter: roles_id","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"07eadc55521f9f93f13683e2f4ed7e8eb1d6b1ac","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        body[\u0027roles\u0027] \u003d role_list"},{"line_number":57,"context_line":"        return self._update(url, body, \"token\", \"PUT\")"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def create_request_token(self, consumer_key, consumer_secret, project_id):"},{"line_number":60,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"},{"line_number":61,"context_line":"        params \u003d {\u0027requested_project_id\u0027: project_id}"},{"line_number":62,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027}"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2F2so%3D","line":59,"in_reply_to":"AAAASn%2F%2F3V4%3D","updated":"2013-08-28 19:53:05.000000000","message":"Do not adjust for the bug, but rather get the bug fixe, and make the client API correct.","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2e81eeb385673ee414e5c892fd658ffe6ef354ab","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        body[\u0027roles\u0027] \u003d role_list"},{"line_number":57,"context_line":"        return self._update(url, body, \"token\", \"PUT\")"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def create_request_token(self, consumer_key, consumer_secret, project_id):"},{"line_number":60,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"},{"line_number":61,"context_line":"        params \u003d {\u0027requested_project_id\u0027: project_id}"},{"line_number":62,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027}"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2F3V4%3D","line":59,"in_reply_to":"AAAASn%2F%2F4u4%3D","updated":"2013-08-28 17:33:18.000000000","message":"i am adjusting for this bug:\nhttps://bugs.launchpad.net/keystone/+bug/1216408","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"}],"keystoneclient/v3/oauth.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e53c34717b47aa1d6a9f263fcf750101494397bb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from keystoneclient import exceptions"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class OAuth(base.Resource):"},{"line_number":26,"context_line":"    pass"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F5aA%3D","line":25,"updated":"2013-08-15 15:40:02.000000000","message":"what is an OAuth resource?","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e53c34717b47aa1d6a9f263fcf750101494397bb","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    pass"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class OAuthManager(base.ManagerWithFind):"},{"line_number":30,"context_line":"    \"\"\"Manager class for manipulating Identity OAuth.\"\"\""},{"line_number":31,"context_line":"    resource_class \u003d OAuth"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F5Z8%3D","line":29,"updated":"2013-08-15 15:40:02.000000000","message":"make a ConsumerManager and a perhaps a TokenManager? or break it down even further to RequestTokenManager, AccessTokenManager, etc?","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d45eccc5f71dc1c69fcb367b247c221f62911221","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    pass"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class OAuthManager(base.ManagerWithFind):"},{"line_number":30,"context_line":"    \"\"\"Manager class for manipulating Identity OAuth.\"\"\""},{"line_number":31,"context_line":"    resource_class \u003d OAuth"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F3kQ%3D","line":29,"in_reply_to":"AAAARH%2F%2F5Z8%3D","updated":"2013-08-16 00:02:48.000000000","message":"cool, i\u0027ll try just splitting it into 2 for now.","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e53c34717b47aa1d6a9f263fcf750101494397bb","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def list(self):"},{"line_number":41,"context_line":"        return self.list_consumers()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def get(self, consumer_id):"},{"line_number":44,"context_line":"        return self._get(\"/OS-OAUTH1/consumers/%s\" %"},{"line_number":45,"context_line":"                         (consumer_id), \"consumer\")"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F5aE%3D","line":43,"updated":"2013-08-15 15:40:02.000000000","message":"don\u0027t include _id in any of the method signatures... call it \u0027consumer\u0027 and use getid(consumer) to resolve if it\u0027s a consumer object or an identifying string. you should also have a Consumer(base.Resource) defined","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d45eccc5f71dc1c69fcb367b247c221f62911221","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def list(self):"},{"line_number":41,"context_line":"        return self.list_consumers()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def get(self, consumer_id):"},{"line_number":44,"context_line":"        return self._get(\"/OS-OAUTH1/consumers/%s\" %"},{"line_number":45,"context_line":"                         (consumer_id), \"consumer\")"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F3kI%3D","line":43,"in_reply_to":"AAAARH%2F%2F5aE%3D","updated":"2013-08-16 00:02:48.000000000","message":"i\u0027ll change up the rest of the code","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4f5f96bda7f400ed8b49e8ef6c119403629e6be1","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                             role_ids, project_id):"},{"line_number":73,"context_line":"        consumer \u003d oauth.Consumer(consumer_key, consumer_secret)"},{"line_number":74,"context_line":"        client \u003d oauth.Client(consumer)"},{"line_number":75,"context_line":"        url \u003d self.api.management_url"},{"line_number":76,"context_line":"        url +\u003d \u0027/OS-OAUTH1/request_token\u0027"},{"line_number":77,"context_line":"        url +\u003d \u0027?requested_role_ids\u003d%s\u0027 % (role_ids)"},{"line_number":78,"context_line":"        url +\u003d \u0027\u0026requested_project_id\u003d%s\u0027 % (project_id)"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARn%2F%2F9Wo%3D","line":75,"updated":"2013-08-19 19:43:12.000000000","message":"IN general you should not be using string manipulation to set url parameters.","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d45eccc5f71dc1c69fcb367b247c221f62911221","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        url +\u003d \u0027/OS-OAUTH1/request_token\u0027"},{"line_number":77,"context_line":"        url +\u003d \u0027?requested_role_ids\u003d%s\u0027 % (role_ids)"},{"line_number":78,"context_line":"        url +\u003d \u0027\u0026requested_project_id\u003d%s\u0027 % (project_id)"},{"line_number":79,"context_line":"        resp, content \u003d client.request(url, \"GET\")"},{"line_number":80,"context_line":"        if not resp.status \u003d\u003d 200:"},{"line_number":81,"context_line":"            content_dict \u003d json.loads(content)"},{"line_number":82,"context_line":"            msg \u003d content_dict[\u0027error\u0027][\u0027message\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F3kE%3D","line":79,"updated":"2013-08-16 00:02:48.000000000","message":"change to POST, \nadd headers","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d45eccc5f71dc1c69fcb367b247c221f62911221","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        token.set_verifier(verifier)"},{"line_number":102,"context_line":"        client \u003d oauth.Client(consumer, token)"},{"line_number":103,"context_line":"        url \u003d self.api.management_url + \u0027/OS-OAUTH1/access_token\u0027"},{"line_number":104,"context_line":"        resp, content \u003d client.request(url, \"GET\")"},{"line_number":105,"context_line":"        if not resp.status \u003d\u003d 200:"},{"line_number":106,"context_line":"            content_dict \u003d json.loads(content)"},{"line_number":107,"context_line":"            msg \u003d content_dict[\u0027error\u0027][\u0027message\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F3kA%3D","line":104,"updated":"2013-08-16 00:02:48.000000000","message":"change to POST, add headers","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"70f591eeaf6c5e8526431adf819e868b5c8d84e0","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        token \u003d oauth.Token(access_key, access_secret)"},{"line_number":126,"context_line":"        client \u003d oauth.Client(consumer, token)"},{"line_number":127,"context_line":"        url \u003d self.api.management_url + \u0027/auth/tokens\u0027"},{"line_number":128,"context_line":"        url \u003d url.replace(\"/v2.0\", \"/v3\")"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027}"},{"line_number":131,"context_line":"        body \u003d {\u0027auth\u0027: {\u0027identity\u0027: {\u0027methods\u0027: [], \u0027oauth\u0027:"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAQ3%2F%2F6Wc%3D","line":128,"updated":"2013-08-13 03:53:29.000000000","message":"I\u0027m not sure what to do here, the api.management_url variable keeps coming back with v2.0 at the end. I need the full url to pass into the oauth library to sign. \n\nI think this relates back to our discussion on Monday about keystoneclient.","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4f5f96bda7f400ed8b49e8ef6c119403629e6be1","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        token \u003d oauth.Token(access_key, access_secret)"},{"line_number":126,"context_line":"        client \u003d oauth.Client(consumer, token)"},{"line_number":127,"context_line":"        url \u003d self.api.management_url + \u0027/auth/tokens\u0027"},{"line_number":128,"context_line":"        url \u003d url.replace(\"/v2.0\", \"/v3\")"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027}"},{"line_number":131,"context_line":"        body \u003d {\u0027auth\u0027: {\u0027identity\u0027: {\u0027methods\u0027: [], \u0027oauth\u0027:"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARn%2F%2F9Wg%3D","line":128,"updated":"2013-08-19 19:43:12.000000000","message":"jamielennox is working on this in another review: https://review.openstack.org/#/c/38414/  work with him on discovery.","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e53c34717b47aa1d6a9f263fcf750101494397bb","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                }"},{"line_number":136,"context_line":"        body[\u0027auth\u0027][\u0027identity\u0027][\u0027methods\u0027].append(\u0027oauth\u0027)"},{"line_number":137,"context_line":"        body[\u0027auth\u0027][\u0027identity\u0027][\u0027oauth\u0027][\u0027access_token_id\u0027] \u003d token.key"},{"line_number":138,"context_line":"        body[\u0027auth\u0027][\u0027scope\u0027][\u0027project\u0027][\u0027id\u0027] \u003d project_id"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        resp, content \u003d client.request(url,"},{"line_number":141,"context_line":"                                       \"POST\","}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F5Zs%3D","line":138,"updated":"2013-08-15 15:40:02.000000000","message":"refactor this block as you did in the server side patch","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d45eccc5f71dc1c69fcb367b247c221f62911221","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                }"},{"line_number":136,"context_line":"        body[\u0027auth\u0027][\u0027identity\u0027][\u0027methods\u0027].append(\u0027oauth\u0027)"},{"line_number":137,"context_line":"        body[\u0027auth\u0027][\u0027identity\u0027][\u0027oauth\u0027][\u0027access_token_id\u0027] \u003d token.key"},{"line_number":138,"context_line":"        body[\u0027auth\u0027][\u0027scope\u0027][\u0027project\u0027][\u0027id\u0027] \u003d project_id"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        resp, content \u003d client.request(url,"},{"line_number":141,"context_line":"                                       \"POST\","}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAARH%2F%2F3k0%3D","line":138,"in_reply_to":"AAAARH%2F%2F5Zs%3D","updated":"2013-08-16 00:02:48.000000000","message":"++","commit_id":"77c43c4efe11b184f9ac5d4e646bd849990881c0"}],"keystoneclient/v3/oauths.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"1a68e330a0a1ede77c1942c01f9fbb14f2424bc1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 OpenStack LLC."},{"line_number":2,"context_line":"# Copyright 2011 Nebula, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2FfeA%3D","line":1,"updated":"2013-06-01 00:43:15.000000000","message":"Update the date","commit_id":"f2045deb030d19f42b3d4578810a2586e83f2633"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"919b09ba130ac046107fd4379ad5e93fec24868b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 OpenStack LLC."},{"line_number":2,"context_line":"# Copyright 2011 Nebula, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2Fw04%3D","line":1,"in_reply_to":"AAAAPH%2F%2FfeA%3D","updated":"2013-06-11 04:56:04.000000000","message":"Done","commit_id":"f2045deb030d19f42b3d4578810a2586e83f2633"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"1a68e330a0a1ede77c1942c01f9fbb14f2424bc1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        auth_url \u003d auth_url + \u0027\u0026requested_roles\u003d%s\u0027 % (roles)"},{"line_number":60,"context_line":"        return self._create(auth_url, None, \"token\")"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def create_access_token(self, consumer_key, request_key, verifier):"},{"line_number":63,"context_line":"        access_url \u003d \u0027/oauth/access_token?\u0027"},{"line_number":64,"context_line":"        access_url \u003d access_url + \u0027oauth_consumer_key\u003d%s\u0027 % (consumer_key)"},{"line_number":65,"context_line":"        access_url \u003d access_url + \u0027\u0026oauth_token\u003d%s\u0027 % (request_key)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Ffd4%3D","line":62,"updated":"2013-06-01 00:43:15.000000000","message":"It is a bit of a micro-optimiztion, but doing these kind of string operations in a single bound is much more efficient:\n\n auth_url \u003d \u0027/oauth/authorize_token?oauth_token\u003d%s\u0026user_token\u003d%s\u0026requested_roles\u003d%s\" % (request_key, user_token, roles)\n\nHOwever if roles is a list, you might need something like:\nfor role in roles: \n     auth_url +\u003d \"\u0026requested_role\u003d%s\"  %  role","commit_id":"f2045deb030d19f42b3d4578810a2586e83f2633"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"919b09ba130ac046107fd4379ad5e93fec24868b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        auth_url \u003d auth_url + \u0027\u0026requested_roles\u003d%s\u0027 % (roles)"},{"line_number":60,"context_line":"        return self._create(auth_url, None, \"token\")"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def create_access_token(self, consumer_key, request_key, verifier):"},{"line_number":63,"context_line":"        access_url \u003d \u0027/oauth/access_token?\u0027"},{"line_number":64,"context_line":"        access_url \u003d access_url + \u0027oauth_consumer_key\u003d%s\u0027 % (consumer_key)"},{"line_number":65,"context_line":"        access_url \u003d access_url + \u0027\u0026oauth_token\u003d%s\u0027 % (request_key)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2Fw08%3D","line":62,"in_reply_to":"AAAAPH%2F%2Ffd4%3D","updated":"2013-06-11 04:56:04.000000000","message":"Done","commit_id":"f2045deb030d19f42b3d4578810a2586e83f2633"}],"tests/v3/test_consumers.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"07eadc55521f9f93f13683e2f4ed7e8eb1d6b1ac","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        ref \u003d self.new_ref()"},{"line_number":38,"context_line":"        req_ref \u003d ref.copy()"},{"line_number":39,"context_line":"        req_ref[\u0027description\u0027] \u003d None"},{"line_number":40,"context_line":"        super(ConsumerTests, self).test_create(ref\u003dref, req_ref\u003dreq_ref)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def test_create_desc(self):"},{"line_number":43,"context_line":"        ref \u003d self.new_ref()"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2F2tA%3D","line":40,"updated":"2013-08-28 19:53:05.000000000","message":"These tests all need OAUTH specific post create tests to ensure the objects created are sane.","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a2107576ca67a709c352aefa35bae334a7444838","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        ref \u003d self.new_ref()"},{"line_number":38,"context_line":"        req_ref \u003d ref.copy()"},{"line_number":39,"context_line":"        req_ref[\u0027description\u0027] \u003d None"},{"line_number":40,"context_line":"        super(ConsumerTests, self).test_create(ref\u003dref, req_ref\u003dreq_ref)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def test_create_desc(self):"},{"line_number":43,"context_line":"        ref \u003d self.new_ref()"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAASn%2F%2FvrI%3D","line":40,"in_reply_to":"AAAASn%2F%2F2tA%3D","updated":"2013-08-30 03:54:32.000000000","message":"good call, i\u0027ll add some oauth specific stuff here (and the other cases)","commit_id":"14b999f414a8697ee5d9089f0783da98c09bb1da"}],"tests/v3/test_oauth_consumers.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb922021561dce9efd1ee9e8eedccda5164bf8e9","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_create(self):"},{"line_number":37,"context_line":"        ref \u003d self.new_ref()"},{"line_number":38,"context_line":"        super(ConsumerTests, self).test_create(ref\u003dref)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_list(self):"},{"line_number":41,"context_line":"        super(ConsumerTests, self).test_list()"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FnQk%3D","line":38,"updated":"2013-09-23 22:50:13.000000000","message":"don\u0027t need this done automatically \n\nsee v3.utils.CrudTests.test_create","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5028ffddfd134d2b473db60e98bfdbcf95cb07d1","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_create(self):"},{"line_number":37,"context_line":"        ref \u003d self.new_ref()"},{"line_number":38,"context_line":"        super(ConsumerTests, self).test_create(ref\u003dref)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_list(self):"},{"line_number":41,"context_line":"        super(ConsumerTests, self).test_list()"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FkDo%3D","line":38,"in_reply_to":"AAAAS3%2F%2FnQk%3D","updated":"2013-09-24 16:54:56.000000000","message":"Thanks, I have removed test_create, test_list and test_update.","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb922021561dce9efd1ee9e8eedccda5164bf8e9","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        super(ConsumerTests, self).test_create(ref\u003dref)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_list(self):"},{"line_number":41,"context_line":"        super(ConsumerTests, self).test_list()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_update(self):"},{"line_number":44,"context_line":"        ref \u003d self.new_ref()"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FnRA%3D","line":41,"updated":"2013-09-23 22:50:13.000000000","message":"omit","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5028ffddfd134d2b473db60e98bfdbcf95cb07d1","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        super(ConsumerTests, self).test_create(ref\u003dref)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_list(self):"},{"line_number":41,"context_line":"        super(ConsumerTests, self).test_list()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_update(self):"},{"line_number":44,"context_line":"        ref \u003d self.new_ref()"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FkDk%3D","line":41,"in_reply_to":"AAAAS3%2F%2FnRA%3D","updated":"2013-09-24 16:54:56.000000000","message":"Done","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"eb922021561dce9efd1ee9e8eedccda5164bf8e9","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_update(self):"},{"line_number":44,"context_line":"        ref \u003d self.new_ref()"},{"line_number":45,"context_line":"        super(ConsumerTests, self).test_update(ref\u003dref)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FnQg%3D","line":45,"updated":"2013-09-23 22:50:13.000000000","message":"don\u0027t need this.","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5028ffddfd134d2b473db60e98bfdbcf95cb07d1","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_update(self):"},{"line_number":44,"context_line":"        ref \u003d self.new_ref()"},{"line_number":45,"context_line":"        super(ConsumerTests, self).test_update(ref\u003dref)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAAS3%2F%2FkDg%3D","line":45,"in_reply_to":"AAAAS3%2F%2FnQg%3D","updated":"2013-09-24 16:54:56.000000000","message":"Done","commit_id":"84fd83e318396aad2da672f07752b9af2111b90e"}]}
