)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"307470e5214ba34d380ddd0d160b41cbbe76962c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"manage trusted Service Providers. This patch implements"},{"line_number":11,"context_line":"CRUD API calls for that."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements blueprint: keystone-to-keystone-federation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I69673045009926365803a89a2e4b0d892d841ed6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1a930d6b_5a2f1688","line":13,"updated":"2015-01-26 18:02:43.000000000","message":"think it should points to blueprint k2k-service-providers","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"acaae5757b481243514679759e3cd14a9e7e5dea","unresolved":false,"context_lines":[{"line_number":10,"context_line":"manage trusted Service Providers. This patch implements"},{"line_number":11,"context_line":"CRUD API calls for that."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements blueprint: keystone-to-keystone-federation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I69673045009926365803a89a2e4b0d892d841ed6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1a930d6b_0b0feb88","line":13,"in_reply_to":"1a930d6b_5a2f1688","updated":"2015-01-27 11:10:32.000000000","message":"Done","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"}],"etc/policy.json":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"005572cd77cf12a877fdbd29ff286eedce53e38e","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    \"identity:create_service_provider\": \"rule:admin_required\","},{"line_number":144,"context_line":"    \"identity:list_service_providers\": \"rule:admin_required\","},{"line_number":145,"context_line":"    \"identity:get_service_providers\": \"rule:admin_required\","},{"line_number":146,"context_line":"    \"identity:update_service_provider\": \"rule:admin_required\","},{"line_number":147,"context_line":"    \"identity:delete_service_provider\": \"rule:admin_required\","},{"line_number":148,"context_line":""}],"source_content_type":"application/json","patch_set":5,"id":"baada198_840b1223","line":145,"updated":"2014-07-11 21:13:32.000000000","message":"get_service_provider*? \n\nIs this suppose to be plural?","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a2003bfcbe3c8d367cbc919ba77d5c10b4df0fc2","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    \"identity:create_service_provider\": \"rule:admin_required\","},{"line_number":144,"context_line":"    \"identity:list_service_providers\": \"rule:admin_required\","},{"line_number":145,"context_line":"    \"identity:get_service_providers\": \"rule:admin_required\","},{"line_number":146,"context_line":"    \"identity:update_service_provider\": \"rule:admin_required\","},{"line_number":147,"context_line":"    \"identity:delete_service_provider\": \"rule:admin_required\","},{"line_number":148,"context_line":""}],"source_content_type":"application/json","patch_set":5,"id":"1a930d6b_3c62543e","line":145,"in_reply_to":"baada198_840b1223","updated":"2015-01-26 14:27:43.000000000","message":"Done","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"99af303cf79ac97ba1c823e451c9c3ddddf5ce09","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    \"identity:create_service_provider\": \"rule:admin_required\","},{"line_number":144,"context_line":"    \"identity:list_service_providers\": \"rule:admin_required\","},{"line_number":145,"context_line":"    \"identity:get_service_providers\": \"rule:admin_required\","},{"line_number":146,"context_line":"    \"identity:update_service_provider\": \"rule:admin_required\","},{"line_number":147,"context_line":"    \"identity:delete_service_provider\": \"rule:admin_required\","},{"line_number":148,"context_line":""}],"source_content_type":"application/json","patch_set":5,"id":"baada198_84e952b9","line":145,"in_reply_to":"baada198_840b1223","updated":"2014-07-11 21:22:59.000000000","message":"well right, but since we already have \"identity:get_identity_providers\": we should probably keep with plurals here?","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"becf3b257f5c46c66580277909dbd1f06a1201cc","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    \"identity:create_service_provider\": \"rule:admin_required\","},{"line_number":152,"context_line":"    \"identity:list_service_providers\": \"rule:admin_required\","},{"line_number":153,"context_line":"    \"identity:get_service_providers\": \"rule:admin_required\","},{"line_number":154,"context_line":"    \"identity:update_service_provider\": \"rule:admin_required\","},{"line_number":155,"context_line":"    \"identity:delete_service_provider\": \"rule:admin_required\","},{"line_number":156,"context_line":""}],"source_content_type":"application/json","patch_set":7,"id":"1a930d6b_3ad96a22","line":153,"updated":"2015-01-26 18:29:25.000000000","message":"Is get_service_provider or get_service_providers?","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"acaae5757b481243514679759e3cd14a9e7e5dea","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    \"identity:create_service_provider\": \"rule:admin_required\","},{"line_number":152,"context_line":"    \"identity:list_service_providers\": \"rule:admin_required\","},{"line_number":153,"context_line":"    \"identity:get_service_providers\": \"rule:admin_required\","},{"line_number":154,"context_line":"    \"identity:update_service_provider\": \"rule:admin_required\","},{"line_number":155,"context_line":"    \"identity:delete_service_provider\": \"rule:admin_required\","},{"line_number":156,"context_line":""}],"source_content_type":"application/json","patch_set":7,"id":"1a930d6b_4b6bb31d","line":153,"in_reply_to":"1a930d6b_133e5928","updated":"2015-01-27 11:10:32.000000000","message":"++","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"69008dfbd4ef9d6580a03cf666fdb7dce312a639","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    \"identity:create_service_provider\": \"rule:admin_required\","},{"line_number":152,"context_line":"    \"identity:list_service_providers\": \"rule:admin_required\","},{"line_number":153,"context_line":"    \"identity:get_service_providers\": \"rule:admin_required\","},{"line_number":154,"context_line":"    \"identity:update_service_provider\": \"rule:admin_required\","},{"line_number":155,"context_line":"    \"identity:delete_service_provider\": \"rule:admin_required\","},{"line_number":156,"context_line":""}],"source_content_type":"application/json","patch_set":7,"id":"1a930d6b_133e5928","line":153,"in_reply_to":"1a930d6b_3ad96a22","updated":"2015-01-26 19:37:47.000000000","message":"should probably use \u0027get_service_provider\u0027","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"}],"etc/policy.v3cloudsample.json":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bdfe9c2ce0993e611bd0e9fb905aff72a54032ab","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    \"identity:delete_mapping\": \"rule:cloud_admin\","},{"line_number":162,"context_line":"    \"identity:update_mapping\": \"rule:cloud_admin\","},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    \"identity:create_service_provider\": \"rule:admin_required\","},{"line_number":165,"context_line":"    \"identity:list_service_providers\": \"rule:admin_required\","},{"line_number":166,"context_line":"    \"identity:get_service_providers\": \"rule:admin_required\","},{"line_number":167,"context_line":"    \"identity:update_service_provider\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":7,"id":"1a930d6b_374fcf6c","line":164,"updated":"2015-01-26 14:39:46.000000000","message":"shouldn\u0027t be \"rule:cloud_admin\" ?","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"69008dfbd4ef9d6580a03cf666fdb7dce312a639","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    \"identity:delete_mapping\": \"rule:cloud_admin\","},{"line_number":162,"context_line":"    \"identity:update_mapping\": \"rule:cloud_admin\","},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    \"identity:create_service_provider\": \"rule:admin_required\","},{"line_number":165,"context_line":"    \"identity:list_service_providers\": \"rule:admin_required\","},{"line_number":166,"context_line":"    \"identity:get_service_providers\": \"rule:admin_required\","},{"line_number":167,"context_line":"    \"identity:update_service_provider\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":7,"id":"1a930d6b_7314fd9f","line":164,"in_reply_to":"1a930d6b_374fcf6c","updated":"2015-01-26 19:37:47.000000000","message":"yes, it should be","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"acaae5757b481243514679759e3cd14a9e7e5dea","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    \"identity:delete_mapping\": \"rule:cloud_admin\","},{"line_number":162,"context_line":"    \"identity:update_mapping\": \"rule:cloud_admin\","},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    \"identity:create_service_provider\": \"rule:admin_required\","},{"line_number":165,"context_line":"    \"identity:list_service_providers\": \"rule:admin_required\","},{"line_number":166,"context_line":"    \"identity:get_service_providers\": \"rule:admin_required\","},{"line_number":167,"context_line":"    \"identity:update_service_provider\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":7,"id":"1a930d6b_6bfb0f47","line":164,"in_reply_to":"1a930d6b_7314fd9f","updated":"2015-01-27 11:10:32.000000000","message":"Done","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"}],"keystone/contrib/federation/backends/sql.py":[{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"c700580185b66ceb563341484f51ff9cd1963c75","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        d \u003d dict()"},{"line_number":103,"context_line":"        for attr in self.__class__.attributes:"},{"line_number":104,"context_line":"            d[attr] \u003d getattr(self, attr)"},{"line_number":105,"context_line":"        return d"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class Federation(core.Driver):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_14e68de8","line":105,"updated":"2015-01-14 02:31:50.000000000","message":"Now, we have four same code block line 95-105. Should we add a base object for FederationProtocolModel, IdentityProviderModel, MappingModel, ServiceProviderModel?","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a2003bfcbe3c8d367cbc919ba77d5c10b4df0fc2","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        d \u003d dict()"},{"line_number":103,"context_line":"        for attr in self.__class__.attributes:"},{"line_number":104,"context_line":"            d[attr] \u003d getattr(self, attr)"},{"line_number":105,"context_line":"        return d"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class Federation(core.Driver):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_1c5038d3","line":105,"in_reply_to":"3a961159_14e68de8","updated":"2015-01-26 14:27:43.000000000","message":"i can add it as a followup patch.","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bdfe9c2ce0993e611bd0e9fb905aff72a54032ab","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class ServiceProviderModel(sql.ModelBase, sql.DictBase):"},{"line_number":88,"context_line":"    __tablename__ \u003d \u0027service_provider\u0027"},{"line_number":89,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027enabled\u0027, \u0027description\u0027]"},{"line_number":90,"context_line":"    mutable_attributes \u003d frozenset([\u0027description\u0027, \u0027enabled\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_97a883dc","line":89,"updated":"2015-01-26 14:39:46.000000000","message":"missing some attributes? (URLs defined in the spec)","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"acaae5757b481243514679759e3cd14a9e7e5dea","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class ServiceProviderModel(sql.ModelBase, sql.DictBase):"},{"line_number":88,"context_line":"    __tablename__ \u003d \u0027service_provider\u0027"},{"line_number":89,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027enabled\u0027, \u0027description\u0027]"},{"line_number":90,"context_line":"    mutable_attributes \u003d frozenset([\u0027description\u0027, \u0027enabled\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_8e8da9d5","line":89,"in_reply_to":"1a930d6b_97a883dc","updated":"2015-01-27 11:10:32.000000000","message":"Done","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"becf3b257f5c46c66580277909dbd1f06a1201cc","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    enabled \u003d sql.Column(sql.Boolean, nullable\u003dFalse)"},{"line_number":94,"context_line":"    description \u003d sql.Column(sql.Text(), nullable\u003dTrue)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @classmethod"},{"line_number":97,"context_line":"    def from_dict(cls, dictionary):"},{"line_number":98,"context_line":"        new_dictionary \u003d dictionary.copy()"},{"line_number":99,"context_line":"        return cls(**new_dictionary)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_3a75eaf9","line":96,"updated":"2015-01-26 18:29:25.000000000","message":"Can\u0027t we have these two methods as Mixins? We repeat this code  in every model.","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"acaae5757b481243514679759e3cd14a9e7e5dea","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    enabled \u003d sql.Column(sql.Boolean, nullable\u003dFalse)"},{"line_number":94,"context_line":"    description \u003d sql.Column(sql.Text(), nullable\u003dTrue)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @classmethod"},{"line_number":97,"context_line":"    def from_dict(cls, dictionary):"},{"line_number":98,"context_line":"        new_dictionary \u003d dictionary.copy()"},{"line_number":99,"context_line":"        return cls(**new_dictionary)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_9aa4ffba","line":96,"in_reply_to":"1a930d6b_3a75eaf9","updated":"2015-01-27 11:10:32.000000000","message":"will add in the next patches.","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"becf3b257f5c46c66580277909dbd1f06a1201cc","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def delete_sp(self, sp_id):"},{"line_number":277,"context_line":"        session \u003d sql.get_session()"},{"line_number":278,"context_line":"        with session.begin():"},{"line_number":279,"context_line":"            sp_ref \u003d self._get_sp(session, sp_id)"},{"line_number":280,"context_line":"            session.delete(sp_ref)"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_ba39daf3","line":278,"updated":"2015-01-26 18:29:25.000000000","message":"Normally for the entities we allow delete only after it has been disabled.  Here, it looks like we can delete without disabling. Is that ok?","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"acaae5757b481243514679759e3cd14a9e7e5dea","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def delete_sp(self, sp_id):"},{"line_number":277,"context_line":"        session \u003d sql.get_session()"},{"line_number":278,"context_line":"        with session.begin():"},{"line_number":279,"context_line":"            sp_ref \u003d self._get_sp(session, sp_id)"},{"line_number":280,"context_line":"            session.delete(sp_ref)"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_b90aad87","line":278,"in_reply_to":"1a930d6b_331ef5bb","updated":"2015-01-27 11:10:32.000000000","message":"Haneef, where is this \"delete only if disabled\" check ?","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"69008dfbd4ef9d6580a03cf666fdb7dce312a639","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def delete_sp(self, sp_id):"},{"line_number":277,"context_line":"        session \u003d sql.get_session()"},{"line_number":278,"context_line":"        with session.begin():"},{"line_number":279,"context_line":"            sp_ref \u003d self._get_sp(session, sp_id)"},{"line_number":280,"context_line":"            session.delete(sp_ref)"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_331ef5bb","line":278,"in_reply_to":"1a930d6b_ba39daf3","updated":"2015-01-26 19:37:47.000000000","message":"we can check for disabled/enabled at the controller level","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"23a226d96eff314e86ed58a7ee329f04cef59d56","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def delete_sp(self, sp_id):"},{"line_number":280,"context_line":"        session \u003d sql.get_session()"},{"line_number":281,"context_line":"        with session.begin():"},{"line_number":282,"context_line":"            sp_ref \u003d self._get_sp(session, sp_id)"},{"line_number":283,"context_line":"            session.delete(sp_ref)"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa81d914_4555b24e","line":281,"updated":"2015-01-29 18:36:46.000000000","message":"This should use the transaction context manager we have example here:\n\nhttps://github.com/openstack/keystone/blob/master/keystone/assignment/backends/sql.py#L70 \n\nIt helps eliminate get_session, session begin lines.\n\nThis can be a follow-up patch if no other changes are needed [but needs to happen before RC]","commit_id":"9526c45bc38a271e473226d3c0712bd166525c8f"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"046fa8c0105b726f867d5c8f8a25b5e959742e89","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def delete_sp(self, sp_id):"},{"line_number":280,"context_line":"        session \u003d sql.get_session()"},{"line_number":281,"context_line":"        with session.begin():"},{"line_number":282,"context_line":"            sp_ref \u003d self._get_sp(session, sp_id)"},{"line_number":283,"context_line":"            session.delete(sp_ref)"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa81d914_907fd1aa","line":281,"in_reply_to":"fa81d914_4555b24e","updated":"2015-01-30 09:34:48.000000000","message":"Done","commit_id":"9526c45bc38a271e473226d3c0712bd166525c8f"}],"keystone/contrib/federation/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b8e8b2e7349d16e80101a59bbb60b4fb5c653796","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"@dependency.requires(\u0027federation_api\u0027)"},{"line_number":300,"context_line":"class ServiceProvider(_ControllerBase):"},{"line_number":301,"context_line":"    \"\"\"Service Provider presentation.\"\"\""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    @controller.protected"},{"line_number":304,"context_line":"    def create_service_providers(self, context, sp_id, service_provider):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d7186177","line":301,"updated":"2014-07-03 20:46:00.000000000","message":"presentation?","commit_id":"9eb82c4dd90774f66b84f82608b9bae54e475a66"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"1fec0c4734eee55df8c7fd8635deb9d1b476a952","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"@dependency.requires(\u0027federation_api\u0027)"},{"line_number":300,"context_line":"class ServiceProvider(_ControllerBase):"},{"line_number":301,"context_line":"    \"\"\"Service Provider presentation.\"\"\""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    @controller.protected"},{"line_number":304,"context_line":"    def create_service_providers(self, context, sp_id, service_provider):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a411eb53","line":301,"in_reply_to":"baada198_d7186177","updated":"2014-07-04 08:56:41.000000000","message":"representation of course :-)","commit_id":"9eb82c4dd90774f66b84f82608b9bae54e475a66"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"21a785c159976377d90d99458b352ead5b6df1e3","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        ServiceProvider.check_immutable_params(service_provider)"},{"line_number":314,"context_line":"        sp_ref \u003d self.federation_api.create_sp(sp_id, service_provider)"},{"line_number":315,"context_line":"        response \u003d ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":316,"context_line":"        return wsgi.render_response(body\u003dresponse, status\u003d(\u0027201\u0027, \u0027Created\u0027))"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    @controller.protected()"},{"line_number":319,"context_line":"    def list_service_providers(self, context):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_0bbb66e5","line":316,"updated":"2014-07-27 10:23:00.000000000","message":"is there a reasons we can\u0027t just do:\n\nreturn ServiceProvider.wrap_member(context, response) ?","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"f154b818ec9b97e1d926c038d5175f3cded9fceb","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        ServiceProvider.check_immutable_params(service_provider)"},{"line_number":314,"context_line":"        sp_ref \u003d self.federation_api.create_sp(sp_id, service_provider)"},{"line_number":315,"context_line":"        response \u003d ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":316,"context_line":"        return wsgi.render_response(body\u003dresponse, status\u003d(\u0027201\u0027, \u0027Created\u0027))"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    @controller.protected()"},{"line_number":319,"context_line":"    def list_service_providers(self, context):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_f669f0c0","line":316,"in_reply_to":"3a961159_f4c82123","updated":"2015-01-15 15:28:38.000000000","message":"@Henry: Yes, defalul successful response would be 200 OK.\n@Wanghong: Imagine we \u0027add\u0027 (so PUT) to our store (backend), not send something (POST) to be processed.","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"c700580185b66ceb563341484f51ff9cd1963c75","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        ServiceProvider.check_immutable_params(service_provider)"},{"line_number":314,"context_line":"        sp_ref \u003d self.federation_api.create_sp(sp_id, service_provider)"},{"line_number":315,"context_line":"        response \u003d ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":316,"context_line":"        return wsgi.render_response(body\u003dresponse, status\u003d(\u0027201\u0027, \u0027Created\u0027))"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    @controller.protected()"},{"line_number":319,"context_line":"    def list_service_providers(self, context):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_f4c82123","line":316,"in_reply_to":"baada198_0bbb66e5","updated":"2015-01-14 02:31:50.000000000","message":"I think this is because we use PUT method to create service provider? And I have a question here :) Why do we use PUT rather than POST to create service provider?","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bdfe9c2ce0993e611bd0e9fb905aff72a54032ab","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    collection_name \u003d \u0027service_providers\u0027"},{"line_number":343,"context_line":"    member_name \u003d \u0027service_provider\u0027"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    _mutable_parameters \u003d frozenset([\u0027description\u0027, \u0027enabled\u0027])"},{"line_number":346,"context_line":"    _public_parameters \u003d frozenset([\u0027id\u0027, \u0027enabled\u0027, \u0027description\u0027, \u0027links\u0027])"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_5789bb73","line":345,"updated":"2015-01-26 14:39:46.000000000","message":"missing parameters? (same comment as last file)","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"acaae5757b481243514679759e3cd14a9e7e5dea","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    collection_name \u003d \u0027service_providers\u0027"},{"line_number":343,"context_line":"    member_name \u003d \u0027service_provider\u0027"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    _mutable_parameters \u003d frozenset([\u0027description\u0027, \u0027enabled\u0027])"},{"line_number":346,"context_line":"    _public_parameters \u003d frozenset([\u0027id\u0027, \u0027enabled\u0027, \u0027description\u0027, \u0027links\u0027])"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_d47bc078","line":345,"in_reply_to":"1a930d6b_5789bb73","updated":"2015-01-27 11:10:32.000000000","message":"Done","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"becf3b257f5c46c66580277909dbd1f06a1201cc","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        sp_ref \u003d self.federation_api.create_sp(sp_id, service_provider)"},{"line_number":354,"context_line":"        response \u003d ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":355,"context_line":"        return wsgi.render_response(body\u003dresponse, status\u003d(\u0027201\u0027, \u0027Created\u0027))"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    @controller.protected()"},{"line_number":358,"context_line":"    def list_service_providers(self, context):"},{"line_number":359,"context_line":"        ref \u003d self.federation_api.list_sps()"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_7af05267","line":356,"updated":"2015-01-26 18:29:25.000000000","message":"Why are we retruning 201 from controller layer?  Don\u0027t we handle this in wsgi.py","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"69008dfbd4ef9d6580a03cf666fdb7dce312a639","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        sp_ref \u003d self.federation_api.create_sp(sp_id, service_provider)"},{"line_number":354,"context_line":"        response \u003d ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":355,"context_line":"        return wsgi.render_response(body\u003dresponse, status\u003d(\u0027201\u0027, \u0027Created\u0027))"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    @controller.protected()"},{"line_number":358,"context_line":"    def list_service_providers(self, context):"},{"line_number":359,"context_line":"        ref \u003d self.federation_api.list_sps()"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_d38691da","line":356,"in_reply_to":"1a930d6b_7af05267","updated":"2015-01-26 19:37:47.000000000","message":"this is expected, and consistent with what the idp manager does","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"749e34ff3b68d2ac2f2708741545287ce8a638ee","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        sp_ref \u003d self.federation_api.create_sp(sp_id, service_provider)"},{"line_number":354,"context_line":"        response \u003d ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":355,"context_line":"        return wsgi.render_response(body\u003dresponse, status\u003d(\u0027201\u0027, \u0027Created\u0027))"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    @controller.protected()"},{"line_number":358,"context_line":"    def list_service_providers(self, context):"},{"line_number":359,"context_line":"        ref \u003d self.federation_api.list_sps()"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_19d0f752","line":356,"in_reply_to":"1a930d6b_ceb348e7","updated":"2015-01-27 20:35:18.000000000","message":"right, but it\u0027s actually a PUT call here, which normally returns 200. but since we are creating things, we change it to 201 Created.","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"5be784a803669cbeb0c6faa2816445a04d24d662","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        sp_ref \u003d self.federation_api.create_sp(sp_id, service_provider)"},{"line_number":354,"context_line":"        response \u003d ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":355,"context_line":"        return wsgi.render_response(body\u003dresponse, status\u003d(\u0027201\u0027, \u0027Created\u0027))"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    @controller.protected()"},{"line_number":358,"context_line":"    def list_service_providers(self, context):"},{"line_number":359,"context_line":"        ref \u003d self.federation_api.list_sps()"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_ceb348e7","line":356,"in_reply_to":"1a930d6b_d38691da","updated":"2015-01-26 19:50:17.000000000","message":"If  you look at create_project/domains/ etc , none of them do it. So my question is really do we want to follow LDAP manager or other managers.","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"8b7c8881feb8186b29be9e29af39473a5b92b1b5","unresolved":false,"context_lines":[{"line_number":373,"context_line":"    @controller.protected()"},{"line_number":374,"context_line":"    def update_service_provider(self, context, sp_id, service_provider):"},{"line_number":375,"context_line":"        service_provider \u003d self._normalize_dict(service_provider)"},{"line_number":376,"context_line":"        ServiceProvider.check_immutable_params(service_provider)"},{"line_number":377,"context_line":"        sp_ref \u003d self.federation_api.update_sp(sp_id, service_provider)"},{"line_number":378,"context_line":"        return ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":379,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_cc676de9","line":376,"updated":"2015-01-28 04:03:32.000000000","message":"According to the sql backend code, we can only update \u0027description\u0027 and \u0027enabled\u0027, but here we check _mutable_parameters which contains more than description and enabled. I think we should make consistent.","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"4de5cebf38a69b547974c6d46634a9f4c2d06946","unresolved":false,"context_lines":[{"line_number":373,"context_line":"    @controller.protected()"},{"line_number":374,"context_line":"    def update_service_provider(self, context, sp_id, service_provider):"},{"line_number":375,"context_line":"        service_provider \u003d self._normalize_dict(service_provider)"},{"line_number":376,"context_line":"        ServiceProvider.check_immutable_params(service_provider)"},{"line_number":377,"context_line":"        sp_ref \u003d self.federation_api.update_sp(sp_id, service_provider)"},{"line_number":378,"context_line":"        return ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":379,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_e9c33888","line":376,"in_reply_to":"fa81d914_cc676de9","updated":"2015-01-28 10:22:05.000000000","message":"that\u0027s a very valid point.","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b517f9a46dd3ca0a630ce7ebeca3cef6dcea521f","unresolved":false,"context_lines":[{"line_number":351,"context_line":"    def create_service_provider(self, context, sp_id, service_provider):"},{"line_number":352,"context_line":"        service_provider \u003d self._normalize_dict(service_provider)"},{"line_number":353,"context_line":"        service_provider.setdefault(\u0027enabled\u0027, False)"},{"line_number":354,"context_line":"        ServiceProvider.check_immutable_params(service_provider)"},{"line_number":355,"context_line":"        sp_ref \u003d self.federation_api.create_sp(sp_id, service_provider)"},{"line_number":356,"context_line":"        response \u003d ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":357,"context_line":"        return wsgi.render_response(body\u003dresponse, status\u003d(\u0027201\u0027, \u0027Created\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa81d914_4f2281ba","line":354,"updated":"2015-01-28 12:23:36.000000000","message":"this kind of checks shouldn\u0027t be done here in the Controller layer. I saw the other classes in this file and all of them are doing the same kind of checking, suggest to submit a patch to move all these checks to the Manager layer.","commit_id":"267ee59090fcd111e900358be8294d31ad9e52d5"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"817b69a60ce1d7be9bc0a2f66c6f5b7132fa127d","unresolved":false,"context_lines":[{"line_number":351,"context_line":"    def create_service_provider(self, context, sp_id, service_provider):"},{"line_number":352,"context_line":"        service_provider \u003d self._normalize_dict(service_provider)"},{"line_number":353,"context_line":"        service_provider.setdefault(\u0027enabled\u0027, False)"},{"line_number":354,"context_line":"        ServiceProvider.check_immutable_params(service_provider)"},{"line_number":355,"context_line":"        sp_ref \u003d self.federation_api.create_sp(sp_id, service_provider)"},{"line_number":356,"context_line":"        response \u003d ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":357,"context_line":"        return wsgi.render_response(body\u003dresponse, status\u003d(\u0027201\u0027, \u0027Created\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa81d914_7a81c58e","line":354,"in_reply_to":"fa81d914_4f2281ba","updated":"2015-01-28 12:31:37.000000000","message":"in followup patch.","commit_id":"267ee59090fcd111e900358be8294d31ad9e52d5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b517f9a46dd3ca0a630ce7ebeca3cef6dcea521f","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    @controller.protected()"},{"line_number":360,"context_line":"    def list_service_providers(self, context):"},{"line_number":361,"context_line":"        ref \u003d self.federation_api.list_sps()"},{"line_number":362,"context_line":"        ref \u003d [self.filter_params(x) for x in ref]"},{"line_number":363,"context_line":"        return ServiceProvider.wrap_collection(context, ref)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa81d914_da2b9180","line":362,"updated":"2015-01-28 12:23:36.000000000","message":"this as well, should be done in the Manager layer.","commit_id":"267ee59090fcd111e900358be8294d31ad9e52d5"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"817b69a60ce1d7be9bc0a2f66c6f5b7132fa127d","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    @controller.protected()"},{"line_number":360,"context_line":"    def list_service_providers(self, context):"},{"line_number":361,"context_line":"        ref \u003d self.federation_api.list_sps()"},{"line_number":362,"context_line":"        ref \u003d [self.filter_params(x) for x in ref]"},{"line_number":363,"context_line":"        return ServiceProvider.wrap_collection(context, ref)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa81d914_ba4a5d81","line":362,"in_reply_to":"fa81d914_da2b9180","updated":"2015-01-28 12:31:37.000000000","message":"in followup patch.","commit_id":"267ee59090fcd111e900358be8294d31ad9e52d5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b517f9a46dd3ca0a630ce7ebeca3cef6dcea521f","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    @controller.protected()"},{"line_number":375,"context_line":"    def update_service_provider(self, context, sp_id, service_provider):"},{"line_number":376,"context_line":"        service_provider \u003d self._normalize_dict(service_provider)"},{"line_number":377,"context_line":"        ServiceProvider.check_immutable_params(service_provider)"},{"line_number":378,"context_line":"        sp_ref \u003d self.federation_api.update_sp(sp_id, service_provider)"},{"line_number":379,"context_line":"        return ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa81d914_5a37a1e3","line":377,"updated":"2015-01-28 12:23:36.000000000","message":"ditto","commit_id":"267ee59090fcd111e900358be8294d31ad9e52d5"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"817b69a60ce1d7be9bc0a2f66c6f5b7132fa127d","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    @controller.protected()"},{"line_number":375,"context_line":"    def update_service_provider(self, context, sp_id, service_provider):"},{"line_number":376,"context_line":"        service_provider \u003d self._normalize_dict(service_provider)"},{"line_number":377,"context_line":"        ServiceProvider.check_immutable_params(service_provider)"},{"line_number":378,"context_line":"        sp_ref \u003d self.federation_api.update_sp(sp_id, service_provider)"},{"line_number":379,"context_line":"        return ServiceProvider.wrap_member(context, sp_ref)"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa81d914_1a4a8980","line":377,"in_reply_to":"fa81d914_5a37a1e3","updated":"2015-01-28 12:31:37.000000000","message":"in followup patch.","commit_id":"267ee59090fcd111e900358be8294d31ad9e52d5"}],"keystone/contrib/federation/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5e442e8512fa177d86f51f47ee1286d3b61b89a9","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @abc.abstractmethod"},{"line_number":219,"context_line":"    def create_sp(self, sp_id, sp):"},{"line_number":220,"context_line":"        \"\"\"Create an identity provider."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        :returns: sp_ref"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_6ba317b2","line":220,"updated":"2014-07-04 16:04:27.000000000","message":"s/identity provider/service_provider","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"27d72bb2f8989acbb7c691786a5515bfd24d6792","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @abc.abstractmethod"},{"line_number":219,"context_line":"    def create_sp(self, sp_id, sp):"},{"line_number":220,"context_line":"        \"\"\"Create an identity provider."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        :returns: sp_ref"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_36356ddb","line":220,"in_reply_to":"baada198_6ba317b2","updated":"2014-07-10 03:54:14.000000000","message":"Done","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5e442e8512fa177d86f51f47ee1286d3b61b89a9","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    @abc.abstractmethod"},{"line_number":228,"context_line":"    def delete_sp(self, sp_id):"},{"line_number":229,"context_line":"        \"\"\"Delete an identity provider."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_cbaee397","line":229,"updated":"2014-07-04 16:04:27.000000000","message":"s/identity provider/service_provider","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"27d72bb2f8989acbb7c691786a5515bfd24d6792","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    @abc.abstractmethod"},{"line_number":228,"context_line":"    def delete_sp(self, sp_id):"},{"line_number":229,"context_line":"        \"\"\"Delete an identity provider."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_5634a1dd","line":229,"in_reply_to":"baada198_cbaee397","updated":"2014-07-10 03:54:14.000000000","message":"Done","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5e442e8512fa177d86f51f47ee1286d3b61b89a9","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    def delete_sp(self, sp_id):"},{"line_number":229,"context_line":"        \"\"\"Delete an identity provider."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_eb96474b","line":231,"updated":"2014-07-04 16:04:27.000000000","message":"s/IdentityProviderNotFound/ServiceProviderNotFound","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"27d72bb2f8989acbb7c691786a5515bfd24d6792","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    def delete_sp(self, sp_id):"},{"line_number":229,"context_line":"        \"\"\"Delete an identity provider."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_964d5975","line":231,"in_reply_to":"baada198_eb96474b","updated":"2014-07-10 03:54:14.000000000","message":"Done","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5e442e8512fa177d86f51f47ee1286d3b61b89a9","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    @abc.abstractmethod"},{"line_number":237,"context_line":"    def list_sps(self):"},{"line_number":238,"context_line":"        \"\"\"List all identity providers."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        :returns List of sp_ref objects"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_0b945b41","line":238,"updated":"2014-07-04 16:04:27.000000000","message":"s/identity provider/service_provider","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"27d72bb2f8989acbb7c691786a5515bfd24d6792","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    @abc.abstractmethod"},{"line_number":237,"context_line":"    def list_sps(self):"},{"line_number":238,"context_line":"        \"\"\"List all identity providers."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        :returns List of sp_ref objects"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_d657d100","line":238,"in_reply_to":"baada198_0b945b41","updated":"2014-07-10 03:54:14.000000000","message":"Done","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5e442e8512fa177d86f51f47ee1286d3b61b89a9","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    @abc.abstractmethod"},{"line_number":246,"context_line":"    def get_sp(self, sp_id):"},{"line_number":247,"context_line":"        \"\"\"Get an identity provider by ID."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        :returns: sp_ref"},{"line_number":250,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_4b9ad36e","line":247,"updated":"2014-07-04 16:04:27.000000000","message":"s/identity provider/service_provider","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"27d72bb2f8989acbb7c691786a5515bfd24d6792","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    @abc.abstractmethod"},{"line_number":246,"context_line":"    def get_sp(self, sp_id):"},{"line_number":247,"context_line":"        \"\"\"Get an identity provider by ID."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        :returns: sp_ref"},{"line_number":250,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_f65a1529","line":247,"in_reply_to":"baada198_4b9ad36e","updated":"2014-07-10 03:54:14.000000000","message":"Done","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5e442e8512fa177d86f51f47ee1286d3b61b89a9","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        \"\"\"Get an identity provider by ID."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        :returns: sp_ref"},{"line_number":250,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        \"\"\""},{"line_number":253,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_cb850308","line":250,"updated":"2014-07-04 16:04:27.000000000","message":"s/IdentityProviderNotFound/ServiceProviderNotFound","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"27d72bb2f8989acbb7c691786a5515bfd24d6792","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        \"\"\"Get an identity provider by ID."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        :returns: sp_ref"},{"line_number":250,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        \"\"\""},{"line_number":253,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_16414939","line":250,"in_reply_to":"baada198_cb850308","updated":"2014-07-10 03:54:14.000000000","message":"Done","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5e442e8512fa177d86f51f47ee1286d3b61b89a9","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    @abc.abstractmethod"},{"line_number":256,"context_line":"    def update_sp(self, sp_id, sp):"},{"line_number":257,"context_line":"        \"\"\"Update an identity provider by ID."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :returns: sp_ref"},{"line_number":260,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_6b8a371c","line":257,"updated":"2014-07-04 16:04:27.000000000","message":"s/identity provider/service_provider","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"27d72bb2f8989acbb7c691786a5515bfd24d6792","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    @abc.abstractmethod"},{"line_number":256,"context_line":"    def update_sp(self, sp_id, sp):"},{"line_number":257,"context_line":"        \"\"\"Update an identity provider by ID."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :returns: sp_ref"},{"line_number":260,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_363c8dbf","line":257,"in_reply_to":"baada198_6b8a371c","updated":"2014-07-10 03:54:14.000000000","message":"Done","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5e442e8512fa177d86f51f47ee1286d3b61b89a9","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        \"\"\"Update an identity provider by ID."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :returns: sp_ref"},{"line_number":260,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_eb7d671d","line":260,"updated":"2014-07-04 16:04:27.000000000","message":"s/IdentityProviderNotFound/ServiceProviderNotFound","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"27d72bb2f8989acbb7c691786a5515bfd24d6792","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        \"\"\"Update an identity provider by ID."},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :returns: sp_ref"},{"line_number":260,"context_line":"        :raises: keystone.exception.IdentityProviderNotFound"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_564bc158","line":260,"in_reply_to":"baada198_eb7d671d","updated":"2014-07-10 03:54:14.000000000","message":"Done","commit_id":"debe5006614d837519c540fee4595b25e222748c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"69008dfbd4ef9d6580a03cf666fdb7dce312a639","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    @abc.abstractmethod"},{"line_number":266,"context_line":"    def update_sp(self, sp_id, sp):"},{"line_number":267,"context_line":"        \"\"\"Update an service provider by ID."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        :returns: sp_ref"},{"line_number":270,"context_line":"        :raises: keystone.exception.ServiceProviderNotFound"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_d35db17a","line":267,"updated":"2015-01-26 19:37:47.000000000","message":"s/an/a","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"acaae5757b481243514679759e3cd14a9e7e5dea","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    @abc.abstractmethod"},{"line_number":266,"context_line":"    def update_sp(self, sp_id, sp):"},{"line_number":267,"context_line":"        \"\"\"Update an service provider by ID."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        :returns: sp_ref"},{"line_number":270,"context_line":"        :raises: keystone.exception.ServiceProviderNotFound"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_94ecd82b","line":267,"in_reply_to":"1a930d6b_d35db17a","updated":"2015-01-27 11:10:32.000000000","message":"Done","commit_id":"2e6e0a0249d234bc5453ef1728a0a61f272c06d4"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"23a226d96eff314e86ed58a7ee329f04cef59d56","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    def update_sp(self, sp_id, sp):"},{"line_number":267,"context_line":"        \"\"\"Update a service provider."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        :returns: sp_ref"},{"line_number":270,"context_line":"        :raises: keystone.exception.ServiceProviderNotFound"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa81d914_c54b6285","line":269,"updated":"2015-01-29 18:36:46.000000000","message":"(NIT) please add rtype data to the doctstrings (applies to everything here))\n\n(NIT): please add parameter types (applies to everything here).","commit_id":"9526c45bc38a271e473226d3c0712bd166525c8f"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"046fa8c0105b726f867d5c8f8a25b5e959742e89","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    def update_sp(self, sp_id, sp):"},{"line_number":267,"context_line":"        \"\"\"Update a service provider."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        :returns: sp_ref"},{"line_number":270,"context_line":"        :raises: keystone.exception.ServiceProviderNotFound"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa81d914_4bb12a46","line":269,"in_reply_to":"fa81d914_c54b6285","updated":"2015-01-30 09:34:48.000000000","message":"Done","commit_id":"9526c45bc38a271e473226d3c0712bd166525c8f"}],"keystone/contrib/federation/migrate_repo/versions/004_add_service_provider_table.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"21a785c159976377d90d99458b352ead5b6df1e3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        meta,"},{"line_number":23,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":24,"context_line":"        sql.Column(\u0027enabled\u0027, sql.Boolean, nullable\u003dFalse),"},{"line_number":25,"context_line":"        sql.Column(\u0027description\u0027, sql.Text(), nullable\u003dTrue))"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    sp_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_0b2d2646","line":25,"updated":"2014-07-27 10:23:00.000000000","message":"do we need to add:\n        mysql_engine\u003d\u0027InnoDB\u0027,\n        mysql_charset\u003d\u0027utf8\u0027)\n?","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a2003bfcbe3c8d367cbc919ba77d5c10b4df0fc2","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        meta,"},{"line_number":23,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":24,"context_line":"        sql.Column(\u0027enabled\u0027, sql.Boolean, nullable\u003dFalse),"},{"line_number":25,"context_line":"        sql.Column(\u0027description\u0027, sql.Text(), nullable\u003dTrue))"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    sp_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_3cdfb40e","line":25,"in_reply_to":"baada198_0b2d2646","updated":"2015-01-26 14:27:43.000000000","message":"Done","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"47b80880207a75856d35ad2e8f0c136dfb9058bd","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    sp_table \u003d sql.Table("},{"line_number":21,"context_line":"        \u0027service_provider\u0027,"},{"line_number":22,"context_line":"        meta,"},{"line_number":23,"context_line":"        sql.Column(\u0027auth_url\u0027, sql.String(64), nullable\u003dTrue),"},{"line_number":24,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_911ce56b","line":21,"updated":"2015-01-27 11:54:22.000000000","message":"suggestion: extract the table name to a constant","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d1b5952bedfd8097f1ae0630a5678134fc3fecd2","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    sp_table \u003d sql.Table("},{"line_number":21,"context_line":"        \u0027service_provider\u0027,"},{"line_number":22,"context_line":"        meta,"},{"line_number":23,"context_line":"        sql.Column(\u0027auth_url\u0027, sql.String(64), nullable\u003dTrue),"},{"line_number":24,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_d9bd7f04","line":21,"in_reply_to":"1a930d6b_911ce56b","updated":"2015-01-27 20:35:59.000000000","message":"sounds like a good idea for another easy patch :)","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"84beb4be2207b5015221a64cf7160bd9098c1f12","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":29,"context_line":"        mysql_charset\u003d\u0027utf8\u0027)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    sp_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_64b6a68c","line":31,"updated":"2015-01-27 21:18:34.000000000","message":"Why do you use checkfirst here?","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"}],"keystone/contrib/federation/routers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b8e8b2e7349d16e80101a59bbb60b4fb5c653796","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027POST\u0027]))"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"class Keystone2KeystoneExtension(_BaseFederationExtension):"},{"line_number":200,"context_line":"    \"\"\"API Endpoints for the Federation extension."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    The API looks like::"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_f74f2569","line":199,"updated":"2014-07-03 20:46:00.000000000","message":"why have it in it\u0027s own class?","commit_id":"9eb82c4dd90774f66b84f82608b9bae54e475a66"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"1fec0c4734eee55df8c7fd8635deb9d1b476a952","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027POST\u0027]))"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"class Keystone2KeystoneExtension(_BaseFederationExtension):"},{"line_number":200,"context_line":"    \"\"\"API Endpoints for the Federation extension."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    The API looks like::"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_247b1b8d","line":199,"in_reply_to":"baada198_f74f2569","updated":"2014-07-04 08:56:41.000000000","message":"For some logical split.  Icehouse federation will probably differ from Juno federation.\nAnyway, it\u0027s squeezed into single class now.","commit_id":"9eb82c4dd90774f66b84f82608b9bae54e475a66"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b517f9a46dd3ca0a630ce7ebeca3cef6dcea521f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        GET /OS-FEDERATION/projects"},{"line_number":64,"context_line":"        GET /OS-FEDERATION/domains"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        PUT /OS-FEDERATION/service_providers/$service_provider"},{"line_number":68,"context_line":"        GET /OS-FEDERATION/service_providers"},{"line_number":69,"context_line":"        GET /OS-FEDERATION/service_providers/$service_provider"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa81d914_fa269567","line":66,"updated":"2015-01-28 12:23:36.000000000","message":"extra line?","commit_id":"267ee59090fcd111e900358be8294d31ad9e52d5"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"817b69a60ce1d7be9bc0a2f66c6f5b7132fa127d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        GET /OS-FEDERATION/projects"},{"line_number":64,"context_line":"        GET /OS-FEDERATION/domains"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        PUT /OS-FEDERATION/service_providers/$service_provider"},{"line_number":68,"context_line":"        GET /OS-FEDERATION/service_providers"},{"line_number":69,"context_line":"        GET /OS-FEDERATION/service_providers/$service_provider"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa81d914_9a55991f","line":66,"in_reply_to":"fa81d914_fa269567","updated":"2015-01-28 12:31:37.000000000","message":"Done","commit_id":"267ee59090fcd111e900358be8294d31ad9e52d5"}],"keystone/tests/test_v3_federation.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"21a785c159976377d90d99458b352ead5b6df1e3","unresolved":false,"context_lines":[{"line_number":1572,"context_line":""},{"line_number":1573,"context_line":"    def setUp(self):"},{"line_number":1574,"context_line":"        super(FederationTests, self).setUp()"},{"line_number":1575,"context_line":"        # Add examplous SP"},{"line_number":1576,"context_line":"        url \u003d self.base_url(suffix\u003dself.SERVICE_PROVIDER_ID)"},{"line_number":1577,"context_line":"        self.SP_REF \u003d self.sp_ref()"},{"line_number":1578,"context_line":"        self.SERVICE_PROVIDER \u003d self.put("}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_0ba286ad","line":1575,"updated":"2014-07-27 10:23:00.000000000","message":"nice word \"examplous\".....but is it a real word?","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a2003bfcbe3c8d367cbc919ba77d5c10b4df0fc2","unresolved":false,"context_lines":[{"line_number":1572,"context_line":""},{"line_number":1573,"context_line":"    def setUp(self):"},{"line_number":1574,"context_line":"        super(FederationTests, self).setUp()"},{"line_number":1575,"context_line":"        # Add examplous SP"},{"line_number":1576,"context_line":"        url \u003d self.base_url(suffix\u003dself.SERVICE_PROVIDER_ID)"},{"line_number":1577,"context_line":"        self.SP_REF \u003d self.sp_ref()"},{"line_number":1578,"context_line":"        self.SERVICE_PROVIDER \u003d self.put("}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_5c8000c0","line":1575,"in_reply_to":"baada198_0ba286ad","updated":"2015-01-26 14:27:43.000000000","message":"removed","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"21a785c159976377d90d99458b352ead5b6df1e3","unresolved":false,"context_lines":[{"line_number":1617,"context_line":"        self.put(url, body\u003d{\u0027service_provider\u0027: sp},"},{"line_number":1618,"context_line":"                 expected_status\u003d403)"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    # TODO(marek-denis)"},{"line_number":1621,"context_line":"    def test_list_service_providers(self):"},{"line_number":1622,"context_line":"        pass"},{"line_number":1623,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_6bab0288","line":1620,"updated":"2014-07-27 10:23:00.000000000","message":"TODO meaning before this can be merged or as a follow on?  I assume the former, in which case FIXME is better....","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a2003bfcbe3c8d367cbc919ba77d5c10b4df0fc2","unresolved":false,"context_lines":[{"line_number":1617,"context_line":"        self.put(url, body\u003d{\u0027service_provider\u0027: sp},"},{"line_number":1618,"context_line":"                 expected_status\u003d403)"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    # TODO(marek-denis)"},{"line_number":1621,"context_line":"    def test_list_service_providers(self):"},{"line_number":1622,"context_line":"        pass"},{"line_number":1623,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a930d6b_7c813cc2","line":1620,"in_reply_to":"baada198_6bab0288","updated":"2015-01-26 14:27:43.000000000","message":"Done","commit_id":"c009ed101e623789699b3e967e1e125903482e75"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"84beb4be2207b5015221a64cf7160bd9098c1f12","unresolved":false,"context_lines":[{"line_number":2313,"context_line":"        self.put(url, body\u003d{\u0027service_provider\u0027: sp},"},{"line_number":2314,"context_line":"                 expected_status\u003d403)"},{"line_number":2315,"context_line":""},{"line_number":2316,"context_line":"    # FIXME(marek-denis)"},{"line_number":2317,"context_line":"    def test_list_service_providers(self):"},{"line_number":2318,"context_line":"        pass"},{"line_number":2319,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_648306cd","line":2316,"updated":"2015-01-27 21:18:34.000000000","message":"I saw a +2 and decided to put a warning -1 because of this FIXME","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"8b7c8881feb8186b29be9e29af39473a5b92b1b5","unresolved":false,"context_lines":[{"line_number":2313,"context_line":"        self.put(url, body\u003d{\u0027service_provider\u0027: sp},"},{"line_number":2314,"context_line":"                 expected_status\u003d403)"},{"line_number":2315,"context_line":""},{"line_number":2316,"context_line":"    # FIXME(marek-denis)"},{"line_number":2317,"context_line":"    def test_list_service_providers(self):"},{"line_number":2318,"context_line":"        pass"},{"line_number":2319,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_4ca1bda8","line":2316,"in_reply_to":"fa81d914_648306cd","updated":"2015-01-28 04:03:32.000000000","message":"Why you don\u0027t want to implement list test in this patch?","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"4de5cebf38a69b547974c6d46634a9f4c2d06946","unresolved":false,"context_lines":[{"line_number":2313,"context_line":"        self.put(url, body\u003d{\u0027service_provider\u0027: sp},"},{"line_number":2314,"context_line":"                 expected_status\u003d403)"},{"line_number":2315,"context_line":""},{"line_number":2316,"context_line":"    # FIXME(marek-denis)"},{"line_number":2317,"context_line":"    def test_list_service_providers(self):"},{"line_number":2318,"context_line":"        pass"},{"line_number":2319,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_84046116","line":2316,"in_reply_to":"fa81d914_648306cd","updated":"2015-01-28 10:22:05.000000000","message":"thanks.","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"47b80880207a75856d35ad2e8f0c136dfb9058bd","unresolved":false,"context_lines":[{"line_number":2317,"context_line":"    def test_list_service_providers(self):"},{"line_number":2318,"context_line":"        pass"},{"line_number":2319,"context_line":""},{"line_number":2320,"context_line":"    def test_update_service_provider(self):"},{"line_number":2321,"context_line":"        new_sp_ref \u003d self.sp_ref()"},{"line_number":2322,"context_line":"        new_sp_ref[\u0027description\u0027] \u003d uuid.uuid4().hex"},{"line_number":2323,"context_line":"        url \u003d self.base_url(suffix\u003dself.SERVICE_PROVIDER_ID)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_f1a1a9f8","line":2320,"updated":"2015-01-27 11:54:22.000000000","message":"suggest to perform an update of every \"updatable\" field and check that the update from the id is not allowed.","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"4de5cebf38a69b547974c6d46634a9f4c2d06946","unresolved":false,"context_lines":[{"line_number":2317,"context_line":"    def test_list_service_providers(self):"},{"line_number":2318,"context_line":"        pass"},{"line_number":2319,"context_line":""},{"line_number":2320,"context_line":"    def test_update_service_provider(self):"},{"line_number":2321,"context_line":"        new_sp_ref \u003d self.sp_ref()"},{"line_number":2322,"context_line":"        new_sp_ref[\u0027description\u0027] \u003d uuid.uuid4().hex"},{"line_number":2323,"context_line":"        url \u003d self.base_url(suffix\u003dself.SERVICE_PROVIDER_ID)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_a6888a23","line":2320,"in_reply_to":"1a930d6b_f1a1a9f8","updated":"2015-01-28 10:22:05.000000000","message":"we do this in batch by creating random values in new_sp_ref. I think it\u0027s enough? :-)","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"8b7c8881feb8186b29be9e29af39473a5b92b1b5","unresolved":false,"context_lines":[{"line_number":2327,"context_line":"        self.assertValidEntity(patch_result[\u0027service_provider\u0027],"},{"line_number":2328,"context_line":"                               keys_to_check\u003dself.SP_KEYS)"},{"line_number":2329,"context_line":""},{"line_number":2330,"context_line":"        # FIXME(marek-denis): compare parameters\u0027 values"},{"line_number":2331,"context_line":"        resp \u003d self.get(url, expected_status\u003d200)"},{"line_number":2332,"context_line":"        get_result \u003d resp.result"},{"line_number":2333,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_2c9c8969","line":2330,"updated":"2015-01-28 04:03:32.000000000","message":"What is this means?","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"4de5cebf38a69b547974c6d46634a9f4c2d06946","unresolved":false,"context_lines":[{"line_number":2327,"context_line":"        self.assertValidEntity(patch_result[\u0027service_provider\u0027],"},{"line_number":2328,"context_line":"                               keys_to_check\u003dself.SP_KEYS)"},{"line_number":2329,"context_line":""},{"line_number":2330,"context_line":"        # FIXME(marek-denis): compare parameters\u0027 values"},{"line_number":2331,"context_line":"        resp \u003d self.get(url, expected_status\u003d200)"},{"line_number":2332,"context_line":"        get_result \u003d resp.result"},{"line_number":2333,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_09096c31","line":2330,"in_reply_to":"fa81d914_2c9c8969","updated":"2015-01-28 10:22:05.000000000","message":"that parameters values were not checked. They will be in the next version of the patch :-)","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"47b80880207a75856d35ad2e8f0c136dfb9058bd","unresolved":false,"context_lines":[{"line_number":2334,"context_line":"        self.assertDictEqual(patch_result[\u0027service_provider\u0027],"},{"line_number":2335,"context_line":"                             get_result[\u0027service_provider\u0027])"},{"line_number":2336,"context_line":""},{"line_number":2337,"context_line":"    def test_update_service_provider_fail(self):"},{"line_number":2338,"context_line":"        new_sp_ref \u003d self.sp_ref()"},{"line_number":2339,"context_line":"        new_sp_ref[uuid.uuid4().hex] \u003d uuid.uuid4().hex"},{"line_number":2340,"context_line":"        url \u003d self.base_url(suffix\u003dself.SERVICE_PROVIDER_ID)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_11571503","line":2337,"updated":"2015-01-27 11:54:22.000000000","message":"suggest to change this method name to something like \"test_update_service_provider_unknown_attribute\"","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"8b7c8881feb8186b29be9e29af39473a5b92b1b5","unresolved":false,"context_lines":[{"line_number":2334,"context_line":"        self.assertDictEqual(patch_result[\u0027service_provider\u0027],"},{"line_number":2335,"context_line":"                             get_result[\u0027service_provider\u0027])"},{"line_number":2336,"context_line":""},{"line_number":2337,"context_line":"    def test_update_service_provider_fail(self):"},{"line_number":2338,"context_line":"        new_sp_ref \u003d self.sp_ref()"},{"line_number":2339,"context_line":"        new_sp_ref[uuid.uuid4().hex] \u003d uuid.uuid4().hex"},{"line_number":2340,"context_line":"        url \u003d self.base_url(suffix\u003dself.SERVICE_PROVIDER_ID)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_0c5505c6","line":2337,"in_reply_to":"1a930d6b_11571503","updated":"2015-01-28 04:03:32.000000000","message":"++","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"4de5cebf38a69b547974c6d46634a9f4c2d06946","unresolved":false,"context_lines":[{"line_number":2334,"context_line":"        self.assertDictEqual(patch_result[\u0027service_provider\u0027],"},{"line_number":2335,"context_line":"                             get_result[\u0027service_provider\u0027])"},{"line_number":2336,"context_line":""},{"line_number":2337,"context_line":"    def test_update_service_provider_fail(self):"},{"line_number":2338,"context_line":"        new_sp_ref \u003d self.sp_ref()"},{"line_number":2339,"context_line":"        new_sp_ref[uuid.uuid4().hex] \u003d uuid.uuid4().hex"},{"line_number":2340,"context_line":"        url \u003d self.base_url(suffix\u003dself.SERVICE_PROVIDER_ID)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_0e233206","line":2337,"in_reply_to":"1a930d6b_11571503","updated":"2015-01-28 10:22:05.000000000","message":"Done","commit_id":"5dedf42d52da8253c93cf852c3de4abaa3a9727e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b517f9a46dd3ca0a630ce7ebeca3cef6dcea521f","unresolved":false,"context_lines":[{"line_number":2313,"context_line":"        self.put(url, body\u003d{\u0027service_provider\u0027: sp},"},{"line_number":2314,"context_line":"                 expected_status\u003d403)"},{"line_number":2315,"context_line":""},{"line_number":2316,"context_line":"    # FIXME(marek-denis)"},{"line_number":2317,"context_line":"    def test_list_service_providers(self):"},{"line_number":2318,"context_line":"        \"\"\"Test listing of service provider objects."},{"line_number":2319,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa81d914_da1711a2","line":2316,"updated":"2015-01-28 12:23:36.000000000","message":"you should either remove this or add more detail","commit_id":"267ee59090fcd111e900358be8294d31ad9e52d5"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"817b69a60ce1d7be9bc0a2f66c6f5b7132fa127d","unresolved":false,"context_lines":[{"line_number":2313,"context_line":"        self.put(url, body\u003d{\u0027service_provider\u0027: sp},"},{"line_number":2314,"context_line":"                 expected_status\u003d403)"},{"line_number":2315,"context_line":""},{"line_number":2316,"context_line":"    # FIXME(marek-denis)"},{"line_number":2317,"context_line":"    def test_list_service_providers(self):"},{"line_number":2318,"context_line":"        \"\"\"Test listing of service provider objects."},{"line_number":2319,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa81d914_ba189d85","line":2316,"in_reply_to":"fa81d914_da1711a2","updated":"2015-01-28 12:31:37.000000000","message":"Done","commit_id":"267ee59090fcd111e900358be8294d31ad9e52d5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c7063e403e3b9427bb4d0084eee39d1e19a89a50","unresolved":false,"context_lines":[{"line_number":2337,"context_line":"            sp[\u0027id\u0027] \u003d id"},{"line_number":2338,"context_line":""},{"line_number":2339,"context_line":"        url \u003d self.base_url()"},{"line_number":2340,"context_line":"        resp \u003d self.get(url)"},{"line_number":2341,"context_line":"        service_providers \u003d resp.result"},{"line_number":2342,"context_line":"        for service_provider in service_providers[\u0027service_providers\u0027]:"},{"line_number":2343,"context_line":"            id \u003d service_provider[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa81d914_b030b957","line":2340,"updated":"2015-01-28 14:15:04.000000000","message":"you could use assertValidListResponse or something here","commit_id":"c01b542e5a05ab9ade1aa8fccc06b5d7c65f7a92"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ab924a62255cd3f5c756bdf6fca80648b72657f8","unresolved":false,"context_lines":[{"line_number":2337,"context_line":"            sp[\u0027id\u0027] \u003d id"},{"line_number":2338,"context_line":""},{"line_number":2339,"context_line":"        url \u003d self.base_url()"},{"line_number":2340,"context_line":"        resp \u003d self.get(url)"},{"line_number":2341,"context_line":"        service_providers \u003d resp.result"},{"line_number":2342,"context_line":"        for service_provider in service_providers[\u0027service_providers\u0027]:"},{"line_number":2343,"context_line":"            id \u003d service_provider[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa81d914_52276cb6","line":2340,"in_reply_to":"fa81d914_b030b957","updated":"2015-01-28 21:07:51.000000000","message":"In my opinion assertValidListResponse is screwed so I am going to leave it as is until we fix the testing function. \nFor instance, there is no way to test list of reference objects, and in fact we should test returning list of more than one object.","commit_id":"c01b542e5a05ab9ade1aa8fccc06b5d7c65f7a92"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c7063e403e3b9427bb4d0084eee39d1e19a89a50","unresolved":false,"context_lines":[{"line_number":2346,"context_line":"                keys_to_check\u003dself.SP_KEYS)"},{"line_number":2347,"context_line":""},{"line_number":2348,"context_line":"    def test_update_service_provider(self):"},{"line_number":2349,"context_line":"        \"\"\"Update existing service provide."},{"line_number":2350,"context_line":""},{"line_number":2351,"context_line":"        Create new Service Provider object, update default existing one and"},{"line_number":2352,"context_line":"        make sure returned parameters are equal to new service provider object."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa81d914_70e2c1a0","line":2349,"updated":"2015-01-28 14:15:04.000000000","message":"provider*","commit_id":"c01b542e5a05ab9ade1aa8fccc06b5d7c65f7a92"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ab924a62255cd3f5c756bdf6fca80648b72657f8","unresolved":false,"context_lines":[{"line_number":2346,"context_line":"                keys_to_check\u003dself.SP_KEYS)"},{"line_number":2347,"context_line":""},{"line_number":2348,"context_line":"    def test_update_service_provider(self):"},{"line_number":2349,"context_line":"        \"\"\"Update existing service provide."},{"line_number":2350,"context_line":""},{"line_number":2351,"context_line":"        Create new Service Provider object, update default existing one and"},{"line_number":2352,"context_line":"        make sure returned parameters are equal to new service provider object."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa81d914_7e3c4430","line":2349,"in_reply_to":"fa81d914_70e2c1a0","updated":"2015-01-28 21:07:51.000000000","message":"Done","commit_id":"c01b542e5a05ab9ade1aa8fccc06b5d7c65f7a92"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c7063e403e3b9427bb4d0084eee39d1e19a89a50","unresolved":false,"context_lines":[{"line_number":2354,"context_line":"        \"\"\""},{"line_number":2355,"context_line":"        new_sp_ref \u003d self.sp_ref()"},{"line_number":2356,"context_line":"        url \u003d self.base_url(suffix\u003dself.SERVICE_PROVIDER_ID)"},{"line_number":2357,"context_line":"        resp \u003d self.patch(url, body\u003d{\u0027service_provider\u0027: new_sp_ref},"},{"line_number":2358,"context_line":"                          expected_status\u003d200)"},{"line_number":2359,"context_line":"        patch_result \u003d resp.result"},{"line_number":2360,"context_line":"        new_sp_ref[\u0027id\u0027] \u003d self.SERVICE_PROVIDER_ID"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa81d914_709001ed","line":2357,"updated":"2015-01-28 14:15:04.000000000","message":"I don\u0027t see the actual self.put() call being made here.","commit_id":"c01b542e5a05ab9ade1aa8fccc06b5d7c65f7a92"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ab924a62255cd3f5c756bdf6fca80648b72657f8","unresolved":false,"context_lines":[{"line_number":2354,"context_line":"        \"\"\""},{"line_number":2355,"context_line":"        new_sp_ref \u003d self.sp_ref()"},{"line_number":2356,"context_line":"        url \u003d self.base_url(suffix\u003dself.SERVICE_PROVIDER_ID)"},{"line_number":2357,"context_line":"        resp \u003d self.patch(url, body\u003d{\u0027service_provider\u0027: new_sp_ref},"},{"line_number":2358,"context_line":"                          expected_status\u003d200)"},{"line_number":2359,"context_line":"        patch_result \u003d resp.result"},{"line_number":2360,"context_line":"        new_sp_ref[\u0027id\u0027] \u003d self.SERVICE_PROVIDER_ID"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa81d914_d14d2174","line":2357,"in_reply_to":"fa81d914_709001ed","updated":"2015-01-28 21:07:51.000000000","message":"it\u0027s in the setUp()","commit_id":"c01b542e5a05ab9ade1aa8fccc06b5d7c65f7a92"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"23a226d96eff314e86ed58a7ee329f04cef59d56","unresolved":false,"context_lines":[{"line_number":2367,"context_line":""},{"line_number":2368,"context_line":"        self.assertDictEqual(patch_result[\u0027service_provider\u0027],"},{"line_number":2369,"context_line":"                             get_result[\u0027service_provider\u0027])"},{"line_number":2370,"context_line":""},{"line_number":2371,"context_line":"    def test_update_service_provider_unknown_parameter(self):"},{"line_number":2372,"context_line":"        new_sp_ref \u003d self.sp_ref()"},{"line_number":2373,"context_line":"        new_sp_ref[uuid.uuid4().hex] \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa81d914_f06f46c3","line":2370,"updated":"2015-01-29 18:36:46.000000000","message":"Suggest a test that tries an update of a non-mutable parameter.","commit_id":"9526c45bc38a271e473226d3c0712bd166525c8f"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"046fa8c0105b726f867d5c8f8a25b5e959742e89","unresolved":false,"context_lines":[{"line_number":2367,"context_line":""},{"line_number":2368,"context_line":"        self.assertDictEqual(patch_result[\u0027service_provider\u0027],"},{"line_number":2369,"context_line":"                             get_result[\u0027service_provider\u0027])"},{"line_number":2370,"context_line":""},{"line_number":2371,"context_line":"    def test_update_service_provider_unknown_parameter(self):"},{"line_number":2372,"context_line":"        new_sp_ref \u003d self.sp_ref()"},{"line_number":2373,"context_line":"        new_sp_ref[uuid.uuid4().hex] \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa81d914_2b1076a7","line":2370,"in_reply_to":"fa81d914_f06f46c3","updated":"2015-01-30 09:34:48.000000000","message":"Done","commit_id":"9526c45bc38a271e473226d3c0712bd166525c8f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"552daf34b1f810d7f1c9a1be20b5213f43bdb30f","unresolved":false,"context_lines":[{"line_number":2312,"context_line":""},{"line_number":2313,"context_line":"    def sp_ref(self):"},{"line_number":2314,"context_line":"        ref \u003d {"},{"line_number":2315,"context_line":"            \u0027auth_url\u0027: 8 * uuid.uuid4().hex,"},{"line_number":2316,"context_line":"            \u0027enabled\u0027: True,"},{"line_number":2317,"context_line":"            \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":2318,"context_line":"            \u0027sp_url\u0027: 8 * uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_fd958a40","line":2315,"updated":"2015-02-02 21:04:31.000000000","message":"neat","commit_id":"5d10385f9a107120d4b8933730b88b878446122b"}]}
