)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6310bb2a4f107c2c65d88382d8db9da0cf68d4ac","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add Network IP Availability Extension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There was a spec approved for Network IP Availability [1]. There is"},{"line_number":10,"context_line":"a patch in Neutron for adding this api extension [2] and patch for adding"},{"line_number":11,"context_line":"commands for its usage [3]. This change basically implements new api that"},{"line_number":12,"context_line":"can be used to check network usage stats of all the networks or specific"},{"line_number":13,"context_line":"network created by Neutron"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7af24918_7a0b6b7d","line":10,"updated":"2016-03-03 22:58:51.000000000","message":"The description message exceeds the maximum number of characters","commit_id":"56200f8cd5d871ddd68688683a5f10c5e50a98cc"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"fed515cc54112e457b65ebe84aa1340a92f53a0a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"[3]. https://review.openstack.org/#/c/269926"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I4b88adedc8de975d4aca9aeeb5622ec3410686ec"},{"line_number":22,"context_line":"Depends-On: I81406054d46b2c0e0ffcd56e898e329f943ba46f"},{"line_number":23,"context_line":"Co-Authored-By: Dariusz Smigiel \u003cdariusz.smigiel@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa0719c6_0cb4e77f","line":22,"range":{"start_line":22,"start_character":12,"end_line":22,"end_character":53},"updated":"2016-03-23 15:39:58.000000000","message":"you can remove depends on as that patch is already merged.","commit_id":"be1d9f3d3ee04c12bdd6389044768735b05c9050"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"fd10421e5a74c93dcc7709e04e54d762cc099aba","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Network IP Availability Extension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There is a feature that merged for Network IP Availability [1]. There is"},{"line_number":10,"context_line":"a patch in Neutron for adding this api extension [2] and patch for adding"},{"line_number":11,"context_line":"commands for its usage [3]. This change basically implements new api that"},{"line_number":12,"context_line":"can be used to check network usage stats of all the networks or specific"},{"line_number":13,"context_line":"network created by Neutron"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"ba0121b8_ee964793","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":28},"updated":"2016-03-29 09:40:28.000000000","message":"What\u0027s the [1], [2] and [3] reference to?","commit_id":"910f1a6b9c4968cbfe83eaaa47e73ff66c3125f5"},{"author":{"_account_id":19611,"name":"Brian Stajkowski","email":"brian.stajkowski@rackspace.com","username":"ski"},"change_message_id":"82ec5b318715128ec70011ae269540dba566f474","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Network IP Availability Extension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There is a feature that merged for Network IP Availability [1]. There is"},{"line_number":10,"context_line":"a patch in Neutron for adding this api extension [2] and patch for adding"},{"line_number":11,"context_line":"commands for its usage [3]. This change basically implements new api that"},{"line_number":12,"context_line":"can be used to check network usage stats of all the networks or specific"},{"line_number":13,"context_line":"network created by Neutron"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"9a061dce_ed412d3b","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":28},"in_reply_to":"ba0121b8_ee964793","updated":"2016-04-04 19:27:08.000000000","message":"Done","commit_id":"910f1a6b9c4968cbfe83eaaa47e73ff66c3125f5"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"e964580b2bfead7c97ef59d9c841cfea013e9dae","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Network IP Availability Extension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There is a feature that merged for Network IP Availability. There is"},{"line_number":10,"context_line":"a patch in Neutron for adding this api extension and patch for adding"},{"line_number":11,"context_line":"commands for its usage. This change basically implements new api that"},{"line_number":12,"context_line":"can be used to check network usage stats of all the networks or specific"},{"line_number":13,"context_line":"network created by Neutron"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"ba0121b8_2073c016","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":23},"updated":"2016-03-30 21:22:24.000000000","message":"What about?\n\nNetwork IP Availability has been merged in Neutron, as result a new extension is available.","commit_id":"d20358919696046779e00fa76da136c53de7d94c"},{"author":{"_account_id":19611,"name":"Brian Stajkowski","email":"brian.stajkowski@rackspace.com","username":"ski"},"change_message_id":"b9506bd17b4d1bc899c4684837006c140294ebb9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Network IP Availability Extension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There is a feature that merged for Network IP Availability. There is"},{"line_number":10,"context_line":"a patch in Neutron for adding this api extension and patch for adding"},{"line_number":11,"context_line":"commands for its usage. This change basically implements new api that"},{"line_number":12,"context_line":"can be used to check network usage stats of all the networks or specific"},{"line_number":13,"context_line":"network created by Neutron"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"9a061dce_424f4892","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":23},"in_reply_to":"ba0121b8_2073c016","updated":"2016-04-04 19:27:12.000000000","message":"Done","commit_id":"d20358919696046779e00fa76da136c53de7d94c"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"e964580b2bfead7c97ef59d9c841cfea013e9dae","unresolved":false,"context_lines":[{"line_number":12,"context_line":"can be used to check network usage stats of all the networks or specific"},{"line_number":13,"context_line":"network created by Neutron"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch will add the API extensions to Horizon."},{"line_number":16,"context_line":"Specifically add IP usage stats to the admin network table."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Partially Implements Blueprint: ip-capacity"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"ba0121b8_204aa0ac","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":50},"updated":"2016-03-30 21:22:24.000000000","message":"This change adds support of API extensions in Horizon.","commit_id":"d20358919696046779e00fa76da136c53de7d94c"},{"author":{"_account_id":19611,"name":"Brian Stajkowski","email":"brian.stajkowski@rackspace.com","username":"ski"},"change_message_id":"b9506bd17b4d1bc899c4684837006c140294ebb9","unresolved":false,"context_lines":[{"line_number":12,"context_line":"can be used to check network usage stats of all the networks or specific"},{"line_number":13,"context_line":"network created by Neutron"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch will add the API extensions to Horizon."},{"line_number":16,"context_line":"Specifically add IP usage stats to the admin network table."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Partially Implements Blueprint: ip-capacity"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"9a061dce_22821495","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":50},"in_reply_to":"ba0121b8_204aa0ac","updated":"2016-04-04 19:27:12.000000000","message":"Done","commit_id":"d20358919696046779e00fa76da136c53de7d94c"}],"openstack_dashboard/api/neutron.py":[{"author":{"_account_id":20509,"name":"Daniel Castellanos","email":"luis.daniel.castellanos@intel.com","username":"lcastell"},"change_message_id":"10926a2f7d5be557d34cb7c7a881a1bd9575d06d","unresolved":false,"context_lines":[{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"def network_ip_availability_show(request, network):"},{"line_number":1034,"context_line":"    ip_availability \u003d neutronclient(request).show_network_ip_availability("},{"line_number":1035,"context_line":"        network)"},{"line_number":1036,"context_line":"    return ip_availability"},{"line_number":1037,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_74fd426d","line":1034,"range":{"start_line":1034,"start_character":4,"end_line":1034,"end_character":19},"updated":"2016-03-03 22:25:07.000000000","message":"There\u0027s no need for this variable, you can just return whatever the neutronclient call returns","commit_id":"56200f8cd5d871ddd68688683a5f10c5e50a98cc"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"8636fb637b5be8a73a64dd62c064eaf120b5b614","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"    return [Agent(a) for a in agents[\u0027agents\u0027]]"},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"def network_ip_availability_show(request, network):"},{"line_number":1034,"context_line":"    ip_availability \u003d neutronclient(request).show_network_ip_availability("},{"line_number":1035,"context_line":"        network)"},{"line_number":1036,"context_line":"    return ip_availability"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_742ac57f","line":1033,"updated":"2016-03-17 00:34:16.000000000","message":"Please add a test to the neutron api tests for this function you\u0027re adding.\n\nhttps://github.com/openstack/horizon/blob/master/openstack_dashboard/test/api_tests/neutron_tests.py","commit_id":"8731025850e1e9dce2070af62825c4ccb06d3c77"},{"author":{"_account_id":20772,"name":"Sergei Chipiga","email":"schipiga@mirantis.com","username":"schipiga"},"change_message_id":"6e4783426eb1069e19ed6ec5f6d2ff2a9323898e","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"    return [Agent(a) for a in agents[\u0027agents\u0027]]"},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"def network_ip_availability_show(request, network):"},{"line_number":1034,"context_line":"    ip_availability \u003d neutronclient(request).show_network_ip_availability("},{"line_number":1035,"context_line":"        network)"},{"line_number":1036,"context_line":"    return ip_availability"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa0719c6_fd95d132","line":1033,"updated":"2016-03-23 19:56:46.000000000","message":"may be call func as `show_network_ip_availability` for consistency ?","commit_id":"144ea049c5fb709cd4d4b97bdf15061fa58c8f87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e3be9b0cf4cd22c708ecc88a9f932c1de5c9d149","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"                                                                     **params)"},{"line_number":1058,"context_line":"    return [Agent(a) for a in agents[\u0027agents\u0027]]"},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":""},{"line_number":1061,"context_line":"def show_network_ip_availability(request, network_id):"},{"line_number":1062,"context_line":"    ip_availability \u003d neutronclient(request).show_network_ip_availability("},{"line_number":1063,"context_line":"        network_id)"}],"source_content_type":"text/x-python","patch_set":41,"id":"bab6814e_59004566","line":1060,"updated":"2016-05-23 07:26:55.000000000","message":"note: the current neutronclient requirement is \u003e\u003d4.2.0 and there is no need to change global requirements to support this feature.","commit_id":"1815536d870dd5f33d3526bf13dd99db01d5913d"}],"openstack_dashboard/dashboards/admin/networks/ports/tests.py":[{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"858430c16574a183d19e9efef4d69df2ad4b6dae","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def test_port_detail_with_mac_learning(self):"},{"line_number":42,"context_line":"        self._test_port_detail(mac_learning\u003dTrue)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _test_port_detail(self, mac_learning\u003dFalse):"},{"line_number":45,"context_line":"        port \u003d self.ports.first()"},{"line_number":46,"context_line":"        network_id \u003d self.networks.first().id"},{"line_number":47,"context_line":"        api.neutron.port_get(IsA(http.HttpRequest), port.id)\\"}],"source_content_type":"text/x-python","patch_set":45,"id":"9abb7d3a_d177b706","line":44,"updated":"2016-06-02 10:58:08.000000000","message":"py3 tests seem to be expecting the api calls for this test in a different order. Not sure why.","commit_id":"9a6d29e28ef2efefea87915aba19dd25bd9126c0"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"516bdce2e5c7735445d134ef3468b5f5fcb75672","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def test_port_detail_with_mac_learning(self):"},{"line_number":42,"context_line":"        self._test_port_detail(mac_learning\u003dTrue)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _test_port_detail(self, mac_learning\u003dFalse):"},{"line_number":45,"context_line":"        port \u003d self.ports.first()"},{"line_number":46,"context_line":"        network_id \u003d self.networks.first().id"},{"line_number":47,"context_line":"        api.neutron.port_get(IsA(http.HttpRequest), port.id)\\"}],"source_content_type":"text/x-python","patch_set":45,"id":"9abb7d3a_f761efd4","line":44,"in_reply_to":"9abb7d3a_d177b706","updated":"2016-06-02 18:46:51.000000000","message":"Done","commit_id":"9a6d29e28ef2efefea87915aba19dd25bd9126c0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0bfd4a156165cd6e288fb0b9cfd2c4e6c1abd6b6","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            .AndReturn(self.ports.first())"},{"line_number":49,"context_line":"        api.neutron.is_extension_supported("},{"line_number":50,"context_line":"            IsA(http.HttpRequest),"},{"line_number":51,"context_line":"            \u0027mac-learning\u0027).AndReturn(True)"},{"line_number":52,"context_line":"        api.neutron.is_extension_supported("},{"line_number":53,"context_line":"            IsA(http.HttpRequest),"},{"line_number":54,"context_line":"            \u0027network-ip-availability\u0027).AndReturn(True)"}],"source_content_type":"text/x-python","patch_set":45,"id":"9abb7d3a_44d022ca","line":51,"range":{"start_line":51,"start_character":38,"end_line":51,"end_character":42},"updated":"2016-06-02 12:46:36.000000000","message":"I think \u0027True\u0027 should be \u0027mac_learning\u0027 instead.\nL.51 and L.56 are inconsistent.","commit_id":"9a6d29e28ef2efefea87915aba19dd25bd9126c0"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"516bdce2e5c7735445d134ef3468b5f5fcb75672","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            .AndReturn(self.ports.first())"},{"line_number":49,"context_line":"        api.neutron.is_extension_supported("},{"line_number":50,"context_line":"            IsA(http.HttpRequest),"},{"line_number":51,"context_line":"            \u0027mac-learning\u0027).AndReturn(True)"},{"line_number":52,"context_line":"        api.neutron.is_extension_supported("},{"line_number":53,"context_line":"            IsA(http.HttpRequest),"},{"line_number":54,"context_line":"            \u0027network-ip-availability\u0027).AndReturn(True)"}],"source_content_type":"text/x-python","patch_set":45,"id":"9abb7d3a_9764e3e5","line":51,"range":{"start_line":51,"start_character":38,"end_line":51,"end_character":42},"in_reply_to":"9abb7d3a_44d022ca","updated":"2016-06-02 18:46:51.000000000","message":"Done","commit_id":"9a6d29e28ef2efefea87915aba19dd25bd9126c0"}],"openstack_dashboard/dashboards/admin/networks/subnets/tables.py":[{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"5f46c002244b6bb0fb9826d2c574bac40e5300e9","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    cidr \u003d tables.Column(\"cidr\", verbose_name\u003d_(\"CIDR\"))"},{"line_number":95,"context_line":"    ip_version \u003d tables.Column(\"ipver_str\", verbose_name\u003d_(\"IP Version\"))"},{"line_number":96,"context_line":"    gateway_ip \u003d tables.Column(\"gateway_ip\", verbose_name\u003d_(\"Gateway IP\"))"},{"line_number":97,"context_line":"    subnet_used_ips \u003d tables.Column(\"used_ips\","},{"line_number":98,"context_line":"                                    verbose_name\u003d_(\"Used IPs\"))"},{"line_number":99,"context_line":"    subnet_free_ips \u003d tables.Column(\"free_ips\","},{"line_number":100,"context_line":"                                    verbose_name\u003d_(\"Free IPs\"))"}],"source_content_type":"text/x-python","patch_set":38,"id":"dab17558_af87030e","line":97,"updated":"2016-05-06 21:39:11.000000000","message":"+1 on having this here; I think displaying this info here, instead of on the networks list page is a good first step until we can make asynchronous calls to retrieve the info for the networks list page.","commit_id":"35068826250e4c8ef867de29e380b4c20ae093e6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ecd435b97a57b4e6679c949a04fd8e6f124ed738","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    subnet_used_ips \u003d tables.Column(\"used_ips\","},{"line_number":98,"context_line":"                                    verbose_name\u003d_(\"Used IPs\"))"},{"line_number":99,"context_line":"    subnet_free_ips \u003d tables.Column(\"free_ips\","},{"line_number":100,"context_line":"                                    verbose_name\u003d_(\"Free IPs\"))"},{"line_number":101,"context_line":"    failure_url \u003d reverse_lazy(\u0027horizon:admin:networks:index\u0027)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def get_object_display(self, subnet):"}],"source_content_type":"text/x-python","patch_set":42,"id":"bab6814e_8c08582f","line":100,"updated":"2016-05-24 13:45:02.000000000","message":"For IPv6 subnets, we tend to have many many IPs.\nIn DevStack, I see 18446744073709551612 for free IPs.\n\nMy idea is to name a column named \u0027IP usage\u0027 with a usage percentage in the table and have detail the number of used/free IPs in the subnet detail.\n\nFor example, \"15% used\". In addition, we can show the number of the remaining free IP addresses like \"92% used (20 addresses remaining)\" if the usage exceeds some threshold.\n\nOn the other hand, we can improve it later.\n\nThought?","commit_id":"32a86336de6c5c6faa00d596f3640ee32ad2efc2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4d78884a7da6a01769e2d684ad2e416be329def7","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"def subnet_ip_availability(availability):"},{"line_number":93,"context_line":"    template_name \u003d \u0027admin/networks/_subnet_ips.html\u0027"},{"line_number":94,"context_line":"    subnet_availability \u003d availability.get(\"free_ips\")"},{"line_number":95,"context_line":"    context \u003d {\"subnet_ip_availability\": subnet_availability}"},{"line_number":96,"context_line":"    return template.loader.render_to_string(template_name, context)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"9abb7d3a_48a17593","line":94,"range":{"start_line":94,"start_character":38,"end_line":94,"end_character":43},"updated":"2016-06-01 23:11:29.000000000","message":"Is there a case where \u0027free_ips\u0027 does not exist?","commit_id":"4fe6b113a38cf967115b0cbfd05673cb02ec0077"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"637e6ea89ad94754d821836ef964f05f187eea36","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"def subnet_ip_availability(availability):"},{"line_number":93,"context_line":"    template_name \u003d \u0027admin/networks/_subnet_ips.html\u0027"},{"line_number":94,"context_line":"    subnet_availability \u003d availability.get(\"free_ips\")"},{"line_number":95,"context_line":"    context \u003d {\"subnet_ip_availability\": subnet_availability}"},{"line_number":96,"context_line":"    return template.loader.render_to_string(template_name, context)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"9abb7d3a_9aac3b8d","line":94,"range":{"start_line":94,"start_character":38,"end_line":94,"end_character":43},"in_reply_to":"9abb7d3a_48a17593","updated":"2016-06-02 03:17:27.000000000","message":"I do not believe so, I will consult Manjeet who wrote the feature for the Neutron client.","commit_id":"4fe6b113a38cf967115b0cbfd05673cb02ec0077"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f4d7a976e64d282836ce479938171ef39b5ff7f","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"def subnet_ip_availability(availability):"},{"line_number":93,"context_line":"    template_name \u003d \u0027admin/networks/_subnet_ips.html\u0027"},{"line_number":94,"context_line":"    subnet_availability \u003d availability.get(\"free_ips\")"},{"line_number":95,"context_line":"    context \u003d {\"subnet_ip_availability\": subnet_availability}"},{"line_number":96,"context_line":"    return template.loader.render_to_string(template_name, context)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"9abb7d3a_e4de8d3c","line":94,"range":{"start_line":94,"start_character":38,"end_line":94,"end_character":43},"in_reply_to":"9abb7d3a_9aac3b8d","updated":"2016-06-02 04:44:29.000000000","message":"neutronclient binding returns the value returned thru API.\nLook at the neutorn code [1].\nAll defined attributes are available on an API response,\nso we can assume this field is already available.\n\nI first thought you have .get() to handle a case where network-ip-availability extension is not supported, but IMO it should be handled in a different place.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/extensions/network_ip_availability.py#L26-L42","commit_id":"4fe6b113a38cf967115b0cbfd05673cb02ec0077"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4d78884a7da6a01769e2d684ad2e416be329def7","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    template_name \u003d \u0027admin/networks/_subnet_ips.html\u0027"},{"line_number":94,"context_line":"    subnet_availability \u003d availability.get(\"free_ips\")"},{"line_number":95,"context_line":"    context \u003d {\"subnet_ip_availability\": subnet_availability}"},{"line_number":96,"context_line":"    return template.loader.render_to_string(template_name, context)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"class SubnetsTable(tables.DataTable):"}],"source_content_type":"text/x-python","patch_set":43,"id":"9abb7d3a_e884a95e","line":96,"updated":"2016-06-01 23:11:29.000000000","message":"There is no need to use a template.\nYou can just return a string here.\n\n    subnet_availability \u003d availability[\"free_ips\"]\n    if subnet_availability \u003e 10000:\n       return \u0027\u003e10000\u0027\n    else:\n       return str(subnet_availability)","commit_id":"4fe6b113a38cf967115b0cbfd05673cb02ec0077"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"637e6ea89ad94754d821836ef964f05f187eea36","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    template_name \u003d \u0027admin/networks/_subnet_ips.html\u0027"},{"line_number":94,"context_line":"    subnet_availability \u003d availability.get(\"free_ips\")"},{"line_number":95,"context_line":"    context \u003d {\"subnet_ip_availability\": subnet_availability}"},{"line_number":96,"context_line":"    return template.loader.render_to_string(template_name, context)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"class SubnetsTable(tables.DataTable):"}],"source_content_type":"text/x-python","patch_set":43,"id":"9abb7d3a_dab883ca","line":96,"in_reply_to":"9abb7d3a_e884a95e","updated":"2016-06-02 03:17:27.000000000","message":"Done","commit_id":"4fe6b113a38cf967115b0cbfd05673cb02ec0077"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4d78884a7da6a01769e2d684ad2e416be329def7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    subnet_used_ips \u003d tables.Column(\"used_ips\","},{"line_number":106,"context_line":"                                    verbose_name\u003d_(\"Used IPs\"))"},{"line_number":107,"context_line":"    subnet_free_ips \u003d tables.Column(subnet_ip_availability,"},{"line_number":108,"context_line":"                                    verbose_name\u003d_(\"Free IPs\"))"},{"line_number":109,"context_line":"    failure_url \u003d reverse_lazy(\u0027horizon:admin:networks:index\u0027)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def get_object_display(self, subnet):"}],"source_content_type":"text/x-python","patch_set":43,"id":"9abb7d3a_c83c4595","line":108,"updated":"2016-06-01 23:11:29.000000000","message":"When network-ip-availability extension is not enabled, it is better to delete these columns. You can find a similar approach in [1].\n\n[1] https://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/project/routers/tables.py#L238-L241","commit_id":"4fe6b113a38cf967115b0cbfd05673cb02ec0077"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"637e6ea89ad94754d821836ef964f05f187eea36","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    subnet_used_ips \u003d tables.Column(\"used_ips\","},{"line_number":106,"context_line":"                                    verbose_name\u003d_(\"Used IPs\"))"},{"line_number":107,"context_line":"    subnet_free_ips \u003d tables.Column(subnet_ip_availability,"},{"line_number":108,"context_line":"                                    verbose_name\u003d_(\"Free IPs\"))"},{"line_number":109,"context_line":"    failure_url \u003d reverse_lazy(\u0027horizon:admin:networks:index\u0027)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def get_object_display(self, subnet):"}],"source_content_type":"text/x-python","patch_set":43,"id":"9abb7d3a_dac9a327","line":108,"in_reply_to":"9abb7d3a_c83c4595","updated":"2016-06-02 03:17:27.000000000","message":"Done.","commit_id":"4fe6b113a38cf967115b0cbfd05673cb02ec0077"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"d63f9099fe7bc955df8b6438388afd2607e01db0","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def subnet_ip_availability(availability):"},{"line_number":92,"context_line":"    subnet_availability \u003d availability.get(\"free_ips\")"},{"line_number":93,"context_line":"    if subnet_availability \u003e 10000:"},{"line_number":94,"context_line":"        return \"\u003e10,000\""},{"line_number":95,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":45,"id":"9abb7d3a_e7104f02","line":92,"updated":"2016-06-02 05:18:26.000000000","message":"availability[\"free_ips\"]","commit_id":"9a6d29e28ef2efefea87915aba19dd25bd9126c0"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"516bdce2e5c7735445d134ef3468b5f5fcb75672","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def subnet_ip_availability(availability):"},{"line_number":92,"context_line":"    subnet_availability \u003d availability.get(\"free_ips\")"},{"line_number":93,"context_line":"    if subnet_availability \u003e 10000:"},{"line_number":94,"context_line":"        return \"\u003e10,000\""},{"line_number":95,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":45,"id":"9abb7d3a_5439d940","line":92,"in_reply_to":"9abb7d3a_a4ee2eb2","updated":"2016-06-02 18:46:51.000000000","message":"I am getting an AttributeError when I change from .get to [\"free_ips\"]","commit_id":"9a6d29e28ef2efefea87915aba19dd25bd9126c0"},{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"858430c16574a183d19e9efef4d69df2ad4b6dae","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def subnet_ip_availability(availability):"},{"line_number":92,"context_line":"    subnet_availability \u003d availability.get(\"free_ips\")"},{"line_number":93,"context_line":"    if subnet_availability \u003e 10000:"},{"line_number":94,"context_line":"        return \"\u003e10,000\""},{"line_number":95,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":45,"id":"9abb7d3a_f1d47bbe","line":92,"in_reply_to":"9abb7d3a_e7104f02","updated":"2016-06-02 10:58:08.000000000","message":"Ha, I wondered what this was until I started digging into the test failures.","commit_id":"9a6d29e28ef2efefea87915aba19dd25bd9126c0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0bfd4a156165cd6e288fb0b9cfd2c4e6c1abd6b6","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def subnet_ip_availability(availability):"},{"line_number":92,"context_line":"    subnet_availability \u003d availability.get(\"free_ips\")"},{"line_number":93,"context_line":"    if subnet_availability \u003e 10000:"},{"line_number":94,"context_line":"        return \"\u003e10,000\""},{"line_number":95,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":45,"id":"9abb7d3a_a4ee2eb2","line":92,"in_reply_to":"9abb7d3a_f1d47bbe","updated":"2016-06-02 12:46:36.000000000","message":"Yes. Ankur and I checked \u0027free_ips\u0027 key always exists, so [] is the correct way.","commit_id":"9a6d29e28ef2efefea87915aba19dd25bd9126c0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0bfd4a156165cd6e288fb0b9cfd2c4e6c1abd6b6","unresolved":false,"context_lines":[{"line_number":91,"context_line":"def subnet_ip_availability(availability):"},{"line_number":92,"context_line":"    subnet_availability \u003d availability.get(\"free_ips\")"},{"line_number":93,"context_line":"    if subnet_availability \u003e 10000:"},{"line_number":94,"context_line":"        return \"\u003e10,000\""},{"line_number":95,"context_line":"    else:"},{"line_number":96,"context_line":"        return str(subnet_availability)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"9abb7d3a_440b027e","line":94,"range":{"start_line":94,"start_character":17,"end_line":94,"end_character":23},"updated":"2016-06-02 12:46:36.000000000","message":"L.96 returns a value without commas (like 9300), so I prefer to \"\u003e10000\" here too.","commit_id":"9a6d29e28ef2efefea87915aba19dd25bd9126c0"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"516bdce2e5c7735445d134ef3468b5f5fcb75672","unresolved":false,"context_lines":[{"line_number":91,"context_line":"def subnet_ip_availability(availability):"},{"line_number":92,"context_line":"    subnet_availability \u003d availability.get(\"free_ips\")"},{"line_number":93,"context_line":"    if subnet_availability \u003e 10000:"},{"line_number":94,"context_line":"        return \"\u003e10,000\""},{"line_number":95,"context_line":"    else:"},{"line_number":96,"context_line":"        return str(subnet_availability)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"9abb7d3a_b43e4527","line":94,"range":{"start_line":94,"start_character":17,"end_line":94,"end_character":23},"in_reply_to":"9abb7d3a_440b027e","updated":"2016-06-02 18:46:51.000000000","message":"Done","commit_id":"9a6d29e28ef2efefea87915aba19dd25bd9126c0"}],"openstack_dashboard/dashboards/admin/networks/tables.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"edb8a461f7549e16f88d7aa0965124e5f626b2b5","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    external \u003d tables.Column(\"router:external\","},{"line_number":103,"context_line":"                             verbose_name\u003d_(\"External\"),"},{"line_number":104,"context_line":"                             filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":105,"context_line":"    ip_availability \u003d tables.Column(\"ip_availability\", "},{"line_number":106,"context_line":"                                    verbose_name\u003d_(\"Used Ips\"))"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    status \u003d tables.Column("}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_7d1be51b","line":105,"range":{"start_line":105,"start_character":54,"end_line":105,"end_character":55},"updated":"2016-02-26 19:44:21.000000000","message":"remove extra space","commit_id":"1f5e2e2b128f82f0aa6c958d71de9f5c40fa58b7"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from django.utils.translation import pgettext_lazy"},{"line_number":20,"context_line":"from django.utils.translation import ugettext_lazy as _"},{"line_number":21,"context_line":"from django.utils.translation import ungettext_lazy"},{"line_number":22,"context_line":"from django import template"},{"line_number":23,"context_line":"from horizon import exceptions"},{"line_number":24,"context_line":"from horizon import tables"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_0963f542","line":22,"range":{"start_line":22,"start_character":19,"end_line":22,"end_character":27},"updated":"2016-03-10 15:42:49.000000000","message":"H306  imports not in alphabetical order (django.utils.translation.ungettext_lazy, django.template)","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"def get_subnet_availability(network):"},{"line_number":82,"context_line":"    template_name \u003d \u0027admin/networks/_subnet_ips.html\u0027"},{"line_number":83,"context_line":"    context \u003d {\"subnet_ip_availability\": network.availability.get(\"subnet_ip_availability\")}"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    return template.loader.render_to_string(template_name, context)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_c94d8dc5","line":83,"range":{"start_line":83,"start_character":87,"end_line":83,"end_character":92},"updated":"2016-03-10 15:42:49.000000000","message":"E501 line too long (92 \u003e 79 characters)","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if not api.neutron.is_extension_supported(request,"},{"line_number":131,"context_line":"                                                  \u0027dhcp_agent_scheduler\u0027):"},{"line_number":132,"context_line":"            del self.columns[\u0027num_agents\u0027]"},{"line_number":133,"context_line":"        if not api.neutron.is_extension_supported(request, \u0027network-ip-availability\u0027):"},{"line_number":134,"context_line":"            del self.columns[\u0027ip_availability\u0027]"},{"line_number":135,"context_line":"            del self.columns[\u0027free_ips\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_89054547","line":133,"range":{"start_line":133,"start_character":78,"end_line":133,"end_character":86},"updated":"2016-03-10 15:42:49.000000000","message":"E501 line too long (86 \u003e 79 characters)","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if not api.neutron.is_extension_supported(request,"},{"line_number":131,"context_line":"                                                  \u0027dhcp_agent_scheduler\u0027):"},{"line_number":132,"context_line":"            del self.columns[\u0027num_agents\u0027]"},{"line_number":133,"context_line":"        if not api.neutron.is_extension_supported(request, \u0027network-ip-availability\u0027):"},{"line_number":134,"context_line":"            del self.columns[\u0027ip_availability\u0027]"},{"line_number":135,"context_line":"            del self.columns[\u0027free_ips\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_4c1fcb5a","line":133,"range":{"start_line":133,"start_character":11,"end_line":133,"end_character":14},"updated":"2016-03-10 15:42:49.000000000","message":"if not supported? shouldn\u0027t be if this is supported?","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"27ec964a436d13e0bce491dac79a67e90e7b4245","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    external \u003d tables.Column(\"router:external\","},{"line_number":108,"context_line":"                             verbose_name\u003d_(\"External\"),"},{"line_number":109,"context_line":"                             filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":110,"context_line":"    ip_availability \u003d tables.Column(\"ip_availability\","},{"line_number":111,"context_line":"                                    verbose_name\u003d_(\"Total Used IPs\"))"},{"line_number":112,"context_line":"    free_ips \u003d tables.Column(get_subnet_availability,"},{"line_number":113,"context_line":"                             verbose_name\u003d_(\"Subnet IP Availability\"))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    status \u003d tables.Column("},{"line_number":116,"context_line":"        \"status\", verbose_name\u003d_(\"Status\"),"}],"source_content_type":"text/x-python","patch_set":28,"id":"da0c15f0_2b90e4eb","line":113,"range":{"start_line":110,"start_character":4,"end_line":113,"end_character":70},"updated":"2016-03-28 14:38:10.000000000","message":"Are these two verbose_name correct?","commit_id":"e6c88fcf9d59aeb21d2da5eca93af79db4a4df17"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"f2a03331583e2c954e75496cb909488cec9b3f4d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    external \u003d tables.Column(\"router:external\","},{"line_number":108,"context_line":"                             verbose_name\u003d_(\"External\"),"},{"line_number":109,"context_line":"                             filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":110,"context_line":"    ip_availability \u003d tables.Column(\"ip_availability\","},{"line_number":111,"context_line":"                                    verbose_name\u003d_(\"Total Used IPs\"))"},{"line_number":112,"context_line":"    free_ips \u003d tables.Column(get_subnet_availability,"},{"line_number":113,"context_line":"                             verbose_name\u003d_(\"Subnet IP Availability\"))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    status \u003d tables.Column("},{"line_number":116,"context_line":"        \"status\", verbose_name\u003d_(\"Status\"),"}],"source_content_type":"text/x-python","patch_set":28,"id":"da0c15f0_ee40b9a7","line":113,"range":{"start_line":110,"start_character":4,"end_line":113,"end_character":70},"in_reply_to":"da0c15f0_2b90e4eb","updated":"2016-03-28 17:20:04.000000000","message":"It is correct, but there may be a better way of saying it. \"Total Network Used IPs\" and possibly \"Unused Subnet IPs\"\nThoughts?\nThe first column is the total number of allocated IP addresses in a network, second column shows the unallocated IP addresses for each subnet.","commit_id":"e6c88fcf9d59aeb21d2da5eca93af79db4a4df17"},{"author":{"_account_id":5127,"name":"Justin Hammond","email":"runningempty@gmail.com","username":"justin-hammond"},"change_message_id":"24163f40cdcc323dcea605e87b1ce11acb1e1705","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from django.utils.translation import ugettext_lazy as _"},{"line_number":21,"context_line":"from django.utils.translation import ungettext_lazy"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from django import template"},{"line_number":24,"context_line":"from horizon import exceptions"},{"line_number":25,"context_line":"from horizon import tables"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba0121b8_54c95925","line":23,"updated":"2016-03-30 20:10:57.000000000","message":"Nit: probably should be moved up with the other django stuff. ^","commit_id":"d20358919696046779e00fa76da136c53de7d94c"},{"author":{"_account_id":19611,"name":"Brian Stajkowski","email":"brian.stajkowski@rackspace.com","username":"ski"},"change_message_id":"b9506bd17b4d1bc899c4684837006c140294ebb9","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from django.utils.translation import ugettext_lazy as _"},{"line_number":21,"context_line":"from django.utils.translation import ungettext_lazy"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from django import template"},{"line_number":24,"context_line":"from horizon import exceptions"},{"line_number":25,"context_line":"from horizon import tables"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a061dce_e2b01c8e","line":23,"in_reply_to":"ba0121b8_54c95925","updated":"2016-04-04 19:27:12.000000000","message":"Done","commit_id":"d20358919696046779e00fa76da136c53de7d94c"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"e964580b2bfead7c97ef59d9c841cfea013e9dae","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    template_name \u003d \u0027admin/networks/_subnet_ips.html\u0027"},{"line_number":84,"context_line":"    context \u003d {}"},{"line_number":85,"context_line":"    if \"subnet_ip_availability\" in network.availability:"},{"line_number":86,"context_line":"        subnet_availability \u003d network.availability[\"subnet_ip_availability\"]"},{"line_number":87,"context_line":"        context \u003d {\"subnet_ip_availability\": subnet_availability}"},{"line_number":88,"context_line":"    return template.loader.render_to_string(template_name, context)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba0121b8_008cbcd8","line":87,"range":{"start_line":86,"start_character":8,"end_line":87,"end_character":65},"updated":"2016-03-30 21:22:24.000000000","message":"nit: \n\ncontext \u003d {\"subnet_ip_availability\": network.availability[\"subnet_ip_availability\"]}","commit_id":"d20358919696046779e00fa76da136c53de7d94c"},{"author":{"_account_id":19611,"name":"Brian Stajkowski","email":"brian.stajkowski@rackspace.com","username":"ski"},"change_message_id":"b9506bd17b4d1bc899c4684837006c140294ebb9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    template_name \u003d \u0027admin/networks/_subnet_ips.html\u0027"},{"line_number":84,"context_line":"    context \u003d {}"},{"line_number":85,"context_line":"    if \"subnet_ip_availability\" in network.availability:"},{"line_number":86,"context_line":"        subnet_availability \u003d network.availability[\"subnet_ip_availability\"]"},{"line_number":87,"context_line":"        context \u003d {\"subnet_ip_availability\": subnet_availability}"},{"line_number":88,"context_line":"    return template.loader.render_to_string(template_name, context)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a061dce_c2ad1833","line":87,"range":{"start_line":86,"start_character":8,"end_line":87,"end_character":65},"in_reply_to":"ba0121b8_008cbcd8","updated":"2016-04-04 19:27:12.000000000","message":"Done","commit_id":"d20358919696046779e00fa76da136c53de7d94c"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"783ccc7c325f7c2e227bd4099290b1e97a8994c4","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    template_name \u003d \u0027admin/networks/_subnet_ips.html\u0027"},{"line_number":84,"context_line":"    context \u003d {}"},{"line_number":85,"context_line":"    if \"subnet_ip_availability\" in network.availability:"},{"line_number":86,"context_line":"        subnet_availability \u003d network.availability[\"subnet_ip_availability\"]"},{"line_number":87,"context_line":"        context \u003d {\"subnet_ip_availability\": subnet_availability}"},{"line_number":88,"context_line":"    return template.loader.render_to_string(template_name, context)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba0121b8_69be4366","line":87,"range":{"start_line":86,"start_character":8,"end_line":87,"end_character":65},"in_reply_to":"ba0121b8_008cbcd8","updated":"2016-03-30 22:33:44.000000000","message":"nit: Agree this would be a good simplification to have.","commit_id":"d20358919696046779e00fa76da136c53de7d94c"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"4ed7276e1cd52d48f239d4e63312178e253a879c","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    external \u003d tables.Column(\"router:external\","},{"line_number":110,"context_line":"                             verbose_name\u003d_(\"External\"),"},{"line_number":111,"context_line":"                             filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":112,"context_line":"    network_used_ips \u003d tables.Column(\"ip_availability\","},{"line_number":113,"context_line":"                                     verbose_name\u003d_(\"Total Used IPs\"))"},{"line_number":114,"context_line":"    subnet_free_ips \u003d tables.Column(get_subnet_availability,"},{"line_number":115,"context_line":"                                    verbose_name\u003d_(\"Subnet IP Availability\"))"}],"source_content_type":"text/x-python","patch_set":35,"id":"1a122d0e_1a9446e0","line":112,"updated":"2016-04-25 15:48:56.000000000","message":"Suggest renaming ip_availability to something like used_ips.","commit_id":"64179801e077cc7631c5e3833f65538af1357f94"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"4ed7276e1cd52d48f239d4e63312178e253a879c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    network_used_ips \u003d tables.Column(\"ip_availability\","},{"line_number":113,"context_line":"                                     verbose_name\u003d_(\"Total Used IPs\"))"},{"line_number":114,"context_line":"    subnet_free_ips \u003d tables.Column(get_subnet_availability,"},{"line_number":115,"context_line":"                                    verbose_name\u003d_(\"Subnet IP Availability\"))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    status \u003d tables.Column("},{"line_number":118,"context_line":"        \"status\", verbose_name\u003d_(\"Status\"),"}],"source_content_type":"text/x-python","patch_set":35,"id":"1a122d0e_9a44d674","line":115,"updated":"2016-04-25 15:48:56.000000000","message":"Horizon users aren\u0027t necessarily going to be familiar with neutron to know what \"Subnet IP Availability\" indicates, so I think it would be better to call this column something like \"Total Free IPs\".","commit_id":"64179801e077cc7631c5e3833f65538af1357f94"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"ffdd901142db3da1e74cb0e969d99406c9c1578c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    external \u003d tables.Column(\"router:external\","},{"line_number":98,"context_line":"                             verbose_name\u003d_(\"External\"),"},{"line_number":99,"context_line":"                             filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    status \u003d tables.Column("},{"line_number":102,"context_line":"        \"status\", verbose_name\u003d_(\"Status\"),"},{"line_number":103,"context_line":"        display_choices\u003dproject_tables.STATUS_DISPLAY_CHOICES)"}],"source_content_type":"text/x-python","patch_set":48,"id":"7aa08908_30e712e6","line":100,"updated":"2016-06-05 19:26:42.000000000","message":"why are you adding extra line here ?","commit_id":"8cf58d701102487bdac437366acc78c1a0210ec1"}],"openstack_dashboard/dashboards/admin/networks/templates/networks/_ip_availability.html":[{"author":{"_account_id":6763,"name":"jingliuqing","email":"jing.liuqing@99cloud.net","username":"jing"},"change_message_id":"a612629e55fcbe110aadf00d60385dd69ae00887","unresolved":false,"context_lines":[{"line_number":2,"context_line":"\u003ca href\u003d\"#\" id\u003d\"ip_availability_{{ id }}\" class\u003d\"link-popover\" rel\u003d\"popover\" tabindex\u003d\"0\" data-trigger\u003d\"focus\" data-content\u003d\""},{"line_number":3,"context_line":"\u003ctable class\u003d\u0027table table-bordered\u0027\u003e"},{"line_number":4,"context_line":"  {% for subnet in availabilities %}"},{"line_number":5,"context_line":"    \u003ctr\u003e\u003cth\u003e{% trans subnet.subnet_name %} (IPv{{ subnet.ip_version }})\u003c/th\u003e\u003ctd\u003e{{ subnet.free_ips }}\u003c/td\u003e\u003c/tr\u003e"},{"line_number":6,"context_line":"  {% endfor %}"},{"line_number":7,"context_line":"\u003c/table\u003e"},{"line_number":8,"context_line":"\" data-original-title\u003d\"{% blocktrans %}Subnet Free IPs\"\u003e{{ used_ips }}{% endblocktrans %}\u003c/a\u003e"}],"source_content_type":"text/html","patch_set":38,"id":"dab17558_a9003f67","line":5,"updated":"2016-05-16 11:04:31.000000000","message":"do we need to translate the subnet_name?","commit_id":"35068826250e4c8ef867de29e380b4c20ae093e6"},{"author":{"_account_id":6763,"name":"jingliuqing","email":"jing.liuqing@99cloud.net","username":"jing"},"change_message_id":"a612629e55fcbe110aadf00d60385dd69ae00887","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    \u003ctr\u003e\u003cth\u003e{% trans subnet.subnet_name %} (IPv{{ subnet.ip_version }})\u003c/th\u003e\u003ctd\u003e{{ subnet.free_ips }}\u003c/td\u003e\u003c/tr\u003e"},{"line_number":6,"context_line":"  {% endfor %}"},{"line_number":7,"context_line":"\u003c/table\u003e"},{"line_number":8,"context_line":"\" data-original-title\u003d\"{% blocktrans %}Subnet Free IPs\"\u003e{{ used_ips }}{% endblocktrans %}\u003c/a\u003e"},{"line_number":9,"context_line":"\u003cscript type\u003d\"text/javascript\" charset\u003d\"utf-8\"\u003e"},{"line_number":10,"context_line":"$(function () {"},{"line_number":11,"context_line":"  var $availability \u003d $(\"#ip_availability_{{ id }}\");"}],"source_content_type":"text/html","patch_set":38,"id":"dab17558_09cceb68","line":8,"updated":"2016-05-16 11:04:31.000000000","message":"{% trans \"Subnet Free IPs\" %}","commit_id":"35068826250e4c8ef867de29e380b4c20ae093e6"}],"openstack_dashboard/dashboards/admin/networks/templates/networks/_subnet_ips.html":[{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"76e4f1c3612b785547773160c853d0ab6cb8997d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    \u003cb\u003e{{ subnet.subnet_name }} (IPv{{subnet.ip_version}})\u003c/b\u003e"},{"line_number":6,"context_line":"    \u003cbr\u003e"},{"line_number":7,"context_line":"    {% endif %}"},{"line_number":8,"context_line":"    {{ subnet.remaining_ips }}"},{"line_number":9,"context_line":"  \u003c/li\u003e"},{"line_number":10,"context_line":"\u003c/ul\u003e"},{"line_number":11,"context_line":"{% endfor %}"}],"source_content_type":"text/html","patch_set":36,"id":"1a122d0e_f009302c","line":8,"updated":"2016-04-29 16:07:36.000000000","message":"May be easier to do with with \u003cdl\u003e etc.","commit_id":"f33bc7cfbdce5d6f7645a58101969b3b39e6ae1c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4d78884a7da6a01769e2d684ad2e416be329def7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cul\u003e"},{"line_number":2,"context_line":"  {% if subnet_ip_availability \u003e 500000 %}"},{"line_number":3,"context_line":"    \u003e500,000"},{"line_number":4,"context_line":"  {% else %}"},{"line_number":5,"context_line":"    {{ subnet_ip_availability }}"},{"line_number":6,"context_line":"  {% endif %}"}],"source_content_type":"text/html","patch_set":43,"id":"9abb7d3a_72f1df6a","line":3,"updated":"2016-06-01 23:11:29.000000000","message":"I am not sure why you chose 500,000 as a threshold.\nI think most people choose 1M or 10,000 if there is no reason, but I am okay.\nI just want to know the reason from my curiosity.","commit_id":"4fe6b113a38cf967115b0cbfd05673cb02ec0077"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f4d7a976e64d282836ce479938171ef39b5ff7f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cul\u003e"},{"line_number":2,"context_line":"  {% if subnet_ip_availability \u003e 500000 %}"},{"line_number":3,"context_line":"    \u003e500,000"},{"line_number":4,"context_line":"  {% else %}"},{"line_number":5,"context_line":"    {{ subnet_ip_availability }}"},{"line_number":6,"context_line":"  {% endif %}"}],"source_content_type":"text/html","patch_set":43,"id":"9abb7d3a_c4d2695b","line":3,"in_reply_to":"9abb7d3a_3a1eef0b","updated":"2016-06-02 04:44:29.000000000","message":"totally agree. I prefer 10000 too :)","commit_id":"4fe6b113a38cf967115b0cbfd05673cb02ec0077"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"637e6ea89ad94754d821836ef964f05f187eea36","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cul\u003e"},{"line_number":2,"context_line":"  {% if subnet_ip_availability \u003e 500000 %}"},{"line_number":3,"context_line":"    \u003e500,000"},{"line_number":4,"context_line":"  {% else %}"},{"line_number":5,"context_line":"    {{ subnet_ip_availability }}"},{"line_number":6,"context_line":"  {% endif %}"}],"source_content_type":"text/html","patch_set":43,"id":"9abb7d3a_3a1eef0b","line":3,"in_reply_to":"9abb7d3a_72f1df6a","updated":"2016-06-02 03:17:27.000000000","message":"Brian Staj. recommended 1,000,000. I felt that was a bit too large to be useful. So I cut the difference. I will cut it down to 10,000","commit_id":"4fe6b113a38cf967115b0cbfd05673cb02ec0077"}],"openstack_dashboard/dashboards/admin/networks/tests.py":[{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"8636fb637b5be8a73a64dd62c064eaf120b5b614","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @test.create_stubs({api.neutron: (\u0027network_list\u0027,"},{"line_number":71,"context_line":"                                      \u0027is_extension_supported\u0027,)})"},{"line_number":72,"context_line":"    def test_index_network_list_exception(self):"},{"line_number":73,"context_line":"        api.neutron.network_list(IsA(http.HttpRequest)) \\"},{"line_number":74,"context_line":"            .AndRaise(self.exceptions.neutron)"},{"line_number":75,"context_line":"        api.neutron.is_extension_supported("}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_3452fddd","line":72,"updated":"2016-03-17 00:34:16.000000000","message":"Please add a test similar to this one that tests the case where the neutron.network_ip_availability_show call throws an exception.","commit_id":"8731025850e1e9dce2070af62825c4ccb06d3c77"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"a9eb8fd3cb077ad2b8c407f536499ba68a619b8b","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                                      \u0027network_ip_availability_show\u0027,"},{"line_number":92,"context_line":"                                      \u0027is_extension_supported\u0027,),"},{"line_number":93,"context_line":"                        api.keystone: (\u0027tenant_list\u0027,)})"},{"line_number":94,"context_line":"    def test_index_ip_availability_exception(self):"},{"line_number":95,"context_line":"        tenants \u003d self.tenants.list()"},{"line_number":96,"context_line":"        api.neutron.network_list(IsA(http.HttpRequest)) \\"},{"line_number":97,"context_line":"            .AndReturn(self.networks.list())"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa0719c6_58e8cb10","line":94,"updated":"2016-03-21 19:09:32.000000000","message":"I think you forgot to mock throwing an exception from the network_ip_availability_show call. This test currently looks the same as test_index.","commit_id":"454a7b9fae883e18d3565129b5779ee9fa68c2b8"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"43673f7613c7f18eb1d1f46f037d2205d1cfa39e","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            api.neutron.list_dhcp_agent_hosting_networks(IsA(http.HttpRequest),"},{"line_number":103,"context_line":"                                                         network.id)\\"},{"line_number":104,"context_line":"                .AndReturn(self.agents.list())"},{"line_number":105,"context_line":"            api.neutron.network_ip_availability_show(IsA(http.HttpRequest),"},{"line_number":106,"context_line":"                                                     network.id)\\"},{"line_number":107,"context_line":"                .MultipleTimes().AndReturn(ip_availability)"},{"line_number":108,"context_line":"            api.neutron.is_extension_supported("}],"source_content_type":"text/x-python","patch_set":20,"id":"fa0719c6_4d2c59ab","line":105,"updated":"2016-03-22 16:28:51.000000000","message":"Can we mock raising an exception here? I\u0027m more interested in what happens when the api call fails than when the extension support call fails.","commit_id":"f0af2f6539d465fc4bcb05016ee62d45153a2993"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"1f3c6621e8cdc1d7557dc3bf0845e6f0050d36e0","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            api.neutron.list_dhcp_agent_hosting_networks(IsA(http.HttpRequest),"},{"line_number":103,"context_line":"                                                         network.id)\\"},{"line_number":104,"context_line":"                .AndReturn(self.agents.list())"},{"line_number":105,"context_line":"            api.neutron.network_ip_availability_show(IsA(http.HttpRequest),"},{"line_number":106,"context_line":"                                                     network.id)\\"},{"line_number":107,"context_line":"                .MultipleTimes().AndReturn(ip_availability)"},{"line_number":108,"context_line":"            api.neutron.is_extension_supported("}],"source_content_type":"text/x-python","patch_set":20,"id":"fa0719c6_9ef7b6f4","line":105,"in_reply_to":"fa0719c6_4d2c59ab","updated":"2016-03-22 18:55:12.000000000","message":"I attempted to do this. \nThe issue I ran into was calling a \"AndRaise\" on a mock that also is being called \"MultipleTimes\". The exception handling deteriorates. \n\nAlthough it may be possible to create a conditional for this call where the first loop iteration it raises the exception just once.","commit_id":"f0af2f6539d465fc4bcb05016ee62d45153a2993"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"646102701fbb830ff6e9336c67de512205ae9d7b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            .AndReturn(self.networks.list())"},{"line_number":98,"context_line":"        api.keystone.tenant_list(IsA(http.HttpRequest))\\"},{"line_number":99,"context_line":"            .AndReturn([tenants, False])"},{"line_number":100,"context_line":"        ip_availability \u003d self.ip_availability.get()"},{"line_number":101,"context_line":"        for network in self.networks.list():"},{"line_number":102,"context_line":"            api.neutron.list_dhcp_agent_hosting_networks(IsA(http.HttpRequest),"},{"line_number":103,"context_line":"                                                         network.id)\\"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa0719c6_6f7ae7f2","line":100,"updated":"2016-03-22 19:58:10.000000000","message":"the ip_availability variable isn\u0027t used anywhere here","commit_id":"14278d9d4bdbf3e6d3c1ab2bc138a9c4efc86ba1"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"e03a21eda771a33db1d6207f972756df6a91dad6","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                .AndReturn(self.agents.list())"},{"line_number":104,"context_line":"            api.neutron.network_ip_availability_show(IsA(http.HttpRequest),"},{"line_number":105,"context_line":"                                                     network.id)\\"},{"line_number":106,"context_line":"                .AndRaise(self.exceptions.neutron)"},{"line_number":107,"context_line":"            api.neutron.is_extension_supported("},{"line_number":108,"context_line":"                IsA(http.HttpRequest),"},{"line_number":109,"context_line":"                \u0027dhcp_agent_scheduler\u0027).AndReturn(True)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa0719c6_47a25faf","line":106,"updated":"2016-03-23 02:00:49.000000000","message":"Nice!","commit_id":"be1d9f3d3ee04c12bdd6389044768735b05c9050"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"e03a21eda771a33db1d6207f972756df6a91dad6","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            \u0027dhcp_agent_scheduler\u0027).AndReturn(True)"},{"line_number":117,"context_line":"        api.neutron.is_extension_supported("},{"line_number":118,"context_line":"            IsA(http.HttpRequest),"},{"line_number":119,"context_line":"            \u0027network-ip-availability\u0027).AndRaise(self.exceptions.neutron)"},{"line_number":120,"context_line":"        api.neutron.is_extension_supported("},{"line_number":121,"context_line":"            IsA(http.HttpRequest),"},{"line_number":122,"context_line":"            \u0027network-ip-availability\u0027).MultipleTimes().AndReturn(True)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa0719c6_e7c45360","line":119,"updated":"2016-03-23 02:00:49.000000000","message":"(nit) I don\u0027t think there\u0027s a reason to raise an exception here, and it makes it less clear what this is testing.","commit_id":"be1d9f3d3ee04c12bdd6389044768735b05c9050"}],"openstack_dashboard/dashboards/admin/networks/views.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"edb8a461f7549e16f88d7aa0965124e5f626b2b5","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    import tables as networks_tables"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class IndexView(tables.DataTableView):"},{"line_number":44,"context_line":"    table_class \u003d networks_tables.NetworksTable"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_7df2c5d3","line":41,"updated":"2016-02-26 19:44:21.000000000","message":"remove extra line.","commit_id":"1f5e2e2b128f82f0aa6c958d71de9f5c40fa58b7"},{"author":{"_account_id":20509,"name":"Daniel Castellanos","email":"luis.daniel.castellanos@intel.com","username":"lcastell"},"change_message_id":"10926a2f7d5be557d34cb7c7a881a1bd9575d06d","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _get_ip_availability_data(self, network):"},{"line_number":76,"context_line":"        availability \u003d []"},{"line_number":77,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            # if api.neutron.is_extension_supported(self.request"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_5485a6cc","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":12},"updated":"2016-03-03 22:25:07.000000000","message":"This variable is assigned but never used","commit_id":"56200f8cd5d871ddd68688683a5f10c5e50a98cc"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"b431341ca7e78c54b8b2468f4bceae1cedba7628","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            # if api.neutron.is_extension_supported(self.request"},{"line_number":81,"context_line":"            # \u0027network_ip_availability\u0027):"},{"line_number":82,"context_line":"            # Method is called for each network."},{"line_number":83,"context_line":"            availability \u003d api.neutron.network_ip_availability_show("}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_cf2e02fa","line":80,"updated":"2016-03-04 22:22:17.000000000","message":"Why is the check for extension support commented out? I think we need that so we don\u0027t make these calls to a neutron installation that doesn\u0027t support them.","commit_id":"56200f8cd5d871ddd68688683a5f10c5e50a98cc"},{"author":{"_account_id":20509,"name":"Daniel Castellanos","email":"luis.daniel.castellanos@intel.com","username":"lcastell"},"change_message_id":"10926a2f7d5be557d34cb7c7a881a1bd9575d06d","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _get_ip_total_data(self, network):"},{"line_number":90,"context_line":"        availability \u003d []"},{"line_number":91,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        try:"},{"line_number":94,"context_line":"            # if api.neutron.is_extension_supported(self.request"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_946bae1d","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":12},"updated":"2016-03-03 22:25:07.000000000","message":"ditto","commit_id":"56200f8cd5d871ddd68688683a5f10c5e50a98cc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6310bb2a4f107c2c65d88382d8db9da0cf68d4ac","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        return availability[\u0027network_ip_availability\u0027][\u0027total_ips\u0027]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def _get_ip_free_data(self, network):"},{"line_number":104,"context_line":"        used \u003d []"},{"line_number":105,"context_line":"        total \u003d []"},{"line_number":106,"context_line":"        free \u003d 0"},{"line_number":107,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_1a534718","line":105,"range":{"start_line":104,"start_character":0,"end_line":105,"end_character":18},"updated":"2016-03-03 22:58:51.000000000","message":"Even when those are valid declarations, can you change them to integers?","commit_id":"56200f8cd5d871ddd68688683a5f10c5e50a98cc"},{"author":{"_account_id":20509,"name":"Daniel Castellanos","email":"luis.daniel.castellanos@intel.com","username":"lcastell"},"change_message_id":"10926a2f7d5be557d34cb7c7a881a1bd9575d06d","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        used \u003d []"},{"line_number":105,"context_line":"        total \u003d []"},{"line_number":106,"context_line":"        free \u003d 0"},{"line_number":107,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            # if api.neutron.is_extension_supported(self.request"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_545c867c","line":107,"range":{"start_line":107,"start_character":8,"end_line":107,"end_character":12},"updated":"2016-03-03 22:25:07.000000000","message":"ditto","commit_id":"56200f8cd5d871ddd68688683a5f10c5e50a98cc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _get_ip_availability_data(self, network):"},{"line_number":76,"context_line":"        availability \u003d []"},{"line_number":77,"context_line":"        used_ips \u003d 0"},{"line_number":78,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_49dcdd45","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":16},"updated":"2016-03-10 15:42:49.000000000","message":"F841 local variable \u0027used_ips\u0027 is assigned to but never used","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def _get_ip_availability_data(self, network):"},{"line_number":76,"context_line":"        availability \u003d []"},{"line_number":77,"context_line":"        used_ips \u003d 0"},{"line_number":78,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        try:"},{"line_number":81,"context_line":"            if api.neutron.is_extension_supported(self.request,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_69e55907","line":78,"range":{"start_line":78,"start_character":8,"end_line":78,"end_character":12},"updated":"2016-03-10 15:42:49.000000000","message":"F841 local variable \u0027data\u0027 is assigned to but never used","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        try:"},{"line_number":81,"context_line":"            if api.neutron.is_extension_supported(self.request,"},{"line_number":82,"context_line":"                \u0027network-ip-availability\u0027):"},{"line_number":83,"context_line":"            # Method is called for each network."},{"line_number":84,"context_line":"                availability \u003d api.neutron.network_ip_availability_show("},{"line_number":85,"context_line":"                    self.request, network)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_49aa1d86","line":82,"range":{"start_line":82,"start_character":0,"end_line":82,"end_character":16},"updated":"2016-03-10 15:42:49.000000000","message":"E125 continuation line with same indent as next logical line\nE128 continuation line under-indented for visual indent","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        try:"},{"line_number":81,"context_line":"            if api.neutron.is_extension_supported(self.request,"},{"line_number":82,"context_line":"                \u0027network-ip-availability\u0027):"},{"line_number":83,"context_line":"            # Method is called for each network."},{"line_number":84,"context_line":"                availability \u003d api.neutron.network_ip_availability_show("},{"line_number":85,"context_line":"                    self.request, network)"},{"line_number":86,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_29ad119b","line":83,"range":{"start_line":83,"start_character":12,"end_line":83,"end_character":48},"updated":"2016-03-10 15:42:49.000000000","message":"E112 expected an indented block","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _get_subnet_availability(self, network):"},{"line_number":91,"context_line":"        availability \u003d []"},{"line_number":92,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        try:"},{"line_number":95,"context_line":"            if api.neutron.is_extension_supported(self.request,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_c99e2d62","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":12},"updated":"2016-03-10 15:42:49.000000000","message":"F841 local variable \u0027data\u0027 is assigned to but never used","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        try:"},{"line_number":95,"context_line":"            if api.neutron.is_extension_supported(self.request,"},{"line_number":96,"context_line":"                \u0027network-ip-availability\u0027):"},{"line_number":97,"context_line":"            # Method is called for each network."},{"line_number":98,"context_line":"                availability \u003d api.neutron.network_ip_availability_show("},{"line_number":99,"context_line":"                    self.request, network)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_897f0514","line":96,"range":{"start_line":96,"start_character":0,"end_line":96,"end_character":16},"updated":"2016-03-10 15:42:49.000000000","message":"E125 continuation line with same indent as next logical line\nE128 continuation line under-indented for visual indent","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        try:"},{"line_number":95,"context_line":"            if api.neutron.is_extension_supported(self.request,"},{"line_number":96,"context_line":"                \u0027network-ip-availability\u0027):"},{"line_number":97,"context_line":"            # Method is called for each network."},{"line_number":98,"context_line":"                availability \u003d api.neutron.network_ip_availability_show("},{"line_number":99,"context_line":"                    self.request, network)"},{"line_number":100,"context_line":"                for item in availability.get(\"network_ip_availability\").get(\"subnet_ip_availability\"):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_0992d54b","line":97,"range":{"start_line":97,"start_character":0,"end_line":97,"end_character":12},"updated":"2016-03-10 15:42:49.000000000","message":"E112 expected an indented block","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            # Method is called for each network."},{"line_number":98,"context_line":"                availability \u003d api.neutron.network_ip_availability_show("},{"line_number":99,"context_line":"                    self.request, network)"},{"line_number":100,"context_line":"                for item in availability.get(\"network_ip_availability\").get(\"subnet_ip_availability\"):"},{"line_number":101,"context_line":"                    remaining \u003d int(item.get(\"total_ips\")) - int(item.get(\"used_ips\"))"},{"line_number":102,"context_line":"                    item.update({\"remaining_ips\" : remaining})"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_e9304958","line":100,"range":{"start_line":100,"start_character":83,"end_line":100,"end_character":102},"updated":"2016-03-10 15:42:49.000000000","message":"E501 line too long (102 \u003e 79 characters)","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                availability \u003d api.neutron.network_ip_availability_show("},{"line_number":99,"context_line":"                    self.request, network)"},{"line_number":100,"context_line":"                for item in availability.get(\"network_ip_availability\").get(\"subnet_ip_availability\"):"},{"line_number":101,"context_line":"                    remaining \u003d int(item.get(\"total_ips\")) - int(item.get(\"used_ips\"))"},{"line_number":102,"context_line":"                    item.update({\"remaining_ips\" : remaining})"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_69f6f98f","line":101,"range":{"start_line":101,"start_character":83,"end_line":101,"end_character":86},"updated":"2016-03-10 15:42:49.000000000","message":"E501 line too long (86 \u003e 79 characters)","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"84dd5ded47b0e506b71362782f52f90689d45c9f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                    self.request, network)"},{"line_number":100,"context_line":"                for item in availability.get(\"network_ip_availability\").get(\"subnet_ip_availability\"):"},{"line_number":101,"context_line":"                    remaining \u003d int(item.get(\"total_ips\")) - int(item.get(\"used_ips\"))"},{"line_number":102,"context_line":"                    item.update({\"remaining_ips\" : remaining})"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        except Exception:"},{"line_number":105,"context_line":"            self.exception \u003d True"}],"source_content_type":"text/x-python","patch_set":12,"id":"5aef4532_490b3d7d","line":102,"range":{"start_line":102,"start_character":48,"end_line":102,"end_character":49},"updated":"2016-03-10 15:42:49.000000000","message":"E203 whitespace before \u0027:\u0027","commit_id":"3a8721de5d347575cff72d581dd49b4db1752edc"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"0fcf5607c0f38a2ab7876019004eb6a6640bb67b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                    self.request, network)"},{"line_number":70,"context_line":"        except Exception:"},{"line_number":71,"context_line":"            self.exception \u003d True"},{"line_number":72,"context_line":"        finally:"},{"line_number":73,"context_line":"            data \u003d len(agents)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_a3453918","line":72,"updated":"2016-03-16 22:29:30.000000000","message":"This does not need to be a finally clause.","commit_id":"a10f1a2304f45db94272634b94677cbd990c3e6c"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"0fcf5607c0f38a2ab7876019004eb6a6640bb67b","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                    self.request, network)"},{"line_number":87,"context_line":"        except Exception:"},{"line_number":88,"context_line":"            self.exception \u003d True"},{"line_number":89,"context_line":"        finally:"},{"line_number":90,"context_line":"            used_ips \u003d availability.get(\"network_ip_availability\", {})"},{"line_number":91,"context_line":"            data \u003d used_ips.get(\"used_ips\")"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_e347411b","line":89,"updated":"2016-03-16 22:29:30.000000000","message":"This either.","commit_id":"a10f1a2304f45db94272634b94677cbd990c3e6c"},{"author":{"_account_id":12071,"name":"Richard Jones","email":"r1chardj0n3s@gmail.com","username":"richard"},"change_message_id":"0fcf5607c0f38a2ab7876019004eb6a6640bb67b","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                    self.request, network)"},{"line_number":104,"context_line":"        except Exception:"},{"line_number":105,"context_line":"            self.exception \u003d True"},{"line_number":106,"context_line":"        finally:"},{"line_number":107,"context_line":"            availabilities \u003d availability.get(\"network_ip_availability\", {})"},{"line_number":108,"context_line":"            subnets \u003d availabilities.get(\"subnet_ip_availability\", [])"},{"line_number":109,"context_line":"            for item in subnets:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_435715ce","line":106,"updated":"2016-03-16 22:29:30.000000000","message":"Or this.","commit_id":"a10f1a2304f45db94272634b94677cbd990c3e6c"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"42c8da075512e1582558fa07d19822eb949180c9","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        if networks:"},{"line_number":122,"context_line":"            self.exception \u003d False"},{"line_number":123,"context_line":"            tenant_dict \u003d self._get_tenant_list()"},{"line_number":124,"context_line":"            for number, n in enumerate(networks):"},{"line_number":125,"context_line":"                # Set tenant name"},{"line_number":126,"context_line":"                tenant \u003d tenant_dict.get(n.tenant_id, None)"},{"line_number":127,"context_line":"                n.tenant_name \u003d getattr(tenant, \u0027name\u0027, None)"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa0719c6_4d600bcf","line":124,"updated":"2016-03-21 18:53:30.000000000","message":"It doesn\u0027t look like you use number, so you probably don\u0027t need enumerate().","commit_id":"454a7b9fae883e18d3565129b5779ee9fa68c2b8"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"a1c883694248448b0a0890740a84d95a8cff4cd1","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            dhcp_agent_support \u003d api.neutron.is_extension_supported("},{"line_number":203,"context_line":"                self.request, \u0027dhcp_agent_scheduler\u0027)"},{"line_number":204,"context_line":"            context[\u0027dhcp_agent_support\u0027] \u003d dhcp_agent_support"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        except Exception:"},{"line_number":207,"context_line":"            context[\u0027dhcp_agent_support\u0027] \u003d False"},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa0719c6_062409ad","line":205,"updated":"2016-03-22 14:25:25.000000000","message":"nit: added blank line","commit_id":"2dd3e28609cb0b0fc47da88261ae5ae3b291d84e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"27ec964a436d13e0bce491dac79a67e90e7b4245","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            exceptions.handle(self.request, msg)"},{"line_number":75,"context_line":"        return data"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _get_ip_availability_data(self, network):"},{"line_number":78,"context_line":"        availability \u003d {}"},{"line_number":79,"context_line":"        used_ips \u003d {}"},{"line_number":80,"context_line":"        data \u003d _(\"Unknown\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"da0c15f0_8b72cfab","line":77,"range":{"start_line":77,"start_character":40,"end_line":77,"end_character":47},"updated":"2016-03-28 14:38:10.000000000","message":"network_id is more precise.","commit_id":"e6c88fcf9d59aeb21d2da5eca93af79db4a4df17"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"27ec964a436d13e0bce491dac79a67e90e7b4245","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            exceptions.handle(self.request, msg)"},{"line_number":92,"context_line":"        return data"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _get_subnet_availability_data(self, network):"},{"line_number":95,"context_line":"        availability \u003d {}"},{"line_number":96,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"da0c15f0_6ba2dbaf","line":94,"updated":"2016-03-28 14:38:10.000000000","message":"ditto","commit_id":"e6c88fcf9d59aeb21d2da5eca93af79db4a4df17"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"27ec964a436d13e0bce491dac79a67e90e7b4245","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            exceptions.handle(self.request, msg)"},{"line_number":75,"context_line":"        return data"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _get_ip_availability_data(self, network):"},{"line_number":78,"context_line":"        availability \u003d {}"},{"line_number":79,"context_line":"        used_ips \u003d {}"},{"line_number":80,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        try:"},{"line_number":83,"context_line":"            if api.neutron.is_extension_supported(self.request,"},{"line_number":84,"context_line":"                                                  \u0027network-ip-availability\u0027):"},{"line_number":85,"context_line":"                availability \u003d api.neutron.show_network_ip_availability("},{"line_number":86,"context_line":"                    self.request, network)"},{"line_number":87,"context_line":"                used_ips \u003d availability.get(\"network_ip_availability\", {})"},{"line_number":88,"context_line":"                data \u003d used_ips.get(\"used_ips\")"},{"line_number":89,"context_line":"        except Exception:"},{"line_number":90,"context_line":"            msg \u003d _(\"Unable to retrieve IP availability.\")"},{"line_number":91,"context_line":"            exceptions.handle(self.request, msg)"},{"line_number":92,"context_line":"        return data"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _get_subnet_availability_data(self, network):"},{"line_number":95,"context_line":"        availability \u003d {}"},{"line_number":96,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            if api.neutron.is_extension_supported("},{"line_number":100,"context_line":"                    self.request, \"network-ip-availability\"):"},{"line_number":101,"context_line":"                availability \u003d api.neutron.show_network_ip_availability("},{"line_number":102,"context_line":"                    self.request, network)"},{"line_number":103,"context_line":"                availabilities \u003d availability.get(\"network_ip_availability\","},{"line_number":104,"context_line":"                                                  {})"},{"line_number":105,"context_line":"                subnets \u003d availabilities.get(\"subnet_ip_availability\", [])"},{"line_number":106,"context_line":"                for item in subnets:"},{"line_number":107,"context_line":"                    remaining \u003d int(item.get(\"total_ips\")) \\"},{"line_number":108,"context_line":"                        - int(item.get(\"used_ips\"))"},{"line_number":109,"context_line":"                    item.update({\"remaining_ips\": remaining})"},{"line_number":110,"context_line":"                data \u003d availability.get(\"network_ip_availability\", data)"},{"line_number":111,"context_line":"        except Exception:"},{"line_number":112,"context_line":"            msg \u003d _(\"Unable to retrieve subnet IP availability.\")"},{"line_number":113,"context_line":"            exceptions.handle(self.request, msg)"},{"line_number":114,"context_line":"        return data"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def get_data(self):"},{"line_number":117,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":28,"id":"da0c15f0_4bd71723","line":114,"range":{"start_line":77,"start_character":1,"end_line":114,"end_character":19},"updated":"2016-03-28 14:38:10.000000000","message":"It\u0027s better to combine this two function because there are many duplicated code. \nWhat about _get_availability_data(self, network_id, with_subnet\u003dFalse):?","commit_id":"e6c88fcf9d59aeb21d2da5eca93af79db4a4df17"},{"author":{"_account_id":5127,"name":"Justin Hammond","email":"runningempty@gmail.com","username":"justin-hammond"},"change_message_id":"24163f40cdcc323dcea605e87b1ce11acb1e1705","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        agents \u003d []"},{"line_number":61,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":62,"context_line":"        supported \u003d api.neutron.is_extension_supported(self.request,"},{"line_number":63,"context_line":"                                                       \u0027dhcp_agent_scheduler\u0027)"},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            if supported:"},{"line_number":66,"context_line":"                # This method is called for each network. If agent-list cannot"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba0121b8_341f856d","line":63,"updated":"2016-03-30 20:10:57.000000000","message":"NIT: there are alternatives to getting pep8 to be ok with long lines. \n\nIf you insert a newline before self.request, those two lines can be on the same line if you have a single indentation -\u003e.\n\nThis would look less weird in my opinion. Only mentioning it because this method of line-continuation is used everywhere and the alternative has not been used.","commit_id":"d20358919696046779e00fa76da136c53de7d94c"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"783ccc7c325f7c2e227bd4099290b1e97a8994c4","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        agents \u003d []"},{"line_number":61,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":62,"context_line":"        supported \u003d api.neutron.is_extension_supported(self.request,"},{"line_number":63,"context_line":"                                                       \u0027dhcp_agent_scheduler\u0027)"},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            if supported:"},{"line_number":66,"context_line":"                # This method is called for each network. If agent-list cannot"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba0121b8_699763ec","line":63,"in_reply_to":"ba0121b8_341f856d","updated":"2016-03-30 22:33:44.000000000","message":"Personally, I prefer consistency within the file and would leave it as it is. But good point that there\u0027s another way to do this.","commit_id":"d20358919696046779e00fa76da136c53de7d94c"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"ef9730249375e3af35362ef70319e72e48d851cd","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def _get_agents_data(self, network):"},{"line_number":60,"context_line":"        agents \u003d []"},{"line_number":61,"context_line":"        data \u003d _(\"Unknown\")"},{"line_number":62,"context_line":"        supported \u003d api.neutron.is_extension_supported(self.request,"},{"line_number":63,"context_line":"                                                       \u0027dhcp_agent_scheduler\u0027)"},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            if supported:"}],"source_content_type":"text/x-python","patch_set":34,"id":"1a122d0e_0fb8a6e4","line":62,"updated":"2016-04-18 16:28:06.000000000","message":"We still want this in the try/except,\n\napi.neutron.list_extensions which this api call uses does not catch exceptions already.","commit_id":"a07e707c6f4734016b6df00ff5b15c506c705389"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"ef9730249375e3af35362ef70319e72e48d851cd","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _get_network_availability(self, network_id):"},{"line_number":78,"context_line":"        availabilities \u003d {}"},{"line_number":79,"context_line":"        if api.neutron.is_extension_supported(self.request,"},{"line_number":80,"context_line":"                                              \u0027network-ip-availability\u0027):"},{"line_number":81,"context_line":"            try:"},{"line_number":82,"context_line":"                availability \u003d api.neutron.\\"}],"source_content_type":"text/x-python","patch_set":34,"id":"1a122d0e_cfbd0ed9","line":79,"updated":"2016-04-18 16:28:06.000000000","message":"should be in try block.","commit_id":"a07e707c6f4734016b6df00ff5b15c506c705389"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"4ed7276e1cd52d48f239d4e63312178e253a879c","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        return availabilities"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _get_ip_availability_data(self, network_id):"},{"line_number":94,"context_line":"        used_ips \u003d self._get_network_availability(network_id)"},{"line_number":95,"context_line":"        return used_ips.get(\"used_ips\", _(\"Unknown\"))"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"1a122d0e_da892ecc","line":93,"updated":"2016-04-25 15:48:56.000000000","message":"Could this function be renamed to something like _get_used_ips_data? It was confusing reading the code as is, since I expect a value called ip_availability to be remaining available IPs.","commit_id":"64179801e077cc7631c5e3833f65538af1357f94"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"5f46c002244b6bb0fb9826d2c574bac40e5300e9","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                tenant \u003d tenant_dict.get(n.tenant_id, None)"},{"line_number":125,"context_line":"                n.tenant_name \u003d getattr(tenant, \u0027name\u0027, None)"},{"line_number":126,"context_line":"                n.num_agents \u003d self._get_agents_data(n.id)"},{"line_number":127,"context_line":"                n.availability \u003d self._get_used_ips_data(n.id)"},{"line_number":128,"context_line":"                n.subnet_availability \u003d self._get_subnet_availability(n.id)"},{"line_number":129,"context_line":"        return networks"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"dab17558_8fe95f1d","line":127,"updated":"2016-05-06 21:39:11.000000000","message":"I think this still has the performance issue we talked about at the summit because this call is done for every network on the page and does an API call for each one.\n\nI prefer we remove this from the networks table until the API call can be made asynchronously. For now, this info could be put just in the subnets table in the network details page.","commit_id":"35068826250e4c8ef867de29e380b4c20ae093e6"},{"author":{"_account_id":6763,"name":"jingliuqing","email":"jing.liuqing@99cloud.net","username":"jing"},"change_message_id":"a612629e55fcbe110aadf00d60385dd69ae00887","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                        item._apidict.update({\"used_ips\": subnet_used_ips})"},{"line_number":171,"context_line":"                        item._apidict.update({\"free_ips\": subnet_free_ips})"},{"line_number":172,"context_line":"        except Exception:"},{"line_number":173,"context_line":"            msg \u003d _(\"Unable to update subnets with availability.\")"},{"line_number":174,"context_line":"            exceptions.handle(self.request, msg)"},{"line_number":175,"context_line":"        return subnets_dict"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"dab17558_6932d7a8","line":173,"updated":"2016-05-16 11:04:31.000000000","message":"Unable to update subnets with IP availability","commit_id":"35068826250e4c8ef867de29e380b4c20ae093e6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e3be9b0cf4cd22c708ecc88a9f932c1de5c9d149","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                subnet_free_ips \u003d subnet_total_ips - subnet_used_ips"},{"line_number":130,"context_line":"                for item in subnets_dict:"},{"line_number":131,"context_line":"                    name \u003d item.get(\"name\")"},{"line_number":132,"context_line":"                    if name \u003d\u003d subnet_name:"},{"line_number":133,"context_line":"                        item._apidict.update({\"used_ips\": subnet_used_ips})"},{"line_number":134,"context_line":"                        item._apidict.update({\"free_ips\": subnet_free_ips})"},{"line_number":135,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":41,"id":"bab6814e_793a69e8","line":132,"range":{"start_line":132,"start_character":20,"end_line":132,"end_character":43},"updated":"2016-05-23 07:26:55.000000000","message":"subnet_name is not unique in neutron API.\nI would suggest to use subnet ID for comparison.","commit_id":"1815536d870dd5f33d3526bf13dd99db01d5913d"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"9667a978e5427b7997e18a1e3ee6d42baf693553","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                subnet_free_ips \u003d subnet_total_ips - subnet_used_ips"},{"line_number":130,"context_line":"                for item in subnets_dict:"},{"line_number":131,"context_line":"                    name \u003d item.get(\"name\")"},{"line_number":132,"context_line":"                    if name \u003d\u003d subnet_name:"},{"line_number":133,"context_line":"                        item._apidict.update({\"used_ips\": subnet_used_ips})"},{"line_number":134,"context_line":"                        item._apidict.update({\"free_ips\": subnet_free_ips})"},{"line_number":135,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":41,"id":"bab6814e_d2586333","line":132,"range":{"start_line":132,"start_character":20,"end_line":132,"end_character":43},"in_reply_to":"bab6814e_793a69e8","updated":"2016-05-23 18:42:01.000000000","message":"Done","commit_id":"1815536d870dd5f33d3526bf13dd99db01d5913d"}],"openstack_dashboard/dashboards/project/networks/tables.py":[{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"8636fb637b5be8a73a64dd62c064eaf120b5b614","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    template_name \u003d \u0027project/networks/_network_ips.html\u0027"},{"line_number":145,"context_line":"    context \u003d {\"subnets\": network.subnets}"},{"line_number":146,"context_line":"    return template.loader.render_to_string(template_name, context)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"DISPLAY_CHOICES \u003d ("},{"line_number":149,"context_line":"    (\"up\", pgettext_lazy(\"Admin state of a Network\", u\"UP\")),"},{"line_number":150,"context_line":"    (\"down\", pgettext_lazy(\"Admin state of a Network\", u\"DOWN\")),"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_197e1aae","line":147,"updated":"2016-03-17 00:34:16.000000000","message":"(nit) Please leave the whitespace alone here. Looks like this file doesn\u0027t need to change at all.","commit_id":"8731025850e1e9dce2070af62825c4ccb06d3c77"}],"openstack_dashboard/test/api_tests/neutron_tests.py":[{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"a9eb8fd3cb077ad2b8c407f536499ba68a619b8b","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        api.neutron.network_delete(self.request, network_id)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def test_network_ip_availability(self):"},{"line_number":114,"context_line":"        network \u003d {\u0027network\u0027: self.api_networks.first()}"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        neutronclient \u003d self.stub_neutronclient()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa0719c6_983703b0","line":113,"updated":"2016-03-21 19:09:32.000000000","message":"+1 on this test. Looks good!","commit_id":"454a7b9fae883e18d3565129b5779ee9fa68c2b8"},{"author":{"_account_id":20509,"name":"Daniel Castellanos","email":"luis.daniel.castellanos@intel.com","username":"lcastell"},"change_message_id":"6950b3855bb0573b37d7428ab5fc0e1e08149493","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        neutronclient.show_network_ip_availability(network)"},{"line_number":118,"context_line":"        self.mox.ReplayAll()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        api.neutron.show_network_ip_availability(self.request, network)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_subnet_list(self):"},{"line_number":123,"context_line":"        subnets \u003d {\u0027subnets\u0027: self.api_subnets.list()}"}],"source_content_type":"text/x-python","patch_set":27,"id":"da0c15f0_77fe876c","line":120,"updated":"2016-03-25 14:16:46.000000000","message":"Don\u0027t you missed an Assertion here? I think we can add one to check that the api call returned the expected value right?","commit_id":"196298c0889bc86c73a3ff7ee201619c47ee2a3f"}],"releasenotes/notes/ip-availability-be217ba59cc02b40.yaml":[{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"42c8da075512e1582558fa07d19822eb949180c9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Enable Horizon admin network dashboard to be able to"},{"line_number":5,"context_line":"    display IP availability."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Enables 2 columns in the admin networks table to "},{"line_number":8,"context_line":"    display the allocated IPs in a given network and "},{"line_number":9,"context_line":"    unallocated free IPs for each subnet in the networks. "}],"source_content_type":"text/x-yaml","patch_set":18,"id":"fa0719c6_aa638d19","line":9,"range":{"start_line":7,"start_character":4,"end_line":9,"end_character":58},"updated":"2016-03-21 18:53:30.000000000","message":"nit: spaces at end of lines","commit_id":"454a7b9fae883e18d3565129b5779ee9fa68c2b8"},{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"1909e975a3143351ea36dd3c01693aed1b743b72","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Enable Horizon admin network dashboard to be able to"},{"line_number":5,"context_line":"    display IP availability."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Enables 2 columns in the admin networks table to"},{"line_number":8,"context_line":"    display the allocated IPs in a given network and"},{"line_number":9,"context_line":"    unallocated free IPs for each subnet in the networks."}],"source_content_type":"text/x-yaml","patch_set":39,"id":"dab17558_456af3b3","line":7,"updated":"2016-05-17 22:22:01.000000000","message":"This text needs an update to say the info is in the subnets table.","commit_id":"4b8f7b486d8b4219ddcbff57782b70eadb6ae702"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e3be9b0cf4cd22c708ecc88a9f932c1de5c9d149","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  - Horizon support for network IP availability feature."},{"line_number":4,"context_line":"    Enable Horizon admin network dashboard to be able to"},{"line_number":5,"context_line":"    display IP availability."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Enables 2 columns in the admin network subnets table to"},{"line_number":8,"context_line":"    display the allocated IPs in a given subnet and"}],"source_content_type":"text/x-yaml","patch_set":41,"id":"bab6814e_790b897d","line":5,"updated":"2016-05-23 07:26:55.000000000","message":"I think we don\u0027t need to add this to \u0027prelude\u0027.\nThe prelude section is reserved for highlights of the release.\nCould you merge it into \u0027features\u0027?","commit_id":"1815536d870dd5f33d3526bf13dd99db01d5913d"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"9667a978e5427b7997e18a1e3ee6d42baf693553","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  - Horizon support for network IP availability feature."},{"line_number":4,"context_line":"    Enable Horizon admin network dashboard to be able to"},{"line_number":5,"context_line":"    display IP availability."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Enables 2 columns in the admin network subnets table to"},{"line_number":8,"context_line":"    display the allocated IPs in a given subnet and"}],"source_content_type":"text/x-yaml","patch_set":41,"id":"bab6814e_32444f48","line":5,"in_reply_to":"bab6814e_790b897d","updated":"2016-05-23 18:42:01.000000000","message":"Done","commit_id":"1815536d870dd5f33d3526bf13dd99db01d5913d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"83472a3052f17f416a1b33c1247fee2e9c9ef9fd","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    display IP availability."},{"line_number":6,"context_line":"  - Enables 2 columns in the admin network subnets table to"},{"line_number":7,"context_line":"    display the allocated IPs in a given subnet and"},{"line_number":8,"context_line":"    unallocated free IPs for each subnet in the network."}],"source_content_type":"text/x-yaml","patch_set":42,"id":"bab6814e_294cbe75","line":8,"updated":"2016-05-24 13:33:37.000000000","message":"I think it is better not to use multiple items for one feature.\nCould you merge two items into one?","commit_id":"32a86336de6c5c6faa00d596f3640ee32ad2efc2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ea14d6e7ebb5f4ffe40af21d5302798c4b315c37","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features: \u003e"},{"line_number":3,"context_line":"  - Horizon support for network IP availability feature."},{"line_number":4,"context_line":"    Enable Horizon admin network dashboard to be able to"},{"line_number":5,"context_line":"    display IP availability."}],"source_content_type":"text/x-yaml","patch_set":47,"id":"7aa08908_42f3f40a","line":2,"range":{"start_line":2,"start_character":10,"end_line":2,"end_character":11},"updated":"2016-06-05 11:22:36.000000000","message":"This is unnecessary. It leads to an ugly output [1].\n\n[1] http://docs-draft.openstack.org/71/283171/47/check/gate-horizon-releasenotes/6c5b9a5//releasenotes/build/html/unreleased.html","commit_id":"d880a55e8775b0ef5cf8d02302b8b8aecb515459"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ea14d6e7ebb5f4ffe40af21d5302798c4b315c37","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features: \u003e"},{"line_number":3,"context_line":"  - Horizon support for network IP availability feature."},{"line_number":4,"context_line":"    Enable Horizon admin network dashboard to be able to"},{"line_number":5,"context_line":"    display IP availability."},{"line_number":6,"context_line":"  - Enables 2 columns in the admin network subnets table to"},{"line_number":7,"context_line":"    display the allocated IPs in a given subnet and"},{"line_number":8,"context_line":"    unallocated free IPs for each subnet in the network."}],"source_content_type":"text/x-yaml","patch_set":47,"id":"7aa08908_62da707a","line":8,"range":{"start_line":3,"start_character":1,"end_line":8,"end_character":56},"updated":"2016-06-05 11:22:36.000000000","message":"Could you merge two bullets into one?\nWe usually use one item per feature in the release notes.","commit_id":"d880a55e8775b0ef5cf8d02302b8b8aecb515459"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"ffdd901142db3da1e74cb0e969d99406c9c1578c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features: "},{"line_number":3,"context_line":"    - Horizon support for network IP availability feature."},{"line_number":4,"context_line":"      Enable Horizon admin network dashboard to be able to"},{"line_number":5,"context_line":"      display IP availability. Enables 2 columns in the"}],"source_content_type":"text/x-yaml","patch_set":48,"id":"7aa08908_90c1a631","line":2,"range":{"start_line":2,"start_character":9,"end_line":2,"end_character":10},"updated":"2016-06-05 19:26:42.000000000","message":"remove extra space","commit_id":"8cf58d701102487bdac437366acc78c1a0210ec1"}]}
