)]}'
{"openstack/network/v2/_proxy.py":[{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"52431dbfc6dbadacd7e7f5fe8843bbb2646eec19","unresolved":false,"context_lines":[{"line_number":2081,"context_line":"        \"\"\""},{"line_number":2082,"context_line":"        return router.remove_gateway(self.session, **body)"},{"line_number":2083,"context_line":""},{"line_number":2084,"context_line":"    def routers_hosting_l3_agents_list(self, router, **query):"},{"line_number":2085,"context_line":"        \"\"\"Return a generator of L3 agent hosting a router"},{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        :param router: Either the router id or an instance of"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_119c745c","line":2084,"updated":"2016-12-08 21:14:19.000000000","message":"We don\u0027t use \"list\" in the names of the types of calls. If you just remove _list here I think it would be good.","commit_id":"38b38a5b54c99b586ebca82ab1fe6adc8be6c26f"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"22b9f46211e74aa1bc6c3cc5ccaf8fa6dcf875af","unresolved":false,"context_lines":[{"line_number":2081,"context_line":"        \"\"\""},{"line_number":2082,"context_line":"        return router.remove_gateway(self.session, **body)"},{"line_number":2083,"context_line":""},{"line_number":2084,"context_line":"    def routers_hosting_l3_agents_list(self, router, **query):"},{"line_number":2085,"context_line":"        \"\"\"Return a generator of L3 agent hosting a router"},{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        :param router: Either the router id or an instance of"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_27f82e49","line":2084,"in_reply_to":"3a71b18c_119c745c","updated":"2016-12-09 16:50:39.000000000","message":"Done","commit_id":"38b38a5b54c99b586ebca82ab1fe6adc8be6c26f"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"52431dbfc6dbadacd7e7f5fe8843bbb2646eec19","unresolved":false,"context_lines":[{"line_number":2098,"context_line":"                          path_args\u003d{\u0027router_id\u0027: router_id},"},{"line_number":2099,"context_line":"                          **query)"},{"line_number":2100,"context_line":""},{"line_number":2101,"context_line":"    def agent_hosted_routers_list(self, agent, **query):"},{"line_number":2102,"context_line":"        \"\"\"Return a generator of routers hosted by a L3 agent"},{"line_number":2103,"context_line":""},{"line_number":2104,"context_line":"        :param agent: Either the agent id of an instance of"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_519eec54","line":2101,"updated":"2016-12-08 21:14:19.000000000","message":"Remove _list here as well.","commit_id":"38b38a5b54c99b586ebca82ab1fe6adc8be6c26f"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"22b9f46211e74aa1bc6c3cc5ccaf8fa6dcf875af","unresolved":false,"context_lines":[{"line_number":2098,"context_line":"                          path_args\u003d{\u0027router_id\u0027: router_id},"},{"line_number":2099,"context_line":"                          **query)"},{"line_number":2100,"context_line":""},{"line_number":2101,"context_line":"    def agent_hosted_routers_list(self, agent, **query):"},{"line_number":2102,"context_line":"        \"\"\"Return a generator of routers hosted by a L3 agent"},{"line_number":2103,"context_line":""},{"line_number":2104,"context_line":"        :param agent: Either the agent id of an instance of"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_47952ae2","line":2101,"in_reply_to":"3a71b18c_519eec54","updated":"2016-12-09 16:50:39.000000000","message":"Done","commit_id":"38b38a5b54c99b586ebca82ab1fe6adc8be6c26f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"ab62d7432aad03d2480d4f824c02263beefb30e1","unresolved":false,"context_lines":[{"line_number":2296,"context_line":"        \"\"\""},{"line_number":2297,"context_line":"        agent \u003d self._get_resource(_agent.Agent, agent)"},{"line_number":2298,"context_line":"        router \u003d self._get_resource(_router.Router, router)"},{"line_number":2299,"context_line":"        body \u003d {\u0027router_id\u0027: router.id}"},{"line_number":2300,"context_line":"        return agent.add_router_to_agent(self.session, **body)"},{"line_number":2301,"context_line":""},{"line_number":2302,"context_line":"    def remove_router_from_agent(self, agent, router):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_06d7e723","line":2299,"updated":"2017-01-15 07:39:51.000000000","message":"If we pass the router.id as attrs to proxy2.py\u0027s _get_resource, then wont it populate and create a resultant body?","commit_id":"fb59eb656d1643ae391a6cd30ab33b73ea083699"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"43b72c4b0adec8b2bdb8f7529f92d97af4149c88","unresolved":false,"context_lines":[{"line_number":2296,"context_line":"        \"\"\""},{"line_number":2297,"context_line":"        agent \u003d self._get_resource(_agent.Agent, agent)"},{"line_number":2298,"context_line":"        router \u003d self._get_resource(_router.Router, router)"},{"line_number":2299,"context_line":"        body \u003d {\u0027router_id\u0027: router.id}"},{"line_number":2300,"context_line":"        return agent.add_router_to_agent(self.session, **body)"},{"line_number":2301,"context_line":""},{"line_number":2302,"context_line":"    def remove_router_from_agent(self, agent, router):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_2b3431dc","line":2299,"in_reply_to":"7a3c09a3_06d7e723","updated":"2017-01-17 22:17:03.000000000","message":"That\u0027s the point, isn\u0027t it? To have a body with the router id to be added in /agents/%(agent_id)s/l3-routers.","commit_id":"fb59eb656d1643ae391a6cd30ab33b73ea083699"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"d71a2db12ee4e6be8df922af98d34adbdce4c7e9","unresolved":false,"context_lines":[{"line_number":2296,"context_line":"        \"\"\""},{"line_number":2297,"context_line":"        agent \u003d self._get_resource(_agent.Agent, agent)"},{"line_number":2298,"context_line":"        router \u003d self._get_resource(_router.Router, router)"},{"line_number":2299,"context_line":"        body \u003d {\u0027router_id\u0027: router.id}"},{"line_number":2300,"context_line":"        return agent.add_router_to_agent(self.session, **body)"},{"line_number":2301,"context_line":""},{"line_number":2302,"context_line":"    def remove_router_from_agent(self, agent, router):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_3770e80a","line":2299,"in_reply_to":"7a3c09a3_2b3431dc","updated":"2017-01-18 15:54:46.000000000","message":"Rodolfo: Right. For this and the other. router_id or agent_id is needed to build the url for the API endpoint","commit_id":"fb59eb656d1643ae391a6cd30ab33b73ea083699"}],"openstack/network/v2/agent.py":[{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"2dafc78b874342e8268ecae46fd40eaa87d54d12","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                            network_id)"},{"line_number":76,"context_line":"        session.delete(url, endpoint_filter\u003dself.service, json\u003dbody)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def add_router_to_agent(self, session, **body):"},{"line_number":79,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027l3-routers\u0027)"},{"line_number":80,"context_line":"        resp \u003d session.post(url, endpoint_filter\u003dself.service, json\u003dbody)"},{"line_number":81,"context_line":"        return resp.json()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a6eadb0_f211d8ad","line":78,"updated":"2016-12-13 13:38:24.000000000","message":"Sorry to have missed this earlier, but can you make router_id\u003dNone an argument to both of these methods and then work with it that way? We normally do that with these kinds of methods, which makes the proxy implementation just need to call this method with router_id\u003dwhatever, rather than build a body dictionary over there.\n\nI noticed the above two methods do it this way with kwargs, but that\u0027s not how they\u0027re generally done and I have an incoming change that will address that after Qiming\u0027s proxy2 patch merges, so you don\u0027t need to worry about them here.","commit_id":"51b12fb7a699997ce61e93049f5b2d6456efc470"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"1f7c2bdec1121139c4ab5ad6f460cefa663497d4","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                            network_id)"},{"line_number":76,"context_line":"        session.delete(url, endpoint_filter\u003dself.service, json\u003dbody)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def add_router_to_agent(self, session, **body):"},{"line_number":79,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027l3-routers\u0027)"},{"line_number":80,"context_line":"        resp \u003d session.post(url, endpoint_filter\u003dself.service, json\u003dbody)"},{"line_number":81,"context_line":"        return resp.json()"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5201f7_5849df5e","line":78,"in_reply_to":"1a6eadb0_f211d8ad","updated":"2017-01-02 21:52:17.000000000","message":"Do you have an example of this or has your patchset landed to which to base my changes?","commit_id":"51b12fb7a699997ce61e93049f5b2d6456efc470"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"8fabdadaa3af6140fbb895019c5e96b76bbea0be","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                            network_id)"},{"line_number":76,"context_line":"        session.delete(url, endpoint_filter\u003dself.service, json\u003dbody)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def add_router_to_agent(self, session, **body):"},{"line_number":79,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027l3-routers\u0027)"},{"line_number":80,"context_line":"        resp \u003d session.post(url, endpoint_filter\u003dself.service, json\u003dbody)"},{"line_number":81,"context_line":"        return resp.json()"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5201f7_02d43645","line":78,"in_reply_to":"ba5201f7_5849df5e","updated":"2017-01-03 13:54:19.000000000","message":"Check how the other ones are done around the SDK -- the methods on Server in compute and the proxy methods on top of them are the ideal way: https://github.com/openstack/python-openstacksdk/blob/master/openstack/compute/v2/server.py#L136 shows the methods on the resource and https://github.com/openstack/python-openstacksdk/blob/master/openstack/compute/v2/_proxy.py#L426 shows how it\u0027s then done on the proxy side.","commit_id":"51b12fb7a699997ce61e93049f5b2d6456efc470"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"e74836d5052405e2a33b73854e48e23c5ae00bd0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                            network_id)"},{"line_number":76,"context_line":"        session.delete(url, endpoint_filter\u003dself.service, json\u003dbody)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def add_router_to_agent(self, session, **body):"},{"line_number":79,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027l3-routers\u0027)"},{"line_number":80,"context_line":"        resp \u003d session.post(url, endpoint_filter\u003dself.service, json\u003dbody)"},{"line_number":81,"context_line":"        return resp.json()"}],"source_content_type":"text/x-python","patch_set":19,"id":"7a3c09a3_e2e68eaf","line":78,"updated":"2017-01-18 19:05:17.000000000","message":"just make this add_router_to_agent(self, session, router_id) and the following one remove_router_from_agent(self, session, router_id). We don\u0027t build up dictionaries in the proxy to send them through to this layer.","commit_id":"2112832c52494fe7c07f4462b27e6b885bef0098"}],"openstack/network/v2/router.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ec32bc83be56798a08f787f845111f07ecf89d6e","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class RouterL3Agents(resource.Resource):"},{"line_number":122,"context_line":"    resource \u003d \u0027agent\u0027"},{"line_number":123,"context_line":"    resources \u003d \u0027agents\u0027"},{"line_number":124,"context_line":"    base_path \u003d \u0027/routers/%(router_id)s/l3-agents\u0027"},{"line_number":125,"context_line":"    service \u003d network_service.NetworkService()"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_440bcf2b","line":122,"updated":"2016-10-17 17:04:33.000000000","message":"This should be:\n resource_key \u003d \"agent\"","commit_id":"3c32ccc2b938b2e7e30a7129f47007717dce9659"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ec32bc83be56798a08f787f845111f07ecf89d6e","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class RouterL3Agents(resource.Resource):"},{"line_number":122,"context_line":"    resource \u003d \u0027agent\u0027"},{"line_number":123,"context_line":"    resources \u003d \u0027agents\u0027"},{"line_number":124,"context_line":"    base_path \u003d \u0027/routers/%(router_id)s/l3-agents\u0027"},{"line_number":125,"context_line":"    service \u003d network_service.NetworkService()"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_842ec7a3","line":123,"updated":"2016-10-17 17:04:33.000000000","message":"This should be:\n resources_key \u003d \"agents\"","commit_id":"3c32ccc2b938b2e7e30a7129f47007717dce9659"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ec32bc83be56798a08f787f845111f07ecf89d6e","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    resources \u003d \u0027agents\u0027"},{"line_number":124,"context_line":"    base_path \u003d \u0027/routers/%(router_id)s/l3-agents\u0027"},{"line_number":125,"context_line":"    service \u003d network_service.NetworkService()"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # capabilities"},{"line_number":128,"context_line":"    allow_create \u003d False"},{"line_number":129,"context_line":"    allow_retrieve \u003d True"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_570f032e","line":126,"updated":"2016-10-17 17:04:33.000000000","message":"You should add:\n resource_name \u003d \"l3_agent\"","commit_id":"3c32ccc2b938b2e7e30a7129f47007717dce9659"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"52431dbfc6dbadacd7e7f5fe8843bbb2646eec19","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        return resp.json()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class RouterL3Agents(resource.Resource):"},{"line_number":122,"context_line":"    resource_key \u003d \u0027agent\u0027"},{"line_number":123,"context_line":"    resources_key \u003d \u0027agents\u0027"},{"line_number":124,"context_line":"    base_path \u003d \u0027/routers/%(router_id)s/l3-agents\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_b103c075","line":121,"updated":"2016-12-08 21:14:19.000000000","message":"Each resource should be singular, so this should be RouterL3Agent","commit_id":"38b38a5b54c99b586ebca82ab1fe6adc8be6c26f"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"22b9f46211e74aa1bc6c3cc5ccaf8fa6dcf875af","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        return resp.json()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class RouterL3Agents(resource.Resource):"},{"line_number":122,"context_line":"    resource_key \u003d \u0027agent\u0027"},{"line_number":123,"context_line":"    resources_key \u003d \u0027agents\u0027"},{"line_number":124,"context_line":"    base_path \u003d \u0027/routers/%(router_id)s/l3-agents\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_bc68d0bb","line":121,"in_reply_to":"3a71b18c_b103c075","updated":"2016-12-09 16:50:39.000000000","message":"Done","commit_id":"38b38a5b54c99b586ebca82ab1fe6adc8be6c26f"}]}
