)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1e8980e1411ba2ab93c32e5b1efec424edc7bf89","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"With the K2K a token must be extended with a list of available"},{"line_number":10,"context_line":"service providers. Such object should be added only if federation"},{"line_number":11,"context_line":"extension is enabled and list of accessible service providers is"},{"line_number":12,"context_line":"non-empty."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba7be1f8_7a729a4a","line":11,"updated":"2015-02-27 15:43:28.000000000","message":"The federation extension is always enabled.","commit_id":"39ab06121b4341e09639e0a509009f5f01a2773a"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3f7256d9adf2798556c39056f46fbcaddca21101","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Populate token with service providers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"With the K2K a token must be extended with a list of available"},{"line_number":10,"context_line":"service providers. The list appears in the token only if there are enabled service providers available."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"},{"line_number":13,"context_line":"Partially-Implements: bp k2k-service-providers"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba7be1f8_bf05dd15","line":10,"updated":"2015-02-27 17:39:30.000000000","message":"nit: line length (https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure)","commit_id":"ca2f720c2261b5f52d201c00d0f5f532e5f9296a"}],"keystone/contrib/federation/backends/sql.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3f7256d9adf2798556c39056f46fbcaddca21101","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        return sp_ref.to_dict()"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def get_enabled_service_providers(self):"},{"line_number":299,"context_line":"        def service_catalog(sp):"},{"line_number":300,"context_line":"            ref \u003d {"},{"line_number":301,"context_line":"                \u0027auth_url\u0027: sp.auth_url,"},{"line_number":302,"context_line":"                \u0027id\u0027: sp.id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_8a3619e6","line":299,"updated":"2015-02-27 17:39:30.000000000","message":"this wrapping should be done in the Manager or Controller layers, but I realize this is how it is being done in the federation code.","commit_id":"ca2f720c2261b5f52d201c00d0f5f532e5f9296a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"b9254d581e5df8ce2481b383fc309e8a02f3f043","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        return sp_ref.to_dict()"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def get_enabled_service_providers(self):"},{"line_number":299,"context_line":"        def service_catalog(sp):"},{"line_number":300,"context_line":"            ref \u003d {"},{"line_number":301,"context_line":"                \u0027auth_url\u0027: sp.auth_url,"},{"line_number":302,"context_line":"                \u0027id\u0027: sp.id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_780ee233","line":299,"in_reply_to":"ba7be1f8_1f81778f","updated":"2015-03-02 14:27:33.000000000","message":"what if we leave attribute free method now, and change it whenever we introduce some endpoint/user filtering? \nAlso, I moved inner function to the Manager class and renamed to \u0027normalize()\u0027","commit_id":"ca2f720c2261b5f52d201c00d0f5f532e5f9296a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"869149348f20b284208911588c76a31e1d5c6036","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        return sp_ref.to_dict()"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def get_enabled_service_providers(self):"},{"line_number":299,"context_line":"        def service_catalog(sp):"},{"line_number":300,"context_line":"            ref \u003d {"},{"line_number":301,"context_line":"                \u0027auth_url\u0027: sp.auth_url,"},{"line_number":302,"context_line":"                \u0027id\u0027: sp.id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_1f81778f","line":299,"in_reply_to":"ba7be1f8_8a3619e6","updated":"2015-02-28 03:53:48.000000000","message":"maybe we should change list_service_providers to have an optional filter by attribute? and from the controller call that with \u0027enabled\u0027...\n\nthen maybe do the \u0027normalization\u0027 of the SPs in the controller, as rodrigo suggests","commit_id":"ca2f720c2261b5f52d201c00d0f5f532e5f9296a"}],"keystone/contrib/federation/core.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3f7256d9adf2798556c39056f46fbcaddca21101","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def get_enabled_service_providers(self):"},{"line_number":297,"context_line":"        \"\"\"List enabled service providers for Service Catalog297"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        Service Provider in a catalog contains three attributes: ``id``,"},{"line_number":300,"context_line":"        ``auth_url``, ``sp_url``."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_eae87518","line":297,"updated":"2015-02-27 17:39:30.000000000","message":"nit: 297","commit_id":"ca2f720c2261b5f52d201c00d0f5f532e5f9296a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"b9254d581e5df8ce2481b383fc309e8a02f3f043","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def get_enabled_service_providers(self):"},{"line_number":297,"context_line":"        \"\"\"List enabled service providers for Service Catalog297"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        Service Provider in a catalog contains three attributes: ``id``,"},{"line_number":300,"context_line":"        ``auth_url``, ``sp_url``."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_c250bfd6","line":297,"in_reply_to":"ba7be1f8_eae87518","updated":"2015-03-02 14:27:33.000000000","message":"Done","commit_id":"ca2f720c2261b5f52d201c00d0f5f532e5f9296a"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3f7256d9adf2798556c39056f46fbcaddca21101","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\"List enabled service providers for Service Catalog297"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        Service Provider in a catalog contains three attributes: ``id``,"},{"line_number":300,"context_line":"        ``auth_url``, ``sp_url``."},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        :returns: list of dictionaries with enabled service providers"},{"line_number":303,"context_line":"        :rtype: list of dicts"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_8ad9b985","line":300,"updated":"2015-02-27 17:39:30.000000000","message":"suggestion: give a brief explanation about these attributes","commit_id":"ca2f720c2261b5f52d201c00d0f5f532e5f9296a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"b9254d581e5df8ce2481b383fc309e8a02f3f043","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\"List enabled service providers for Service Catalog297"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        Service Provider in a catalog contains three attributes: ``id``,"},{"line_number":300,"context_line":"        ``auth_url``, ``sp_url``."},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        :returns: list of dictionaries with enabled service providers"},{"line_number":303,"context_line":"        :rtype: list of dicts"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_62db93ed","line":300,"in_reply_to":"ba7be1f8_8ad9b985","updated":"2015-03-02 14:27:33.000000000","message":"done.","commit_id":"ca2f720c2261b5f52d201c00d0f5f532e5f9296a"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"79d810af8adcb72a1e09ea785987bf19bbbaf16a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            ref \u003d {"},{"line_number":78,"context_line":"                \u0027auth_url\u0027: sp.auth_url,"},{"line_number":79,"context_line":"                \u0027id\u0027: sp.id,"},{"line_number":80,"context_line":"                \u0027sp_url\u0027: sp.sp_url"},{"line_number":81,"context_line":"            }"},{"line_number":82,"context_line":"            return ref"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_b853e915","line":80,"updated":"2015-03-02 19:30:21.000000000","message":"no \u0027links\u0027?","commit_id":"0d9b3e1615a30116955d5b27e9e1cfa02db2de1d"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"af25e94ef6dcc5b28434e831c4a8659960d52225","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            ref \u003d {"},{"line_number":78,"context_line":"                \u0027auth_url\u0027: sp.auth_url,"},{"line_number":79,"context_line":"                \u0027id\u0027: sp.id,"},{"line_number":80,"context_line":"                \u0027sp_url\u0027: sp.sp_url"},{"line_number":81,"context_line":"            }"},{"line_number":82,"context_line":"            return ref"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_f509df84","line":80,"in_reply_to":"ba7be1f8_b853e915","updated":"2015-03-03 00:11:42.000000000","message":"I mean... I *guess* a link to the \"request the saml from this place\" would be appropriate. But links tend to not go in the token structure.","commit_id":"0d9b3e1615a30116955d5b27e9e1cfa02db2de1d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c076837cda625abe95dc264b3a01a1af8f0ecfb8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            ref \u003d {"},{"line_number":78,"context_line":"                \u0027auth_url\u0027: sp.auth_url,"},{"line_number":79,"context_line":"                \u0027id\u0027: sp.id,"},{"line_number":80,"context_line":"                \u0027sp_url\u0027: sp.sp_url"},{"line_number":81,"context_line":"            }"},{"line_number":82,"context_line":"            return ref"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_cccd3f33","line":80,"in_reply_to":"ba7be1f8_b853e915","updated":"2015-03-03 00:28:51.000000000","message":"no, definitely not, we never include links in the token. we want the minimum amount of data.","commit_id":"0d9b3e1615a30116955d5b27e9e1cfa02db2de1d"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a9f174ce9b4d497ea6790fb33a454a5af5c2bd14","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            ref \u003d {"},{"line_number":78,"context_line":"                \u0027auth_url\u0027: sp.auth_url,"},{"line_number":79,"context_line":"                \u0027id\u0027: sp.id,"},{"line_number":80,"context_line":"                \u0027sp_url\u0027: sp.sp_url"},{"line_number":81,"context_line":"            }"},{"line_number":82,"context_line":"            return ref"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_f68faeca","line":80,"in_reply_to":"ba7be1f8_cccd3f33","updated":"2015-03-04 08:37:54.000000000","message":"@Guang, all : no links, no \u0027enabled\u0027, no \u0027description\u0027 - keep in the token only realy necessary parameters. This is not for managing service providers.","commit_id":"0d9b3e1615a30116955d5b27e9e1cfa02db2de1d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3efa8243eb68b8a6861b51bb85633f3f1958e3c3","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            ref \u003d {"},{"line_number":78,"context_line":"                \u0027auth_url\u0027: sp.auth_url,"},{"line_number":79,"context_line":"                \u0027id\u0027: sp.id,"},{"line_number":80,"context_line":"                \u0027sp_url\u0027: sp.sp_url"},{"line_number":81,"context_line":"            }"},{"line_number":82,"context_line":"            return ref"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_f8dab649","line":80,"in_reply_to":"ba7be1f8_f509df84","updated":"2015-03-03 00:32:21.000000000","message":"we won\u0027t run into confusion with \u0027sp_url\u0027 meaning \u0027service_provider_url\u0027 will we?","commit_id":"0d9b3e1615a30116955d5b27e9e1cfa02db2de1d"}],"keystone/tests/unit/test_v3_federation.py":[{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a9f174ce9b4d497ea6790fb33a454a5af5c2bd14","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9a80dd14_b6fe1637","updated":"2015-03-04 08:37:54.000000000","message":"Thanks, I will add a followup patch, so we  have readable and clean docstrings.","commit_id":"0d9b3e1615a30116955d5b27e9e1cfa02db2de1d"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"79d810af8adcb72a1e09ea785987bf19bbbaf16a","unresolved":false,"context_lines":[{"line_number":2911,"context_line":""},{"line_number":2912,"context_line":""},{"line_number":2913,"context_line":"class K2KServiceCatalogTests(FederationTests):"},{"line_number":2914,"context_line":"    SP1 \u003d \u0027ALPHA\u0027"},{"line_number":2915,"context_line":"    SP2 \u003d \u0027BETA\u0027"},{"line_number":2916,"context_line":"    SP3 \u003d \u0027GAMMA\u0027"},{"line_number":2917,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_d80c1def","line":2914,"updated":"2015-03-02 19:30:21.000000000","message":"/SP1/ALPHA_SP/\n\nmuch easier to read. Do the same for the others.","commit_id":"0d9b3e1615a30116955d5b27e9e1cfa02db2de1d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c076837cda625abe95dc264b3a01a1af8f0ecfb8","unresolved":false,"context_lines":[{"line_number":2916,"context_line":"    SP3 \u003d \u0027GAMMA\u0027"},{"line_number":2917,"context_line":""},{"line_number":2918,"context_line":"    def load_extra_backends(self):"},{"line_number":2919,"context_line":"        ref \u003d {\u0027federation_api\u0027: federation.Manager()}"},{"line_number":2920,"context_line":"        return ref"},{"line_number":2921,"context_line":""},{"line_number":2922,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_38736e81","line":2919,"updated":"2015-03-03 00:28:51.000000000","message":"this shouldn\u0027t be needed, the manager is already loaded","commit_id":"0d9b3e1615a30116955d5b27e9e1cfa02db2de1d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3efa8243eb68b8a6861b51bb85633f3f1958e3c3","unresolved":false,"context_lines":[{"line_number":2964,"context_line":"            self.assertDictEqual(ref_entity, entity)"},{"line_number":2965,"context_line":""},{"line_number":2966,"context_line":"    def test_service_providers_in_token(self):"},{"line_number":2967,"context_line":"        \"\"\"Check if sevice providers are listed in service catalog.\"\"\""},{"line_number":2968,"context_line":""},{"line_number":2969,"context_line":"        token \u003d self.token_v3_helper.get_token_data(self.user_id,"},{"line_number":2970,"context_line":"                                                    [\u0027password\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_38960e4d","line":2967,"updated":"2015-03-03 00:32:21.000000000","message":"service*","commit_id":"0d9b3e1615a30116955d5b27e9e1cfa02db2de1d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3efa8243eb68b8a6861b51bb85633f3f1958e3c3","unresolved":false,"context_lines":[{"line_number":2977,"context_line":"    def test_service_provides_in_token_disabled_sp(self):"},{"line_number":2978,"context_line":"        \"\"\"Test behaviour with disabled service providers."},{"line_number":2979,"context_line":""},{"line_number":2980,"context_line":"        They should not be listed in the service catalog."},{"line_number":2981,"context_line":""},{"line_number":2982,"context_line":"        \"\"\""},{"line_number":2983,"context_line":"        # disable service provider ALPHA"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_d88ed22d","line":2980,"updated":"2015-03-03 00:32:21.000000000","message":"s/They/Disabled service providers/","commit_id":"0d9b3e1615a30116955d5b27e9e1cfa02db2de1d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3efa8243eb68b8a6861b51bb85633f3f1958e3c3","unresolved":false,"context_lines":[{"line_number":2993,"context_line":"        self._validate_service_providers(token, ref)"},{"line_number":2994,"context_line":""},{"line_number":2995,"context_line":"    def test_no_service_providers_in_token(self):"},{"line_number":2996,"context_line":"        \"\"\"Test SC with disabled service providers"},{"line_number":2997,"context_line":""},{"line_number":2998,"context_line":"        There should be no entry ``service_providers`` in the Catalog."},{"line_number":2999,"context_line":"        Test passes providing no Attribute was raised."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_387d2e1d","line":2996,"updated":"2015-03-03 00:32:21.000000000","message":"service catalog?","commit_id":"0d9b3e1615a30116955d5b27e9e1cfa02db2de1d"}],"keystone/token/providers/common.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"869149348f20b284208911588c76a31e1d5c6036","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        # We\u0027ve probably already written these to the token"},{"line_number":366,"context_line":"        if token:"},{"line_number":367,"context_line":"            for x in (\u0027roles\u0027, \u0027user\u0027, \u0027catalog\u0027, \u0027project\u0027, \u0027domain\u0027,"},{"line_number":368,"context_line":"                      \u0027service_providers\u0027):"},{"line_number":369,"context_line":"                if x in token:"},{"line_number":370,"context_line":"                    token_data[x] \u003d token[x]"},{"line_number":371,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_5f184f84","line":368,"updated":"2015-02-28 03:53:48.000000000","message":"this will always make \u0027service_providers\u0027 in the token right? i don\u0027t think we want that, it\u0027s a dict so the user can easily check with .get()","commit_id":"ca2f720c2261b5f52d201c00d0f5f532e5f9296a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"b9254d581e5df8ce2481b383fc309e8a02f3f043","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        # We\u0027ve probably already written these to the token"},{"line_number":366,"context_line":"        if token:"},{"line_number":367,"context_line":"            for x in (\u0027roles\u0027, \u0027user\u0027, \u0027catalog\u0027, \u0027project\u0027, \u0027domain\u0027,"},{"line_number":368,"context_line":"                      \u0027service_providers\u0027):"},{"line_number":369,"context_line":"                if x in token:"},{"line_number":370,"context_line":"                    token_data[x] \u003d token[x]"},{"line_number":371,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_02d49745","line":368,"in_reply_to":"ba7be1f8_5f184f84","updated":"2015-03-02 14:27:33.000000000","message":"Done","commit_id":"ca2f720c2261b5f52d201c00d0f5f532e5f9296a"}]}
