)]}'
{"keystone/tests/test_v3_auth.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"50e0317397e8b49adae6f8a9953146a758c94f66","unresolved":false,"context_lines":[{"line_number":2763,"context_line":"                      body\u003d{\u0027trust\u0027: ref},"},{"line_number":2764,"context_line":"                      token\u003dtrust_token)"},{"line_number":2765,"context_line":"        trust \u003d self.assertValidTrustResponse(r)"},{"line_number":2766,"context_line":"        self._get_trust_token(trust)"},{"line_number":2767,"context_line":""},{"line_number":2768,"context_line":"    def test_redelegate_new_role_fails(self):"},{"line_number":2769,"context_line":"        r \u003d self.post(\u0027/OS-TRUST/trusts\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_1ae8a90f","line":2766,"updated":"2015-02-02 18:29:09.000000000","message":"There should also be a test that shows what happens when there\u0027s no role with the name.","commit_id":"10bc16675b0d287e79f8862eb3be647a4c2ae358"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"8793b46ddc8b92bfd4805e8793c351788dcb427a","unresolved":false,"context_lines":[{"line_number":2763,"context_line":"                      body\u003d{\u0027trust\u0027: ref},"},{"line_number":2764,"context_line":"                      token\u003dtrust_token)"},{"line_number":2765,"context_line":"        trust \u003d self.assertValidTrustResponse(r)"},{"line_number":2766,"context_line":"        self._get_trust_token(trust)"},{"line_number":2767,"context_line":""},{"line_number":2768,"context_line":"    def test_redelegate_new_role_fails(self):"},{"line_number":2769,"context_line":"        r \u003d self.post(\u0027/OS-TRUST/trusts\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_7ac0c5e0","line":2766,"in_reply_to":"da86d52c_1ae8a90f","updated":"2015-02-02 18:40:34.000000000","message":"I thought TestTrustAuth.test_create_trust_role_name_404 is enough, do we need to repeat it for the redelegation case?","commit_id":"10bc16675b0d287e79f8862eb3be647a4c2ae358"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"954d6bb22de5d006cb79f7d3bd9f14244f48a3af","unresolved":false,"context_lines":[{"line_number":2831,"context_line":"    def test_redelegate_with_role_by_name(self):"},{"line_number":2832,"context_line":"        # For role by name testing"},{"line_number":2833,"context_line":"        ref \u003d self.redelegated_trust_ref"},{"line_number":2834,"context_line":"        ref[\u0027roles\u0027] \u003d [{\u0027name\u0027: self.role[\u0027name\u0027]}]"},{"line_number":2835,"context_line":"        r \u003d self.post(\u0027/OS-TRUST/trusts\u0027,"},{"line_number":2836,"context_line":"                      body\u003d{\u0027trust\u0027: ref})"},{"line_number":2837,"context_line":"        trust \u003d self.assertValidTrustResponse(r)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_3fc47b5e","line":2834,"updated":"2015-02-23 02:03:50.000000000","message":"new_trust_ref already understands how to create a trust_ref with role_names, so the code should be changed so that the trust ref is created correctly to begin with rather than overriding it here.","commit_id":"ea750dfa71292bcbef9dabcdfb51244c779d56b5"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"5933ec691ea3acf356f333f4b20075598e80133c","unresolved":false,"context_lines":[{"line_number":2831,"context_line":"    def test_redelegate_with_role_by_name(self):"},{"line_number":2832,"context_line":"        # For role by name testing"},{"line_number":2833,"context_line":"        ref \u003d self.redelegated_trust_ref"},{"line_number":2834,"context_line":"        ref[\u0027roles\u0027] \u003d [{\u0027name\u0027: self.role[\u0027name\u0027]}]"},{"line_number":2835,"context_line":"        r \u003d self.post(\u0027/OS-TRUST/trusts\u0027,"},{"line_number":2836,"context_line":"                      body\u003d{\u0027trust\u0027: ref})"},{"line_number":2837,"context_line":"        trust \u003d self.assertValidTrustResponse(r)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_2ccc1b6a","line":2834,"in_reply_to":"ba7be1f8_3fc47b5e","updated":"2015-02-24 13:55:48.000000000","message":"Done","commit_id":"ea750dfa71292bcbef9dabcdfb51244c779d56b5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"954d6bb22de5d006cb79f7d3bd9f14244f48a3af","unresolved":false,"context_lines":[{"line_number":2838,"context_line":"        trust_token \u003d self._get_trust_token(trust)"},{"line_number":2839,"context_line":"        # Chain second trust with roles subset"},{"line_number":2840,"context_line":"        ref \u003d self.chained_trust_ref"},{"line_number":2841,"context_line":"        ref[\u0027roles\u0027] \u003d [{\u0027name\u0027: self.role[\u0027name\u0027]}]"},{"line_number":2842,"context_line":"        r \u003d self.post(\u0027/OS-TRUST/trusts\u0027,"},{"line_number":2843,"context_line":"                      body\u003d{\u0027trust\u0027: ref},"},{"line_number":2844,"context_line":"                      token\u003dtrust_token)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_df951f41","line":2841,"updated":"2015-02-23 02:03:50.000000000","message":"similar comment here - create the chained trust ref correctly to begin with rather than fixing it up.","commit_id":"ea750dfa71292bcbef9dabcdfb51244c779d56b5"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"5933ec691ea3acf356f333f4b20075598e80133c","unresolved":false,"context_lines":[{"line_number":2838,"context_line":"        trust_token \u003d self._get_trust_token(trust)"},{"line_number":2839,"context_line":"        # Chain second trust with roles subset"},{"line_number":2840,"context_line":"        ref \u003d self.chained_trust_ref"},{"line_number":2841,"context_line":"        ref[\u0027roles\u0027] \u003d [{\u0027name\u0027: self.role[\u0027name\u0027]}]"},{"line_number":2842,"context_line":"        r \u003d self.post(\u0027/OS-TRUST/trusts\u0027,"},{"line_number":2843,"context_line":"                      body\u003d{\u0027trust\u0027: ref},"},{"line_number":2844,"context_line":"                      token\u003dtrust_token)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_4cc94f58","line":2841,"in_reply_to":"ba7be1f8_df951f41","updated":"2015-02-24 13:55:48.000000000","message":"Done","commit_id":"ea750dfa71292bcbef9dabcdfb51244c779d56b5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47c14044e0c5c767d6030aa1d083096c0b100e88","unresolved":false,"context_lines":[{"line_number":2854,"context_line":"                      body\u003d{\u0027trust\u0027: ref},"},{"line_number":2855,"context_line":"                      token\u003dtrust_token)"},{"line_number":2856,"context_line":"        trust \u003d self.assertValidTrustResponse(r)"},{"line_number":2857,"context_line":"        self._get_trust_token(trust)"},{"line_number":2858,"context_line":""},{"line_number":2859,"context_line":"    def test_redelegate_new_role_fails(self):"},{"line_number":2860,"context_line":"        r \u003d self.post(\u0027/OS-TRUST/trusts\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_c71ea66f","line":2857,"updated":"2015-02-26 01:01:32.000000000","message":"what is this line doing here? Add a comment.","commit_id":"2c5696bf45651ff7dfc65914a152c15b189933b3"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f137dde7f5293f7c561ce03002ad66160830d030","unresolved":false,"context_lines":[{"line_number":2854,"context_line":"                      body\u003d{\u0027trust\u0027: ref},"},{"line_number":2855,"context_line":"                      token\u003dtrust_token)"},{"line_number":2856,"context_line":"        trust \u003d self.assertValidTrustResponse(r)"},{"line_number":2857,"context_line":"        self._get_trust_token(trust)"},{"line_number":2858,"context_line":""},{"line_number":2859,"context_line":"    def test_redelegate_new_role_fails(self):"},{"line_number":2860,"context_line":"        r \u003d self.post(\u0027/OS-TRUST/trusts\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_63524768","line":2857,"in_reply_to":"ba7be1f8_c71ea66f","updated":"2015-02-26 06:00:50.000000000","message":"Done","commit_id":"2c5696bf45651ff7dfc65914a152c15b189933b3"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"c01b4a475cf259202db36351d5a242fd9964b9f1","unresolved":false,"context_lines":[{"line_number":2854,"context_line":"                      body\u003d{\u0027trust\u0027: ref},"},{"line_number":2855,"context_line":"                      token\u003dtrust_token)"},{"line_number":2856,"context_line":"        trust \u003d self.assertValidTrustResponse(r)"},{"line_number":2857,"context_line":"        self._get_trust_token(trust)"},{"line_number":2858,"context_line":""},{"line_number":2859,"context_line":"    def test_redelegate_new_role_fails(self):"},{"line_number":2860,"context_line":"        r \u003d self.post(\u0027/OS-TRUST/trusts\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_e30b97d3","line":2857,"in_reply_to":"ba7be1f8_c71ea66f","updated":"2015-02-26 05:34:10.000000000","message":"This could probably use a comment, but I assume it is ensuring we can actually get a token with this trust (same as on line 2844). This case we just aren\u0027t re-using the token.","commit_id":"2c5696bf45651ff7dfc65914a152c15b189933b3"}],"keystone/trust/controllers.py":[{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"5cd943081405a2c39ffae12b44076f99b34c90fe","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        all_roles \u003d self.role_api.list_roles()"},{"line_number":157,"context_line":"        # Normalise roles"},{"line_number":158,"context_line":"        clean_roles \u003d self._clean_role_list(context, trust, all_roles)"},{"line_number":159,"context_line":"        trust[\u0027roles\u0027] \u003d clean_roles"},{"line_number":160,"context_line":"        self._require_trustor_has_role_in_project(trust)"},{"line_number":161,"context_line":"        trust[\u0027expires_at\u0027] \u003d self._parse_expiration_date("},{"line_number":162,"context_line":"            trust.get(\u0027expires_at\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_8778a22c","line":159,"updated":"2015-01-23 02:52:21.000000000","message":"I am not sure if we should change roles here.","commit_id":"3e678b137eae8abd0bcb9c0368c984ac2f7e8405"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"bac096db49f22f389b1eb28a02c35d930d5a79b5","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        all_roles \u003d self.role_api.list_roles()"},{"line_number":157,"context_line":"        # Normalise roles"},{"line_number":158,"context_line":"        clean_roles \u003d self._clean_role_list(context, trust, all_roles)"},{"line_number":159,"context_line":"        trust[\u0027roles\u0027] \u003d clean_roles"},{"line_number":160,"context_line":"        self._require_trustor_has_role_in_project(trust)"},{"line_number":161,"context_line":"        trust[\u0027expires_at\u0027] \u003d self._parse_expiration_date("},{"line_number":162,"context_line":"            trust.get(\u0027expires_at\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa81d914_7140cea5","line":159,"in_reply_to":"1a930d6b_8778a22c","updated":"2015-01-29 12:31:51.000000000","message":"Agreed. Considering you comment in Manager all of this role stuff must be there.","commit_id":"3e678b137eae8abd0bcb9c0368c984ac2f7e8405"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"6f9b5b8ccdc6d79e43932c1a20ab99c9521e7a70","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        all_roles \u003d self.role_api.list_roles()"},{"line_number":157,"context_line":"        # Normalise roles"},{"line_number":158,"context_line":"        clean_roles \u003d self._clean_role_list(context, trust, all_roles)"},{"line_number":159,"context_line":"        trust[\u0027roles\u0027] \u003d clean_roles"},{"line_number":160,"context_line":"        self._require_trustor_has_role_in_project(trust)"},{"line_number":161,"context_line":"        trust[\u0027expires_at\u0027] \u003d self._parse_expiration_date("},{"line_number":162,"context_line":"            trust.get(\u0027expires_at\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa81d914_683a9b37","line":159,"in_reply_to":"fa81d914_7140cea5","updated":"2015-01-29 14:01:49.000000000","message":"Update: self._require_trustor_has_role_in_project needs trust[\u0027roles\u0027] to be with \u0027id\u0027 fields\u0027","commit_id":"3e678b137eae8abd0bcb9c0368c984ac2f7e8405"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47c14044e0c5c767d6030aa1d083096c0b100e88","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            \u0027self\u0027: (self.base_url(context) + \"/%s/roles\" % trust[\u0027id\u0027]),"},{"line_number":103,"context_line":"            \u0027next\u0027: None,"},{"line_number":104,"context_line":"            \u0027previous\u0027: None}"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _clean_role_list(self, context, trust, all_roles):"},{"line_number":107,"context_line":"        trust_roles \u003d []"},{"line_number":108,"context_line":"        all_role_names \u003d dict((r[\u0027name\u0027], r) for r in all_roles)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_99c7b263","line":105,"updated":"2015-02-26 01:01:32.000000000","message":"suggest change the name to \"_normalize_trust_roles\" or just \"_normalize_roles\"\n\nAlso, remove context argument since it\u0027s not used.","commit_id":"2c5696bf45651ff7dfc65914a152c15b189933b3"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f137dde7f5293f7c561ce03002ad66160830d030","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            \u0027self\u0027: (self.base_url(context) + \"/%s/roles\" % trust[\u0027id\u0027]),"},{"line_number":103,"context_line":"            \u0027next\u0027: None,"},{"line_number":104,"context_line":"            \u0027previous\u0027: None}"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _clean_role_list(self, context, trust, all_roles):"},{"line_number":107,"context_line":"        trust_roles \u003d []"},{"line_number":108,"context_line":"        all_role_names \u003d dict((r[\u0027name\u0027], r) for r in all_roles)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_035a6b82","line":105,"in_reply_to":"ba7be1f8_99c7b263","updated":"2015-02-26 06:00:50.000000000","message":"Done","commit_id":"2c5696bf45651ff7dfc65914a152c15b189933b3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47c14044e0c5c767d6030aa1d083096c0b100e88","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self._require_user_is_trustor(context, trust)"},{"line_number":155,"context_line":"        self._require_trustee_exists(trust[\u0027trustee_user_id\u0027])"},{"line_number":156,"context_line":"        all_roles \u003d self.role_api.list_roles()"},{"line_number":157,"context_line":"        # Normalise roles"},{"line_number":158,"context_line":"        clean_roles \u003d self._clean_role_list(context, trust, all_roles)"},{"line_number":159,"context_line":"        trust[\u0027roles\u0027] \u003d clean_roles"},{"line_number":160,"context_line":"        self._require_trustor_has_role_in_project(trust)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_395a462a","line":157,"updated":"2015-02-26 01:01:32.000000000","message":"(nit) change \"Normalise\" to \"Normalize\"","commit_id":"2c5696bf45651ff7dfc65914a152c15b189933b3"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f137dde7f5293f7c561ce03002ad66160830d030","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self._require_user_is_trustor(context, trust)"},{"line_number":155,"context_line":"        self._require_trustee_exists(trust[\u0027trustee_user_id\u0027])"},{"line_number":156,"context_line":"        all_roles \u003d self.role_api.list_roles()"},{"line_number":157,"context_line":"        # Normalise roles"},{"line_number":158,"context_line":"        clean_roles \u003d self._clean_role_list(context, trust, all_roles)"},{"line_number":159,"context_line":"        trust[\u0027roles\u0027] \u003d clean_roles"},{"line_number":160,"context_line":"        self._require_trustor_has_role_in_project(trust)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_235daf79","line":157,"in_reply_to":"ba7be1f8_395a462a","updated":"2015-02-26 06:00:50.000000000","message":"Done","commit_id":"2c5696bf45651ff7dfc65914a152c15b189933b3"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"32264040c06e2d7485b3b39d8b8f14eaddb35a38","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        all_roles \u003d self.role_api.list_roles()"},{"line_number":157,"context_line":"        # Normalise roles"},{"line_number":158,"context_line":"        clean_roles \u003d self._clean_role_list(context, trust, all_roles)"},{"line_number":159,"context_line":"        trust[\u0027roles\u0027] \u003d clean_roles"},{"line_number":160,"context_line":"        self._require_trustor_has_role_in_project(trust)"},{"line_number":161,"context_line":"        trust[\u0027expires_at\u0027] \u003d self._parse_expiration_date("},{"line_number":162,"context_line":"            trust.get(\u0027expires_at\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_159d9359","line":159,"updated":"2015-02-24 15:40:19.000000000","message":"Note to other reviewers:  the clean_roles have been checked against the trust, so this is safe.","commit_id":"2c5696bf45651ff7dfc65914a152c15b189933b3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47c14044e0c5c767d6030aa1d083096c0b100e88","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        all_roles \u003d self.role_api.list_roles()"},{"line_number":157,"context_line":"        # Normalise roles"},{"line_number":158,"context_line":"        clean_roles \u003d self._clean_role_list(context, trust, all_roles)"},{"line_number":159,"context_line":"        trust[\u0027roles\u0027] \u003d clean_roles"},{"line_number":160,"context_line":"        self._require_trustor_has_role_in_project(trust)"},{"line_number":161,"context_line":"        trust[\u0027expires_at\u0027] \u003d self._parse_expiration_date("},{"line_number":162,"context_line":"            trust.get(\u0027expires_at\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_d9d68a27","line":159,"updated":"2015-02-26 01:01:32.000000000","message":"suggest change _clean_role_list to mutate trust rather than having it return a value which is then just stuck into trust.","commit_id":"2c5696bf45651ff7dfc65914a152c15b189933b3"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f137dde7f5293f7c561ce03002ad66160830d030","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        all_roles \u003d self.role_api.list_roles()"},{"line_number":157,"context_line":"        # Normalise roles"},{"line_number":158,"context_line":"        clean_roles \u003d self._clean_role_list(context, trust, all_roles)"},{"line_number":159,"context_line":"        trust[\u0027roles\u0027] \u003d clean_roles"},{"line_number":160,"context_line":"        self._require_trustor_has_role_in_project(trust)"},{"line_number":161,"context_line":"        trust[\u0027expires_at\u0027] \u003d self._parse_expiration_date("},{"line_number":162,"context_line":"            trust.get(\u0027expires_at\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_43570358","line":159,"in_reply_to":"ba7be1f8_d9d68a27","updated":"2015-02-26 06:00:50.000000000","message":"Done","commit_id":"2c5696bf45651ff7dfc65914a152c15b189933b3"}],"keystone/trust/core.py":[{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"5cd943081405a2c39ffae12b44076f99b34c90fe","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            key \u003d \u0027id\u0027 if \u0027id\u0027 in role else \u0027name\u0027"},{"line_number":89,"context_line":"            if role[key] not in p_roles[key]:"},{"line_number":90,"context_line":"                raise exception.Forbidden("},{"line_number":91,"context_line":"                    _(\u0027Some of requested roles are not in redelegated trust\u0027))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def get_trust_pedigree(self, trust_id):"},{"line_number":94,"context_line":"        trust \u003d self.driver.get_trust(trust_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_87918254","line":91,"updated":"2015-01-23 02:52:21.000000000","message":"Roles in trust are clean_roles in controller layer and clean_roles only contain \u0027id\u0027 attribute. So, we don\u0027t need to check \u0027name\u0027. And I think the reason of this bug is that we didn\u0027t pass clean_roles into this method before and the roles in trust are not cleaned.","commit_id":"3e678b137eae8abd0bcb9c0368c984ac2f7e8405"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"954d6bb22de5d006cb79f7d3bd9f14244f48a3af","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@dependency.requires(\u0027identity_api\u0027, \u0027role_api\u0027)"},{"line_number":36,"context_line":"@dependency.provider(\u0027trust_api\u0027)"},{"line_number":37,"context_line":"class Manager(manager.Manager):"},{"line_number":38,"context_line":"    \"\"\"Default pivot point for the Trust backend."}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_9fb1e7e3","line":35,"updated":"2015-02-23 02:03:50.000000000","message":"role_api isn\u0027t used.","commit_id":"ea750dfa71292bcbef9dabcdfb51244c779d56b5"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"5933ec691ea3acf356f333f4b20075598e80133c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@dependency.requires(\u0027identity_api\u0027, \u0027role_api\u0027)"},{"line_number":36,"context_line":"@dependency.provider(\u0027trust_api\u0027)"},{"line_number":37,"context_line":"class Manager(manager.Manager):"},{"line_number":38,"context_line":"    \"\"\"Default pivot point for the Trust backend."}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_cce45fe3","line":35,"in_reply_to":"ba7be1f8_9fb1e7e3","updated":"2015-02-24 13:55:48.000000000","message":"Done","commit_id":"ea750dfa71292bcbef9dabcdfb51244c779d56b5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"954d6bb22de5d006cb79f7d3bd9f14244f48a3af","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # trust roles is a subset of roles of the redelegated trust"},{"line_number":83,"context_line":"        # roles identified by \u0027id\u0027 are expected in both trusts"},{"line_number":84,"context_line":"        p_roles \u003d set(r[\u0027id\u0027] for r in redelegated_trust[\u0027roles\u0027])"},{"line_number":85,"context_line":"        for role in trust[\u0027roles\u0027]:"},{"line_number":86,"context_line":"            if role[\u0027id\u0027] not in p_roles:"},{"line_number":87,"context_line":"                raise exception.Forbidden("}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_1faed785","line":84,"updated":"2015-02-23 02:03:50.000000000","message":"revert the change to this line since it\u0027s unnecessary.","commit_id":"ea750dfa71292bcbef9dabcdfb51244c779d56b5"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"5933ec691ea3acf356f333f4b20075598e80133c","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # trust roles is a subset of roles of the redelegated trust"},{"line_number":83,"context_line":"        # roles identified by \u0027id\u0027 are expected in both trusts"},{"line_number":84,"context_line":"        p_roles \u003d set(r[\u0027id\u0027] for r in redelegated_trust[\u0027roles\u0027])"},{"line_number":85,"context_line":"        for role in trust[\u0027roles\u0027]:"},{"line_number":86,"context_line":"            if role[\u0027id\u0027] not in p_roles:"},{"line_number":87,"context_line":"                raise exception.Forbidden("}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_ece5a3dc","line":84,"in_reply_to":"ba7be1f8_1faed785","updated":"2015-02-24 13:55:48.000000000","message":"Done","commit_id":"ea750dfa71292bcbef9dabcdfb51244c779d56b5"}]}
