)]}'
{"nova/network/neutron.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2da090a87451af8f1ebb5b762fa9370fdf8f0040","unresolved":false,"context_lines":[{"line_number":2631,"context_line":"        client \u003d get_client(context)"},{"line_number":2632,"context_line":"        project_id \u003d context.project_id"},{"line_number":2633,"context_line":"        fips \u003d self._safe_get_floating_ips(client, tenant_id\u003dproject_id)"},{"line_number":2634,"context_line":"        if not fips:"},{"line_number":2635,"context_line":"            return fips"},{"line_number":2636,"context_line":""},{"line_number":2637,"context_line":"        # retrieve and cache the network details now since many callers need"},{"line_number":2638,"context_line":"        # the network name which isn\u0027t present in the response from neutron"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_33354fdd","line":2635,"range":{"start_line":2634,"start_character":0,"end_line":2635,"end_character":23},"updated":"2020-02-04 17:01:28.000000000","message":"do we have a test case for this?","commit_id":"c6dbed2c70f1b490def5245f345ad76b09a5627b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3efae4850b2c1790a6aa76bd06f4817d4f9097dd","unresolved":false,"context_lines":[{"line_number":2631,"context_line":"        client \u003d get_client(context)"},{"line_number":2632,"context_line":"        project_id \u003d context.project_id"},{"line_number":2633,"context_line":"        fips \u003d self._safe_get_floating_ips(client, tenant_id\u003dproject_id)"},{"line_number":2634,"context_line":"        if not fips:"},{"line_number":2635,"context_line":"            return fips"},{"line_number":2636,"context_line":""},{"line_number":2637,"context_line":"        # retrieve and cache the network details now since many callers need"},{"line_number":2638,"context_line":"        # the network name which isn\u0027t present in the response from neutron"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_f3dfb764","line":2635,"range":{"start_line":2634,"start_character":0,"end_line":2635,"end_character":23},"in_reply_to":"3fa7e38b_33354fdd","updated":"2020-02-04 17:06:58.000000000","message":"Yes, test_get_floating_ips_by_project_not_found","commit_id":"c6dbed2c70f1b490def5245f345ad76b09a5627b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2da090a87451af8f1ebb5b762fa9370fdf8f0040","unresolved":false,"context_lines":[{"line_number":2652,"context_line":"        # ...and retrieve the port details for the same reason, but only if"},{"line_number":2653,"context_line":"        # they\u0027re not already there because the fip-port-details extension is"},{"line_number":2654,"context_line":"        # present"},{"line_number":2655,"context_line":"        if not self._has_fip_port_details_extension(context, client):"},{"line_number":2656,"context_line":"            ports \u003d {port[\u0027id\u0027]: port for port in client.list_ports("},{"line_number":2657,"context_line":"                **{\u0027tenant_id\u0027: project_id})[\u0027ports\u0027]}"},{"line_number":2658,"context_line":"            for fip in fips:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_936c43d0","line":2655,"range":{"start_line":2655,"start_character":0,"end_line":2655,"end_character":69},"updated":"2020-02-04 17:01:28.000000000","message":"Does it make sense to check whether any(fip.get(\u0027port_details\u0027) for fip in fips) first? Cause that would be cheaper, no?","commit_id":"c6dbed2c70f1b490def5245f345ad76b09a5627b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3efae4850b2c1790a6aa76bd06f4817d4f9097dd","unresolved":false,"context_lines":[{"line_number":2652,"context_line":"        # ...and retrieve the port details for the same reason, but only if"},{"line_number":2653,"context_line":"        # they\u0027re not already there because the fip-port-details extension is"},{"line_number":2654,"context_line":"        # present"},{"line_number":2655,"context_line":"        if not self._has_fip_port_details_extension(context, client):"},{"line_number":2656,"context_line":"            ports \u003d {port[\u0027id\u0027]: port for port in client.list_ports("},{"line_number":2657,"context_line":"                **{\u0027tenant_id\u0027: project_id})[\u0027ports\u0027]}"},{"line_number":2658,"context_line":"            for fip in fips:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_d3339bc2","line":2655,"range":{"start_line":2655,"start_character":0,"end_line":2655,"end_character":69},"in_reply_to":"3fa7e38b_936c43d0","updated":"2020-02-04 17:06:58.000000000","message":"Considered that, but we cache the port extensions details and only refresh it every \u0027CONF.neutron.extension_sync_interval\u0027 seconds (see \u0027_refresh_neutron_extensions_cache\u0027) so I don\u0027t think it\u0027s worth it","commit_id":"c6dbed2c70f1b490def5245f345ad76b09a5627b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"dc940d768c3c574da408f622879aac3db4ddb6b1","unresolved":false,"context_lines":[{"line_number":2606,"context_line":"        # ...and retrieve the port details for the same reason, but only if"},{"line_number":2607,"context_line":"        # they\u0027re not already there because the fip-port-details extension is"},{"line_number":2608,"context_line":"        # present"},{"line_number":2609,"context_line":"        if not self._has_fip_port_details_extension(context, client):"},{"line_number":2610,"context_line":"            port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":2611,"context_line":"            try:"},{"line_number":2612,"context_line":"                fip[\u0027port_details\u0027] \u003d client.show_port("}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_69667a2b","line":2609,"updated":"2020-02-04 19:49:16.000000000","message":"I assume that the presence of this extension means port_details will always be in the fip object? Sounds like the caller(s) expect this to be filled, but we don\u0027t actually fill it if it\u0027s absent, just if the extension isn\u0027t loaded.","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77d6c1dee03cab2a40b7b3e98465ead67623cac5","unresolved":false,"context_lines":[{"line_number":2606,"context_line":"        # ...and retrieve the port details for the same reason, but only if"},{"line_number":2607,"context_line":"        # they\u0027re not already there because the fip-port-details extension is"},{"line_number":2608,"context_line":"        # present"},{"line_number":2609,"context_line":"        if not self._has_fip_port_details_extension(context, client):"},{"line_number":2610,"context_line":"            port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":2611,"context_line":"            try:"},{"line_number":2612,"context_line":"                fip[\u0027port_details\u0027] \u003d client.show_port("}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_7233b6c4","line":2609,"in_reply_to":"3fa7e38b_69667a2b","updated":"2020-02-05 10:30:41.000000000","message":"Yup, that\u0027s my understanding after discussing with ralonsoh","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eb10a3b55de75dafdf795bc6bff004cc6e3ef4fe","unresolved":false,"context_lines":[{"line_number":2606,"context_line":"        # ...and retrieve the port details for the same reason, but only if"},{"line_number":2607,"context_line":"        # they\u0027re not already there because the fip-port-details extension is"},{"line_number":2608,"context_line":"        # present"},{"line_number":2609,"context_line":"        if not self._has_fip_port_details_extension(context, client):"},{"line_number":2610,"context_line":"            port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":2611,"context_line":"            try:"},{"line_number":2612,"context_line":"                fip[\u0027port_details\u0027] \u003d client.show_port("}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_9252f235","line":2609,"in_reply_to":"3fa7e38b_7233b6c4","updated":"2020-02-05 11:12:47.000000000","message":"Exactly, if the extension is enabled, \"port_details\" will be present.\n\nBetter than pointing to the neutron code, the SDK code: https://github.com/openstack/openstacksdk/blob/master/openstack/network/v2/floating_ip.py#L60-L64","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a7a21f5c4470040737c58e130b42cdc238e9d988","unresolved":false,"context_lines":[{"line_number":2612,"context_line":"                fip[\u0027port_details\u0027] \u003d client.show_port("},{"line_number":2613,"context_line":"                    port_id)[\u0027port\u0027]"},{"line_number":2614,"context_line":"            except neutron_client_exc.PortNotFoundClient:"},{"line_number":2615,"context_line":"                raise exception.PortNotFound(port_id\u003dport_id)"},{"line_number":2616,"context_line":""},{"line_number":2617,"context_line":"        return fip"},{"line_number":2618,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b7890b2a","line":2615,"updated":"2020-02-06 10:04:35.000000000","message":"\u003cralonsoh\u003e https://review.opendev.org/#/c/705760/2/nova/network/neutron.py@2615\n\u003cralonsoh\u003e I didn\u0027t realize this when I reviewed the patch\n\u003cralonsoh\u003e but a FIP can NOT be attached to a port\n\u003cralonsoh\u003e so this exception... is unnecessary. Actually we are still having some problems in the Neutron OVN CI\n\u003cralonsoh\u003e https://7147d7e07a0a4e67ee4e-8dbb68c995c97f9fb5b4258bb26a4c49.ssl.cf2.rackcdn.com/703537/7/check/neutron-ovn-tempest-ovs-release/7b55444/testr_results.html\n\u003cstephenfin\u003e damn. okay, let me fix that up\n\u003cralonsoh\u003e stephenfin, let me first check the test\n\u003cralonsoh\u003e I would like to confirm that in the logs\n\u003cralonsoh\u003e stephenfin, https://7147d7e07a0a4e67ee4e-8dbb68c995c97f9fb5b4258bb26a4c49.ssl.cf2.rackcdn.com/703537/7/check/neutron-ovn-tempest-ovs-release/7b55444/controller/logs/screen-n-api.txt\n\u003cralonsoh\u003e we are creating IPs without any port associated","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"dc940d768c3c574da408f622879aac3db4ddb6b1","unresolved":false,"context_lines":[{"line_number":2643,"context_line":""},{"line_number":2644,"context_line":"        return fip"},{"line_number":2645,"context_line":""},{"line_number":2646,"context_line":"    def get_floating_ip_pools(self, context):"},{"line_number":2647,"context_line":"        \"\"\"Return floating IP pools a.k.a. external networks.\"\"\""},{"line_number":2648,"context_line":"        client \u003d get_client(context)"},{"line_number":2649,"context_line":"        data \u003d client.list_networks(**{constants.NET_EXTERNAL: True})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_c9ec4e93","line":2646,"updated":"2020-02-04 19:49:16.000000000","message":"Why was this moved? It looks like it\u0027s unchanged...?","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3b70f6d7b34451add51e1cef6a7b5bae0e7ee8e","unresolved":false,"context_lines":[{"line_number":2643,"context_line":""},{"line_number":2644,"context_line":"        return fip"},{"line_number":2645,"context_line":""},{"line_number":2646,"context_line":"    def get_floating_ip_pools(self, context):"},{"line_number":2647,"context_line":"        \"\"\"Return floating IP pools a.k.a. external networks.\"\"\""},{"line_number":2648,"context_line":"        client \u003d get_client(context)"},{"line_number":2649,"context_line":"        data \u003d client.list_networks(**{constants.NET_EXTERNAL: True})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_18caa318","line":2646,"in_reply_to":"3fa7e38b_5259dafd","updated":"2020-02-05 13:09:09.000000000","message":"And if I don\u0027t respin, I\u0027m going to work on combining those separately since they\u0027re _extremely_ similar now","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77d6c1dee03cab2a40b7b3e98465ead67623cac5","unresolved":false,"context_lines":[{"line_number":2643,"context_line":""},{"line_number":2644,"context_line":"        return fip"},{"line_number":2645,"context_line":""},{"line_number":2646,"context_line":"    def get_floating_ip_pools(self, context):"},{"line_number":2647,"context_line":"        \"\"\"Return floating IP pools a.k.a. external networks.\"\"\""},{"line_number":2648,"context_line":"        client \u003d get_client(context)"},{"line_number":2649,"context_line":"        data \u003d client.list_networks(**{constants.NET_EXTERNAL: True})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_5259dafd","line":2646,"in_reply_to":"3fa7e38b_c9ec4e93","updated":"2020-02-05 10:30:41.000000000","message":"I was experimenting with combining \u0027get_floating_ip\u0027 and \u0027get_floating_ip_by_address\u0027 since they\u0027re very similar and forgot to move this back /o\\ Will undo if I need to respin","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"dc940d768c3c574da408f622879aac3db4ddb6b1","unresolved":false,"context_lines":[{"line_number":2654,"context_line":"        project_id \u003d context.project_id"},{"line_number":2655,"context_line":"        fips \u003d self._safe_get_floating_ips(client, tenant_id\u003dproject_id)"},{"line_number":2656,"context_line":"        if not fips:"},{"line_number":2657,"context_line":"            return fips"},{"line_number":2658,"context_line":""},{"line_number":2659,"context_line":"        # retrieve and cache the network details now since many callers need"},{"line_number":2660,"context_line":"        # the network name which isn\u0027t present in the response from neutron"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_89b41683","line":2657,"updated":"2020-02-04 19:49:16.000000000","message":"Is this related to the rest of the fix here? The commit message makes it sound like the fix is just to fill in the details manually if the extension isn\u0027t present. So, I\u0027m not sure why this change is here.","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77d6c1dee03cab2a40b7b3e98465ead67623cac5","unresolved":false,"context_lines":[{"line_number":2654,"context_line":"        project_id \u003d context.project_id"},{"line_number":2655,"context_line":"        fips \u003d self._safe_get_floating_ips(client, tenant_id\u003dproject_id)"},{"line_number":2656,"context_line":"        if not fips:"},{"line_number":2657,"context_line":"            return fips"},{"line_number":2658,"context_line":""},{"line_number":2659,"context_line":"        # retrieve and cache the network details now since many callers need"},{"line_number":2660,"context_line":"        # the network name which isn\u0027t present in the response from neutron"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d2f14ae1","line":2657,"in_reply_to":"3fa7e38b_89b41683","updated":"2020-02-05 10:30:41.000000000","message":"It\u0027s needed to minimize test impact. If I don\u0027t do this, a whole load of functional and unit tests need to be updated because we\u0027re now always calling neutron a second time (to check for the extension). It\u0027s technically better anyway since there\u0027s no point making that additional call if we don\u0027t have floating IPs to extract port information for","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"dc940d768c3c574da408f622879aac3db4ddb6b1","unresolved":false,"context_lines":[{"line_number":2675,"context_line":"        # they\u0027re not already there because the fip-port-details extension is"},{"line_number":2676,"context_line":"        # present"},{"line_number":2677,"context_line":"        if not self._has_fip_port_details_extension(context, client):"},{"line_number":2678,"context_line":"            ports \u003d {port[\u0027id\u0027]: port for port in client.list_ports("},{"line_number":2679,"context_line":"                **{\u0027tenant_id\u0027: project_id})[\u0027ports\u0027]}"},{"line_number":2680,"context_line":"            for fip in fips:"},{"line_number":2681,"context_line":"                port_id \u003d fip[\u0027port_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_497dbec1","line":2678,"range":{"start_line":2678,"start_character":50,"end_line":2678,"end_character":67},"updated":"2020-02-04 19:49:16.000000000","message":"Is this a detailed list? This code seems to imply that it is, but the commit message makes it sound like we have to show details on the port if that extension is missing...","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77d6c1dee03cab2a40b7b3e98465ead67623cac5","unresolved":false,"context_lines":[{"line_number":2675,"context_line":"        # they\u0027re not already there because the fip-port-details extension is"},{"line_number":2676,"context_line":"        # present"},{"line_number":2677,"context_line":"        if not self._has_fip_port_details_extension(context, client):"},{"line_number":2678,"context_line":"            ports \u003d {port[\u0027id\u0027]: port for port in client.list_ports("},{"line_number":2679,"context_line":"                **{\u0027tenant_id\u0027: project_id})[\u0027ports\u0027]}"},{"line_number":2680,"context_line":"            for fip in fips:"},{"line_number":2681,"context_line":"                port_id \u003d fip[\u0027port_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d21aaa17","line":2678,"range":{"start_line":2678,"start_character":50,"end_line":2678,"end_character":67},"in_reply_to":"3fa7e38b_497dbec1","updated":"2020-02-05 10:30:41.000000000","message":"I don\u0027t know if there\u0027s a difference, but all I need is the \u0027device_id\u0027 field which _is_ included here [1]. Perhaps I could optimize this in the future to just request that field?\n\n[1] https://docs.openstack.org/api-ref/network/v2/?expanded\u003dlist-ports-detail#list-ports","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"45502bb869168b0f5f81e8cfb4e68647273de9ef","unresolved":false,"context_lines":[{"line_number":2675,"context_line":"        # they\u0027re not already there because the fip-port-details extension is"},{"line_number":2676,"context_line":"        # present"},{"line_number":2677,"context_line":"        if not self._has_fip_port_details_extension(context, client):"},{"line_number":2678,"context_line":"            ports \u003d {port[\u0027id\u0027]: port for port in client.list_ports("},{"line_number":2679,"context_line":"                **{\u0027tenant_id\u0027: project_id})[\u0027ports\u0027]}"},{"line_number":2680,"context_line":"            for fip in fips:"},{"line_number":2681,"context_line":"                port_id \u003d fip[\u0027port_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_883082b9","line":2678,"range":{"start_line":2678,"start_character":50,"end_line":2678,"end_character":67},"in_reply_to":"3fa7e38b_65cd2f2e","updated":"2020-02-05 15:45:37.000000000","message":"\u003e Oh, yes, that exactly. This should return something like:\n\nDiscussed on IRC. By \"This\" I was referring to \"This entire function\", not \u0027list_ports\u0027. \u0027list_ports\u0027 will return what\u0027s in the api-ref [1]\n\n[1] https://docs.openstack.org/api-ref/network/v2/?expanded\u003dlist-ports-detail#list-ports","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8bbcc214f367aacde3baf24494d54a2c96b41953","unresolved":false,"context_lines":[{"line_number":2675,"context_line":"        # they\u0027re not already there because the fip-port-details extension is"},{"line_number":2676,"context_line":"        # present"},{"line_number":2677,"context_line":"        if not self._has_fip_port_details_extension(context, client):"},{"line_number":2678,"context_line":"            ports \u003d {port[\u0027id\u0027]: port for port in client.list_ports("},{"line_number":2679,"context_line":"                **{\u0027tenant_id\u0027: project_id})[\u0027ports\u0027]}"},{"line_number":2680,"context_line":"            for fip in fips:"},{"line_number":2681,"context_line":"                port_id \u003d fip[\u0027port_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_45e353a1","line":2678,"range":{"start_line":2678,"start_character":50,"end_line":2678,"end_character":67},"in_reply_to":"3fa7e38b_65cd2f2e","updated":"2020-02-05 14:41:02.000000000","message":"If that\u0027s the case, should L2685 be:\n\n fip[\u0027port_id\u0027] \u003d ports[port_id][\u0027port_details\u0027]\n\nthen?","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"097f7d4744c56b1abf74d481be436bf9692bedee","unresolved":false,"context_lines":[{"line_number":2675,"context_line":"        # they\u0027re not already there because the fip-port-details extension is"},{"line_number":2676,"context_line":"        # present"},{"line_number":2677,"context_line":"        if not self._has_fip_port_details_extension(context, client):"},{"line_number":2678,"context_line":"            ports \u003d {port[\u0027id\u0027]: port for port in client.list_ports("},{"line_number":2679,"context_line":"                **{\u0027tenant_id\u0027: project_id})[\u0027ports\u0027]}"},{"line_number":2680,"context_line":"            for fip in fips:"},{"line_number":2681,"context_line":"                port_id \u003d fip[\u0027port_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_65cd2f2e","line":2678,"range":{"start_line":2678,"start_character":50,"end_line":2678,"end_character":67},"in_reply_to":"3fa7e38b_c5e983e4","updated":"2020-02-05 14:39:03.000000000","message":"Oh, yes, that exactly. This should return something like:\n\n  [\n      {\n          \u0027id\u0027: $floating_ip_id,\n          ...\n          \u0027network_details\u0027: {\n              \u0027id\u0027: $network_id,\n              ...\n          },\n          \u0027port_details\u0027: {\n              \u0027id\u0027: $port_id,\n              \u0027device_id\u0027: $port_device_id,\n              ...\n          }\n      },\n      ...\n  ]","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"98b8ccc9792e75a175a82fad3ccd0e7b2a6d17c8","unresolved":false,"context_lines":[{"line_number":2675,"context_line":"        # they\u0027re not already there because the fip-port-details extension is"},{"line_number":2676,"context_line":"        # present"},{"line_number":2677,"context_line":"        if not self._has_fip_port_details_extension(context, client):"},{"line_number":2678,"context_line":"            ports \u003d {port[\u0027id\u0027]: port for port in client.list_ports("},{"line_number":2679,"context_line":"                **{\u0027tenant_id\u0027: project_id})[\u0027ports\u0027]}"},{"line_number":2680,"context_line":"            for fip in fips:"},{"line_number":2681,"context_line":"                port_id \u003d fip[\u0027port_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_c5e983e4","line":2678,"range":{"start_line":2678,"start_character":50,"end_line":2678,"end_character":67},"in_reply_to":"3fa7e38b_d21aaa17","updated":"2020-02-05 14:27:39.000000000","message":"No, ports [port_id] is what you\u0027re using as the details field, which comes from here, which is why I\u0027m asking. Are you saying that ports[port_id][\u0027device_id\u0027] is the \"detail\" that callers are looking for?","commit_id":"eef658bf5354e1a47b742851c29a1479c9aebcf8"}],"nova/tests/unit/network/test_neutron.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1bdcbf70ed9b794f3c95325d21c0b72e5a25e56a","unresolved":false,"context_lines":[{"line_number":5348,"context_line":"        else:"},{"line_number":5349,"context_line":"            mock_nc.list_ports.assert_called_once_with("},{"line_number":5350,"context_line":"                tenant_id\u003dself.context.project_id)"},{"line_number":5351,"context_line":"            self.assertIn(\u0027port_details\u0027, fips[0])"},{"line_number":5352,"context_line":""},{"line_number":5353,"context_line":"    def test_get_floating_ips_by_project_with_fip_port_details_ext(self):"},{"line_number":5354,"context_line":"        self._test_get_floating_ips_by_project(True)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_8110705a","line":5351,"updated":"2020-02-04 16:58:39.000000000","message":"I\u0027m not a supporter for test helpers with such conditionals but meh.","commit_id":"c6dbed2c70f1b490def5245f345ad76b09a5627b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"87770e4dd0f030cb7d333f1c010c9099ae735336","unresolved":false,"context_lines":[{"line_number":5348,"context_line":"        else:"},{"line_number":5349,"context_line":"            mock_nc.list_ports.assert_called_once_with("},{"line_number":5350,"context_line":"                tenant_id\u003dself.context.project_id)"},{"line_number":5351,"context_line":"            self.assertIn(\u0027port_details\u0027, fips[0])"},{"line_number":5352,"context_line":""},{"line_number":5353,"context_line":"    def test_get_floating_ips_by_project_with_fip_port_details_ext(self):"},{"line_number":5354,"context_line":"        self._test_get_floating_ips_by_project(True)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_132a9377","line":5351,"in_reply_to":"3fa7e38b_8110705a","updated":"2020-02-04 16:59:51.000000000","message":"neither am I, but the alternative was a _lot_ of duplication or returning the \u0027mock_nc\u0027 variable from this function. I liked neither","commit_id":"c6dbed2c70f1b490def5245f345ad76b09a5627b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2da090a87451af8f1ebb5b762fa9370fdf8f0040","unresolved":false,"context_lines":[{"line_number":5350,"context_line":"                tenant_id\u003dself.context.project_id)"},{"line_number":5351,"context_line":"            self.assertIn(\u0027port_details\u0027, fips[0])"},{"line_number":5352,"context_line":""},{"line_number":5353,"context_line":"    def test_get_floating_ips_by_project_with_fip_port_details_ext(self):"},{"line_number":5354,"context_line":"        self._test_get_floating_ips_by_project(True)"},{"line_number":5355,"context_line":""},{"line_number":5356,"context_line":"    def test_get_floating_ips_by_project_without_fip_port_details_ext(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_4102780f","line":5353,"updated":"2020-02-04 17:01:28.000000000","message":"could ddt instead","commit_id":"c6dbed2c70f1b490def5245f345ad76b09a5627b"}]}
