)]}'
{"tests/test_v3.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"36824261f0218e86a729edbc4d009618163f0c4e","unresolved":false,"context_lines":[{"line_number":678,"context_line":"            self.assertEqual(ref[\u0027trustor_user_id\u0027], entity[\u0027trustor_user_id\u0027])"},{"line_number":679,"context_line":"            self.assertEqual(ref[\u0027trustee_user_id\u0027], entity[\u0027trustee_user_id\u0027])"},{"line_number":680,"context_line":"            self.assertEqual(ref[\u0027project_id\u0027], entity[\u0027project_id\u0027])"},{"line_number":681,"context_line":"            self.assertEqual(ref[\u0027expires_at\u0027], entity[\u0027expires_at\u0027])"},{"line_number":682,"context_line":"        return entity"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2Fms%3D","line":681,"updated":"2013-02-28 03:14:31.000000000","message":"do a time comparison instead of a string comparison, as they go through some parsing and may not be identical, but still have the same time value.  I did \n\n            self.assertEqual(timeutils.parse_isotime(ref.get(\u0027expires_at\u0027, None)),\n                             timeutils.parse_isotime(entity.get(\u0027expires_at\u0027,None)))","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"55bad3dce77cf2328effa149b6b4f1fda79bed7d","unresolved":false,"context_lines":[{"line_number":678,"context_line":"            self.assertEqual(ref[\u0027trustor_user_id\u0027], entity[\u0027trustor_user_id\u0027])"},{"line_number":679,"context_line":"            self.assertEqual(ref[\u0027trustee_user_id\u0027], entity[\u0027trustee_user_id\u0027])"},{"line_number":680,"context_line":"            self.assertEqual(ref[\u0027project_id\u0027], entity[\u0027project_id\u0027])"},{"line_number":681,"context_line":"            self.assertEqual(ref[\u0027expires_at\u0027], entity[\u0027expires_at\u0027])"},{"line_number":682,"context_line":"        return entity"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FOY%3D","line":681,"in_reply_to":"AAAANH%2F%2F%2Fms%3D","updated":"2013-02-28 14:04:33.000000000","message":"Good catch, I completely forgot we have self.assertCloseEnoughForGovernmentWork(t1, t2) :)","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"07198b4388189c368327fd37f9795e4d9cd12b75","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            token \u003d serializer.from_xml(etree.tostring(r.body))[\u0027token\u0027]"},{"line_number":336,"context_line":"        else:"},{"line_number":337,"context_line":"            token \u003d r.body[\u0027token\u0027]"},{"line_number":338,"context_line":"        self.assertIn(\u0027expires\u0027, token)"},{"line_number":339,"context_line":"        self.assertIn(\u0027user\u0027, token)"},{"line_number":340,"context_line":"        self.assertEqual(self.user[\u0027id\u0027], token[\u0027user\u0027][\u0027id\u0027])"},{"line_number":341,"context_line":"        self.assertEqual(self.user[\u0027name\u0027], token[\u0027user\u0027][\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAANH%2F%2F%2Bz0%3D","line":338,"updated":"2013-02-28 18:02:39.000000000","message":"OK, can re-enable these in the tests now","commit_id":"31fa81f1fd20b70222b8d8926b66189dcf0441f7"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"07198b4388189c368327fd37f9795e4d9cd12b75","unresolved":false,"context_lines":[{"line_number":654,"context_line":""},{"line_number":655,"context_line":"    def assertValidTrust(self, entity, ref\u003dNone):"},{"line_number":656,"context_line":"        self.assertIsNotNone(entity.get(\u0027trustor_user_id\u0027))"},{"line_number":657,"context_line":"        self.assertIsNotNone(entity.get(\u0027trustee_user_id\u0027))"},{"line_number":658,"context_line":"        self.assertIn(\u0027expires_at\u0027, entity)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        # always disallow project xor project_id (neither or both is allowed)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAANH%2F%2F%2Bzw%3D","line":657,"updated":"2013-02-28 18:02:39.000000000","message":"Project ID is now optional for due to  unscoped.","commit_id":"31fa81f1fd20b70222b8d8926b66189dcf0441f7"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"07198b4388189c368327fd37f9795e4d9cd12b75","unresolved":false,"context_lines":[{"line_number":677,"context_line":"            self.assertEqual(ref[\u0027trustor_user_id\u0027], entity[\u0027trustor_user_id\u0027])"},{"line_number":678,"context_line":"            self.assertEqual(ref[\u0027trustee_user_id\u0027], entity[\u0027trustee_user_id\u0027])"},{"line_number":679,"context_line":"            self.assertEqual(ref[\u0027project_id\u0027], entity[\u0027project_id\u0027])"},{"line_number":680,"context_line":"            if (entity.get(\u0027expires_at\u0027) is None):"},{"line_number":681,"context_line":"                self.assertIsNone(ref.get(\u0027expires_at\u0027))"},{"line_number":682,"context_line":"            else:"},{"line_number":683,"context_line":"                self.assertCloseEnoughForGovernmentWork("}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAANH%2F%2F%2Bzo%3D","line":680,"updated":"2013-02-28 18:02:39.000000000","message":"Need to handle the None cases.","commit_id":"31fa81f1fd20b70222b8d8926b66189dcf0441f7"}],"tests/test_v3_auth.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"e36cf175dc33d8443ddd6cbab549004c10e46466","unresolved":false,"context_lines":[{"line_number":713,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by bug 1133435\u0027)"},{"line_number":714,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: {}}, expected_status\u003d400)"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"    def test_create_unscoped_trust(self):"},{"line_number":717,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":718,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":719,"context_line":"            trustee_user_id\u003dself.trustee_user_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BkUo%3D","line":716,"updated":"2013-02-27 04:58:01.000000000","message":"we allow unscoped trust? What for?","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"98fffa4b0d560c96819661a6432f977217e49597","unresolved":false,"context_lines":[{"line_number":713,"context_line":"        raise nose.exc.SkipTest(\u0027Blocked by bug 1133435\u0027)"},{"line_number":714,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: {}}, expected_status\u003d400)"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"    def test_create_unscoped_trust(self):"},{"line_number":717,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":718,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":719,"context_line":"            trustee_user_id\u003dself.trustee_user_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bjr8%3D","line":716,"in_reply_to":"AAAAM3%2F%2BkUo%3D","updated":"2013-02-27 14:29:55.000000000","message":"Given that roles are optional, I\u0027d expect a project to be optional -- there\u0027s not really any meaning to having one without the other. This also seems useful if you enable impersonation without scoping -- useful for requesting another user\u0027s list of projects/domains in keystone, for example.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"313b91cba138ccf8bcc72efa21a449ee29df310f","unresolved":false,"context_lines":[{"line_number":736,"context_line":"            expected_status\u003d200)"},{"line_number":737,"context_line":"        self.assertValidTrustResponse(r, ref)"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        # validate roles on the trust"},{"line_number":740,"context_line":"        r \u003d self.get("},{"line_number":741,"context_line":"            \u0027/trusts/%(trust_id)s/roles\u0027 % {"},{"line_number":742,"context_line":"                \u0027trust_id\u0027: trust[\u0027id\u0027]},"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bjqw%3D","line":739,"updated":"2013-02-27 14:44:54.000000000","message":"These should get replaced with validation of the role data on the trust object itself.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"53617d153cd27c442989311119e2a199912fd82d","unresolved":false,"context_lines":[{"line_number":790,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref}, expected_status\u003d403)"},{"line_number":791,"context_line":""},{"line_number":792,"context_line":"    def test_create_trust_project_404(self):"},{"line_number":793,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":794,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":795,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":796,"context_line":"            project_id\u003duuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BkaY%3D","line":793,"updated":"2013-02-27 03:05:47.000000000","message":"I would not expect this to fail.  We do not validate that a project exists, or that roles have been assigned, until trust execution time.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"30b1dbec3e350ef6507ad425b74d513a7dfff486","unresolved":false,"context_lines":[{"line_number":790,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref}, expected_status\u003d403)"},{"line_number":791,"context_line":""},{"line_number":792,"context_line":"    def test_create_trust_project_404(self):"},{"line_number":793,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":794,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":795,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":796,"context_line":"            project_id\u003duuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BjoU%3D","line":793,"in_reply_to":"AAAAM3%2F%2Bjq8%3D","updated":"2013-02-27 15:10:23.000000000","message":"They\u0027re unconsumable at that point, right? I appreciate the need to keep around the record for auditing, but how else would you denote in the API that a trust is unusable? (besides a 404)","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"313b91cba138ccf8bcc72efa21a449ee29df310f","unresolved":false,"context_lines":[{"line_number":790,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref}, expected_status\u003d403)"},{"line_number":791,"context_line":""},{"line_number":792,"context_line":"    def test_create_trust_project_404(self):"},{"line_number":793,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":794,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":795,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":796,"context_line":"            project_id\u003duuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bjq8%3D","line":793,"in_reply_to":"AAAAM3%2F%2BjsY%3D","updated":"2013-02-27 14:44:54.000000000","message":"Good point.  As I thought it over, I realized that the objects creates are all using UUIDs that had to be server side generated, and so delaying the validation is pointless.\n\nI\u0027d like to note, tho0ugh, that I still don\u0027t want to delete trusts after creation just because a user has lost a role.  Those changes and assignments may be temporary, and should not cause trusts to go away.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"98fffa4b0d560c96819661a6432f977217e49597","unresolved":false,"context_lines":[{"line_number":790,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref}, expected_status\u003d403)"},{"line_number":791,"context_line":""},{"line_number":792,"context_line":"    def test_create_trust_project_404(self):"},{"line_number":793,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":794,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":795,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":796,"context_line":"            project_id\u003duuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BjsY%3D","line":793,"in_reply_to":"AAAAM3%2F%2BkaY%3D","updated":"2013-02-27 14:29:55.000000000","message":"That\u0027s contrary to every other API in keystone.\n\nAround essex, users frequently complained of being able to fill keystone with garbage data without error. We\u0027ve since rectified that it should be tested for and rectified here.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"313b91cba138ccf8bcc72efa21a449ee29df310f","unresolved":false,"context_lines":[{"line_number":805,"context_line":"            project_id\u003dself.project_id,"},{"line_number":806,"context_line":"            role_ids\u003d[uuid.uuid4().hex])"},{"line_number":807,"context_line":"        del ref[\u0027id\u0027]"},{"line_number":808,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref}, expected_status\u003d404)"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def test_create_trust_role_name_404(self):"},{"line_number":811,"context_line":"        ref \u003d self.new_trust_ref("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bjq4%3D","line":808,"updated":"2013-02-27 14:44:54.000000000","message":"400 for invalid data, not 404.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"30b1dbec3e350ef6507ad425b74d513a7dfff486","unresolved":false,"context_lines":[{"line_number":805,"context_line":"            project_id\u003dself.project_id,"},{"line_number":806,"context_line":"            role_ids\u003d[uuid.uuid4().hex])"},{"line_number":807,"context_line":"        del ref[\u0027id\u0027]"},{"line_number":808,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref}, expected_status\u003d404)"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def test_create_trust_role_name_404(self):"},{"line_number":811,"context_line":"        ref \u003d self.new_trust_ref("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BjoQ%3D","line":808,"in_reply_to":"AAAAM3%2F%2Bjq4%3D","updated":"2013-02-27 15:10:23.000000000","message":"404 here because the referenced role can\u0027t be found (RoleNotFound should bubble up to the API layer)","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"53617d153cd27c442989311119e2a199912fd82d","unresolved":false,"context_lines":[{"line_number":817,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref}, expected_status\u003d404)"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"    def test_create_expired_trust(self):"},{"line_number":820,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":821,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":822,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":823,"context_line":"            project_id\u003dself.project_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bkaw%3D","line":820,"updated":"2013-02-27 03:05:47.000000000","message":"This does not create an expired trust.  A trust takes in the iso time.  If no time is passed in, the trust does not expire.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"98fffa4b0d560c96819661a6432f977217e49597","unresolved":false,"context_lines":[{"line_number":817,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref}, expected_status\u003d404)"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"    def test_create_expired_trust(self):"},{"line_number":820,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":821,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":822,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":823,"context_line":"            project_id\u003dself.project_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BjsI%3D","line":820,"in_reply_to":"AAAAM3%2F%2Bkaw%3D","updated":"2013-02-27 14:29:55.000000000","message":"Good catch, I must have lost the expiration argument in a refactor.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"313b91cba138ccf8bcc72efa21a449ee29df310f","unresolved":false,"context_lines":[{"line_number":827,"context_line":"        self.assertValidTrustResponse(r, ref)"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"        self.get(\u0027/trusts/%(trust_id)s\u0027 % {"},{"line_number":830,"context_line":"            \u0027trust_id\u0027: ref[\u0027id\u0027]},"},{"line_number":831,"context_line":"            expected_status\u003d404)"},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"    def test_exercise_trust_scoped_token_without_impersonation(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bjqs%3D","line":830,"updated":"2013-02-27 14:44:54.000000000","message":"You need to fill in the id from r.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"30b1dbec3e350ef6507ad425b74d513a7dfff486","unresolved":false,"context_lines":[{"line_number":827,"context_line":"        self.assertValidTrustResponse(r, ref)"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"        self.get(\u0027/trusts/%(trust_id)s\u0027 % {"},{"line_number":830,"context_line":"            \u0027trust_id\u0027: ref[\u0027id\u0027]},"},{"line_number":831,"context_line":"            expected_status\u003d404)"},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"    def test_exercise_trust_scoped_token_without_impersonation(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BjoM%3D","line":830,"in_reply_to":"AAAAM3%2F%2Bjqs%3D","updated":"2013-02-27 15:10:23.000000000","message":"It looks like I made that mistake several times, apparently -- thanks.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"313b91cba138ccf8bcc72efa21a449ee29df310f","unresolved":false,"context_lines":[{"line_number":842,"context_line":"        r \u003d self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref})"},{"line_number":843,"context_line":"        trust \u003d self.assertValidTrustResponse(r)"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"        auth_data \u003d _build_authentication_request("},{"line_number":846,"context_line":"            user_id\u003dself.trustee_user[\u0027id\u0027],"},{"line_number":847,"context_line":"            password\u003dself.trustee_user[\u0027password\u0027],"},{"line_number":848,"context_line":"            trust_id\u003dtrust[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BjrE%3D","line":845,"updated":"2013-02-27 14:44:54.000000000","message":"You must have a token to get a trust token.  UID/PW or other forms of auth do not work.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"30b1dbec3e350ef6507ad425b74d513a7dfff486","unresolved":false,"context_lines":[{"line_number":842,"context_line":"        r \u003d self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref})"},{"line_number":843,"context_line":"        trust \u003d self.assertValidTrustResponse(r)"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"        auth_data \u003d _build_authentication_request("},{"line_number":846,"context_line":"            user_id\u003dself.trustee_user[\u0027id\u0027],"},{"line_number":847,"context_line":"            password\u003dself.trustee_user[\u0027password\u0027],"},{"line_number":848,"context_line":"            trust_id\u003dtrust[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BjoI%3D","line":845,"in_reply_to":"AAAAM3%2F%2BjrE%3D","updated":"2013-02-27 15:10:23.000000000","message":"I thought you changed your mind on that? Why the constraint? What\u0027s the goal of requiring a (unscoped?) token first?\n\nFrom the CLI, I\u0027m envisioning passing an extra --os-trust-id on top of my other credentials... and then you can consume a trust in a single step.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"e36cf175dc33d8443ddd6cbab549004c10e46466","unresolved":false,"context_lines":[{"line_number":860,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027name\u0027],"},{"line_number":861,"context_line":"                         self.project[\u0027name\u0027])"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"    def test_exercise_trust_scoped_token_with_impersonation(self):"},{"line_number":864,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":865,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":866,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BkUI%3D","line":863,"updated":"2013-02-27 04:58:01.000000000","message":"how about a test for creating a trust token in v3 and validating it in v2?","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"98fffa4b0d560c96819661a6432f977217e49597","unresolved":false,"context_lines":[{"line_number":860,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027name\u0027],"},{"line_number":861,"context_line":"                         self.project[\u0027name\u0027])"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"    def test_exercise_trust_scoped_token_with_impersonation(self):"},{"line_number":864,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":865,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":866,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bjrw%3D","line":863,"in_reply_to":"AAAAM3%2F%2BkUI%3D","updated":"2013-02-27 14:29:55.000000000","message":"I haven\u0027t seen any docs for v2 and wouldn\u0027t pretend to have any expectations as to how to use it.","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"e36cf175dc33d8443ddd6cbab549004c10e46466","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                         self.domain[\u0027name\u0027])"},{"line_number":887,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027id\u0027], self.project[\u0027id\u0027])"},{"line_number":888,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027name\u0027],"},{"line_number":889,"context_line":"                         self.project[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BkVI%3D","line":889,"updated":"2013-02-27 04:58:01.000000000","message":"Can you also add xml test cases for trust if possible?","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"98fffa4b0d560c96819661a6432f977217e49597","unresolved":false,"context_lines":[{"line_number":886,"context_line":"                         self.domain[\u0027name\u0027])"},{"line_number":887,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027id\u0027], self.project[\u0027id\u0027])"},{"line_number":888,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027name\u0027],"},{"line_number":889,"context_line":"                         self.project[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bjrs%3D","line":889,"in_reply_to":"AAAAM3%2F%2BkVI%3D","updated":"2013-02-27 14:29:55.000000000","message":"I\u0027d like to take a stab at that for at least a single test case -- I was focused mostly on API behavior yesterday","commit_id":"3b0799ee1bad697def17fa9fb21dca130abcc143"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"36824261f0218e86a729edbc4d009618163f0c4e","unresolved":false,"context_lines":[{"line_number":624,"context_line":"    def test_create_trust_trustee_404(self):"},{"line_number":625,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":626,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":627,"context_line":"            trustee_user_id\u003dself.trustee_user_id)"},{"line_number":628,"context_line":"        del ref[\u0027id\u0027]"},{"line_number":629,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref}, expected_status\u003d404)"},{"line_number":630,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2Fn4%3D","line":627,"updated":"2013-02-28 03:14:31.000000000","message":"trust_dict[\u0027expires_at\u0027] \u003d timeutils.isotime(trust_dict[\u0027expires_at\u0027])","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"55bad3dce77cf2328effa149b6b4f1fda79bed7d","unresolved":false,"context_lines":[{"line_number":624,"context_line":"    def test_create_trust_trustee_404(self):"},{"line_number":625,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":626,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":627,"context_line":"            trustee_user_id\u003dself.trustee_user_id)"},{"line_number":628,"context_line":"        del ref[\u0027id\u0027]"},{"line_number":629,"context_line":"        self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref}, expected_status\u003d404)"},{"line_number":630,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FL8%3D","line":627,"in_reply_to":"AAAANH%2F%2F%2Fn4%3D","updated":"2013-02-28 14:04:33.000000000","message":"Done","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"36824261f0218e86a729edbc4d009618163f0c4e","unresolved":false,"context_lines":[{"line_number":667,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":668,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":669,"context_line":"            project_id\u003dself.project_id,"},{"line_number":670,"context_line":"            expires\u003ddict(seconds\u003d-1),"},{"line_number":671,"context_line":"            role_ids\u003d[self.role_id])"},{"line_number":672,"context_line":"        del ref[\u0027id\u0027]"},{"line_number":673,"context_line":"        r \u003d self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2Fnw%3D","line":670,"updated":"2013-02-28 03:14:31.000000000","message":"This should be sufficient, but I ended up using a time difference of a minute instead.  There shouldn\u0027t be rounding....But sometimes there is.  Still, a minute should be a valid test?","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"55bad3dce77cf2328effa149b6b4f1fda79bed7d","unresolved":false,"context_lines":[{"line_number":667,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":668,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":669,"context_line":"            project_id\u003dself.project_id,"},{"line_number":670,"context_line":"            expires\u003ddict(seconds\u003d-1),"},{"line_number":671,"context_line":"            role_ids\u003d[self.role_id])"},{"line_number":672,"context_line":"        del ref[\u0027id\u0027]"},{"line_number":673,"context_line":"        r \u003d self.post(\u0027/trusts\u0027, body\u003d{\u0027trust\u0027: ref})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FOA%3D","line":670,"in_reply_to":"AAAANH%2F%2F%2Fnw%3D","updated":"2013-02-28 14:04:33.000000000","message":"If anything, I\u0027d rather use dict() so that it\u0027s only expired by milliseconds, at most... I chose seconds to better illustrate intent of the test.","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"36824261f0218e86a729edbc4d009618163f0c4e","unresolved":false,"context_lines":[{"line_number":679,"context_line":""},{"line_number":680,"context_line":"        auth_data \u003d _build_authentication_request("},{"line_number":681,"context_line":"            user_id\u003dself.trustee_user[\u0027id\u0027],"},{"line_number":682,"context_line":"            password\u003dself.trustee_user[\u0027password\u0027],"},{"line_number":683,"context_line":"            trust_id\u003dtrust[\u0027id\u0027])"},{"line_number":684,"context_line":"        self.post(\u0027/auth/tokens\u0027, body\u003dauth_data, expected_status\u003d401)"},{"line_number":685,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2Fng%3D","line":682,"updated":"2013-02-28 03:14:31.000000000","message":"Again, can\u0027t do trust auth with a password:  trust gets ignored and you get a token as yourself.  I can put in an extra check for that, but the positive thread here should be:\n        auth_data \u003d _build_authentication_request(\n            user_id\u003dself.trustee_user[\u0027id\u0027],\n            password\u003dself.trustee_user[\u0027password\u0027])\n        resp \u003d self.post(\u0027/auth/tokens\u0027, body\u003dauth_data)\n        auth_data \u003d _build_authentication_request(\n            token\u003dresp.getheader(\u0027X-Subject-Token\u0027),\n            trust_id\u003dtrust[\u0027id\u0027])\n        r \u003d self.post(\u0027/auth/tokens\u0027, body\u003dauth_data)","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"55bad3dce77cf2328effa149b6b4f1fda79bed7d","unresolved":false,"context_lines":[{"line_number":679,"context_line":""},{"line_number":680,"context_line":"        auth_data \u003d _build_authentication_request("},{"line_number":681,"context_line":"            user_id\u003dself.trustee_user[\u0027id\u0027],"},{"line_number":682,"context_line":"            password\u003dself.trustee_user[\u0027password\u0027],"},{"line_number":683,"context_line":"            trust_id\u003dtrust[\u0027id\u0027])"},{"line_number":684,"context_line":"        self.post(\u0027/auth/tokens\u0027, body\u003dauth_data, expected_status\u003d401)"},{"line_number":685,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FMA%3D","line":682,"in_reply_to":"AAAANH%2F%2F%2Fng%3D","updated":"2013-02-28 14:04:33.000000000","message":"Can we file a bug on that and fix it before grizzly?","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"36824261f0218e86a729edbc4d009618163f0c4e","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":688,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":689,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":690,"context_line":"            project_id\u003dself.project_id,"},{"line_number":691,"context_line":"            expires\u003ddict(minutes\u003d1),"},{"line_number":692,"context_line":"            role_ids\u003d[self.role_id])"},{"line_number":693,"context_line":"        del ref[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FnI%3D","line":690,"updated":"2013-02-28 03:14:31.000000000","message":"although it is the default, add impersonation\u003dFalse here do document it.","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"55bad3dce77cf2328effa149b6b4f1fda79bed7d","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        ref \u003d self.new_trust_ref("},{"line_number":688,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":689,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":690,"context_line":"            project_id\u003dself.project_id,"},{"line_number":691,"context_line":"            expires\u003ddict(minutes\u003d1),"},{"line_number":692,"context_line":"            role_ids\u003d[self.role_id])"},{"line_number":693,"context_line":"        del ref[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FN4%3D","line":690,"in_reply_to":"AAAANH%2F%2F%2FnI%3D","updated":"2013-02-28 14:04:33.000000000","message":"+1","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"36824261f0218e86a729edbc4d009618163f0c4e","unresolved":false,"context_lines":[{"line_number":700,"context_line":"            password\u003dself.trustee_user[\u0027password\u0027],"},{"line_number":701,"context_line":"            trust_id\u003dtrust[\u0027id\u0027])"},{"line_number":702,"context_line":"        r \u003d self.post(\u0027/auth/tokens\u0027, body\u003dauth_data)"},{"line_number":703,"context_line":"        self.assertValidProjectTrustScopedTokenResponse(r)"},{"line_number":704,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027user\u0027][\u0027id\u0027],"},{"line_number":705,"context_line":"                         self.trustee_user[\u0027id\u0027])"},{"line_number":706,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027user\u0027][\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FnQ%3D","line":703,"updated":"2013-02-28 03:14:31.000000000","message":"This function doesn\u0027t exist","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"55bad3dce77cf2328effa149b6b4f1fda79bed7d","unresolved":false,"context_lines":[{"line_number":700,"context_line":"            password\u003dself.trustee_user[\u0027password\u0027],"},{"line_number":701,"context_line":"            trust_id\u003dtrust[\u0027id\u0027])"},{"line_number":702,"context_line":"        r \u003d self.post(\u0027/auth/tokens\u0027, body\u003dauth_data)"},{"line_number":703,"context_line":"        self.assertValidProjectTrustScopedTokenResponse(r)"},{"line_number":704,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027user\u0027][\u0027id\u0027],"},{"line_number":705,"context_line":"                         self.trustee_user[\u0027id\u0027])"},{"line_number":706,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027user\u0027][\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FMI%3D","line":703,"in_reply_to":"AAAANH%2F%2F%2FnQ%3D","updated":"2013-02-28 14:04:33.000000000","message":"Done","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"36824261f0218e86a729edbc4d009618163f0c4e","unresolved":false,"context_lines":[{"line_number":709,"context_line":"                         self.domain[\u0027id\u0027])"},{"line_number":710,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027user\u0027][\u0027domain\u0027][\u0027name\u0027],"},{"line_number":711,"context_line":"                         self.domain[\u0027name\u0027])"},{"line_number":712,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027id\u0027], self.project[\u0027id\u0027])"},{"line_number":713,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027name\u0027],"},{"line_number":714,"context_line":"                         self.project[\u0027name\u0027])"},{"line_number":715,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FnY%3D","line":712,"updated":"2013-02-28 03:14:31.000000000","message":"These are failing and I don\u0027t know if it is the existing token code or if mine is doing something wrong.","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"55bad3dce77cf2328effa149b6b4f1fda79bed7d","unresolved":false,"context_lines":[{"line_number":709,"context_line":"                         self.domain[\u0027id\u0027])"},{"line_number":710,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027user\u0027][\u0027domain\u0027][\u0027name\u0027],"},{"line_number":711,"context_line":"                         self.domain[\u0027name\u0027])"},{"line_number":712,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027id\u0027], self.project[\u0027id\u0027])"},{"line_number":713,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027name\u0027],"},{"line_number":714,"context_line":"                         self.project[\u0027name\u0027])"},{"line_number":715,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FN0%3D","line":712,"in_reply_to":"AAAANH%2F%2F%2FnY%3D","updated":"2013-02-28 14:04:33.000000000","message":"project is not being set correctly by token_factory?","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"36824261f0218e86a729edbc4d009618163f0c4e","unresolved":false,"context_lines":[{"line_number":718,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":719,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":720,"context_line":"            project_id\u003dself.project_id,"},{"line_number":721,"context_line":"            expires\u003ddict(minutes\u003d1),"},{"line_number":722,"context_line":"            role_ids\u003d[self.role_id])"},{"line_number":723,"context_line":"        del ref[\u0027id\u0027]"},{"line_number":724,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FnM%3D","line":721,"updated":"2013-02-28 03:14:31.000000000","message":"add\nimpersonation\u003dTrue here.","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"55bad3dce77cf2328effa149b6b4f1fda79bed7d","unresolved":false,"context_lines":[{"line_number":718,"context_line":"            trustor_user_id\u003dself.user_id,"},{"line_number":719,"context_line":"            trustee_user_id\u003dself.trustee_user_id,"},{"line_number":720,"context_line":"            project_id\u003dself.project_id,"},{"line_number":721,"context_line":"            expires\u003ddict(minutes\u003d1),"},{"line_number":722,"context_line":"            role_ids\u003d[self.role_id])"},{"line_number":723,"context_line":"        del ref[\u0027id\u0027]"},{"line_number":724,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F%2FME%3D","line":721,"in_reply_to":"AAAANH%2F%2F%2FnM%3D","updated":"2013-02-28 14:04:33.000000000","message":"Done","commit_id":"cdbdab98f5e1ce0e2998b69a7b37672d470176ef"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"07198b4388189c368327fd37f9795e4d9cd12b75","unresolved":false,"context_lines":[{"line_number":746,"context_line":"                         self.domain[\u0027id\u0027])"},{"line_number":747,"context_line":"        self.assertEqual(r.body[\u0027token\u0027][\u0027user\u0027][\u0027domain\u0027][\u0027name\u0027],"},{"line_number":748,"context_line":"                         self.domain[\u0027name\u0027])"},{"line_number":749,"context_line":"#        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027id\u0027], self.project[\u0027id\u0027])"},{"line_number":750,"context_line":"#        self.assertEqual(r.body[\u0027token\u0027][\u0027project\u0027][\u0027name\u0027],"},{"line_number":751,"context_line":"#                         self.project[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAANH%2F%2F%2Bz4%3D","line":749,"updated":"2013-02-28 18:02:39.000000000","message":"Need to uncomment these.","commit_id":"31fa81f1fd20b70222b8d8926b66189dcf0441f7"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c7b8c96ee8d29b5c7f5f9da3dc0bcbd91b4afdb2","unresolved":false,"context_lines":[{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        self.get(\u0027/trusts/%(trust_id)s\u0027 % {"},{"line_number":777,"context_line":"            \u0027trust_id\u0027: trust[\u0027id\u0027]},"},{"line_number":778,"context_line":"            expected_status\u003d404)"},{"line_number":779,"context_line":""},{"line_number":780,"context_line":"        auth_data \u003d _build_authentication_request("},{"line_number":781,"context_line":"            user_id\u003dself.trustee_user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAN3%2F%2F%2BYU%3D","line":778,"updated":"2013-03-04 21:35:22.000000000","message":"this is the same call twice in a row -- should one be a HEAD or something?","commit_id":"9412f41714657e6f44c9993d0de3ac3cb46d6941"}]}
