)]}'
{"openstack_dashboard/api/neutron.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"635bea4b41c85a71ed7e1acd06e944f39a105fee","unresolved":false,"context_lines":[{"line_number":902,"context_line":""},{"line_number":903,"context_line":"@memoized"},{"line_number":904,"context_line":"def is_dhcp_extension_supported(request):"},{"line_number":905,"context_line":"    return is_extension_supported(request, \u0027dhcp_agent_scheduler\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_6f91eef0","line":905,"updated":"2014-07-19 05:54:46.000000000","message":"Honestly speaking, this method is unnecessary. We can call \nis_extension_supported(request, \u0027dhcp_agent_scheduler\u0027) directly from the code.\n\nis_security_group_extension_supported and is_agent_extension_supported provide no additional values. This topic has been discussed several times in reviews and adding a method per neutron extension is not productive :-(","commit_id":"19ffb77c0318df7e730c1e986147004292f40db4"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3478a629f52361846e6ce01cd75b70aec4d08180","unresolved":false,"context_lines":[{"line_number":902,"context_line":""},{"line_number":903,"context_line":"@memoized"},{"line_number":904,"context_line":"def is_dhcp_extension_supported(request):"},{"line_number":905,"context_line":"    return is_extension_supported(request, \u0027dhcp_agent_scheduler\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_0037d5e3","line":905,"in_reply_to":"baada198_6f91eef0","updated":"2014-07-21 03:03:12.000000000","message":"Done","commit_id":"19ffb77c0318df7e730c1e986147004292f40db4"}],"openstack_dashboard/dashboards/admin/networks/agents/forms.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                                 widget\u003dforms.TextInput("},{"line_number":36,"context_line":"                                     attrs\u003d{\u0027readonly\u0027: \u0027readonly\u0027}))"},{"line_number":37,"context_line":"    agent \u003d forms.ChoiceField(label\u003d_(\"New Agent\"),"},{"line_number":38,"context_line":"                              required\u003dTrue,"},{"line_number":39,"context_line":"                              help_text\u003d_(\"Choose a Agent to attach to.\"))"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, request, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8txw%3D","line":38,"updated":"2013-12-21 13:47:57.000000000","message":"True is the default value of \"required\", so it is unnecessary.","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                                 widget\u003dforms.TextInput("},{"line_number":36,"context_line":"                                     attrs\u003d{\u0027readonly\u0027: \u0027readonly\u0027}))"},{"line_number":37,"context_line":"    agent \u003d forms.ChoiceField(label\u003d_(\"New Agent\"),"},{"line_number":38,"context_line":"                              required\u003dTrue,"},{"line_number":39,"context_line":"                              help_text\u003d_(\"Choose a Agent to attach to.\"))"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, request, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tKI%3D","line":38,"in_reply_to":"AAAATn%2F8txw%3D","updated":"2013-12-22 10:06:12.000000000","message":"Done","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                                     attrs\u003d{\u0027readonly\u0027: \u0027readonly\u0027}))"},{"line_number":37,"context_line":"    agent \u003d forms.ChoiceField(label\u003d_(\"New Agent\"),"},{"line_number":38,"context_line":"                              required\u003dTrue,"},{"line_number":39,"context_line":"                              help_text\u003d_(\"Choose a Agent to attach to.\"))"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, request, *args, **kwargs):"},{"line_number":42,"context_line":"        super(AddAgent, self).__init__(request, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8txs%3D","line":39,"updated":"2013-12-21 13:47:57.000000000","message":"a Agent -\u003e an Agent","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                                     attrs\u003d{\u0027readonly\u0027: \u0027readonly\u0027}))"},{"line_number":37,"context_line":"    agent \u003d forms.ChoiceField(label\u003d_(\"New Agent\"),"},{"line_number":38,"context_line":"                              required\u003dTrue,"},{"line_number":39,"context_line":"                              help_text\u003d_(\"Choose a Agent to attach to.\"))"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, request, *args, **kwargs):"},{"line_number":42,"context_line":"        super(AddAgent, self).__init__(request, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tKE%3D","line":39,"in_reply_to":"AAAATn%2F8txs%3D","updated":"2013-12-22 10:06:12.000000000","message":"Done","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        network_id \u003d initial.get(\u0027network_id\u0027)"},{"line_number":49,"context_line":"        agents \u003d initial.get(\u0027agents\u0027)"},{"line_number":50,"context_line":"        exist_agents \u003d [agent.id for agent in"},{"line_number":51,"context_line":"                        api.neutron.list_dhcp_agent_hosting_networks(request,"},{"line_number":52,"context_line":"                                                                network_id)]"},{"line_number":53,"context_line":"        agent_list \u003d [(agent.id, agent.host) for agent in agents"},{"line_number":54,"context_line":"                      if agent.id not in exist_agents]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tyA%3D","line":51,"updated":"2013-12-21 13:47:57.000000000","message":"need to catch an error with try/except.","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        network_id \u003d initial.get(\u0027network_id\u0027)"},{"line_number":49,"context_line":"        agents \u003d initial.get(\u0027agents\u0027)"},{"line_number":50,"context_line":"        exist_agents \u003d [agent.id for agent in"},{"line_number":51,"context_line":"                        api.neutron.list_dhcp_agent_hosting_networks(request,"},{"line_number":52,"context_line":"                                                                network_id)]"},{"line_number":53,"context_line":"        agent_list \u003d [(agent.id, agent.host) for agent in agents"},{"line_number":54,"context_line":"                      if agent.id not in exist_agents]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tKA%3D","line":51,"in_reply_to":"AAAATn%2F8tyA%3D","updated":"2013-12-22 10:06:12.000000000","message":"Done","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            agent_list.insert(0, (\"\", _(\"Select a new agent\")))"},{"line_number":57,"context_line":"        else:"},{"line_number":58,"context_line":"            agent_list.insert(0, (\"\", _(\"No other agents available.\")))"},{"line_number":59,"context_line":"        return sorted(agent_list)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def handle(self, request, data):"},{"line_number":62,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tx0%3D","line":59,"updated":"2013-12-21 13:47:57.000000000","message":"Which field is used to sort agent_list in this case? If the sort key is UUID, it makes no sense.","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            agent_list.insert(0, (\"\", _(\"Select a new agent\")))"},{"line_number":57,"context_line":"        else:"},{"line_number":58,"context_line":"            agent_list.insert(0, (\"\", _(\"No other agents available.\")))"},{"line_number":59,"context_line":"        return sorted(agent_list)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def handle(self, request, data):"},{"line_number":62,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tJ8%3D","line":59,"in_reply_to":"AAAATn%2F8tx0%3D","updated":"2013-12-22 10:06:12.000000000","message":"You are right, don\u0027t need sort here.","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            messages.success(request, msg)"},{"line_number":68,"context_line":"            return True"},{"line_number":69,"context_line":"        except Exception:"},{"line_number":70,"context_line":"            msg \u003d _(\u0027Failed to add agent for network %s\u0027) \\"},{"line_number":71,"context_line":"                % data[\u0027network_id\u0027]"},{"line_number":72,"context_line":"            LOG.info(msg)"},{"line_number":73,"context_line":"            redirect \u003d reverse(\u0027horizon:admin:networks:detail\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tx4%3D","line":70,"updated":"2013-12-21 13:47:57.000000000","message":"It is better to report the reason of the failure in an error message.","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            messages.success(request, msg)"},{"line_number":68,"context_line":"            return True"},{"line_number":69,"context_line":"        except Exception:"},{"line_number":70,"context_line":"            msg \u003d _(\u0027Failed to add agent for network %s\u0027) \\"},{"line_number":71,"context_line":"                % data[\u0027network_id\u0027]"},{"line_number":72,"context_line":"            LOG.info(msg)"},{"line_number":73,"context_line":"            redirect \u003d reverse(\u0027horizon:admin:networks:detail\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tJ4%3D","line":70,"in_reply_to":"AAAATn%2F8tx4%3D","updated":"2013-12-22 10:06:12.000000000","message":"Done","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":6966,"name":"Jeffrey J. Walls","email":"jeff.walls@hpe.com","username":"ftcjeff"},"change_message_id":"3f7cbd593f2770b02f3452954ae138ca660b7381","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class AddAgent(forms.SelfHandlingForm):"},{"line_number":34,"context_line":"    network_id \u003d forms.CharField(label\u003d_(\"Network ID\"),"},{"line_number":35,"context_line":"                                 widget\u003dforms.TextInput("},{"line_number":36,"context_line":"                                     attrs\u003d{\u0027readonly\u0027: \u0027readonly\u0027}))"},{"line_number":37,"context_line":"    agent \u003d forms.ChoiceField(label\u003d_(\"New Agent\"),"},{"line_number":38,"context_line":"                              help_text\u003d_(\"Choose an Agent to attach to.\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FDUM%3D","line":35,"updated":"2014-01-17 22:09:44.000000000","message":"Make sure continuation lines match up with preceding lines.  E.g., match up \"widget\" to \"label\".","commit_id":"842f933d1101fa1989555201f277df83a6d3272c"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1b2d5f94f3b63debd14625cf6f5c05527662640c","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class AddAgent(forms.SelfHandlingForm):"},{"line_number":34,"context_line":"    network_id \u003d forms.CharField(label\u003d_(\"Network ID\"),"},{"line_number":35,"context_line":"                                 widget\u003dforms.TextInput("},{"line_number":36,"context_line":"                                     attrs\u003d{\u0027readonly\u0027: \u0027readonly\u0027}))"},{"line_number":37,"context_line":"    agent \u003d forms.ChoiceField(label\u003d_(\"New Agent\"),"},{"line_number":38,"context_line":"                              help_text\u003d_(\"Choose an Agent to attach to.\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2B%2BRI%3D","line":35,"in_reply_to":"AAAAUH%2F%2FDUM%3D","updated":"2014-01-20 08:30:23.000000000","message":"Done","commit_id":"842f933d1101fa1989555201f277df83a6d3272c"},{"author":{"_account_id":6966,"name":"Jeffrey J. Walls","email":"jeff.walls@hpe.com","username":"ftcjeff"},"change_message_id":"3f7cbd593f2770b02f3452954ae138ca660b7381","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.fields[\u0027agent\u0027].choices \u003d self.populate_agent_choices(request,"},{"line_number":44,"context_line":"                                                                   initial)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def populate_agent_choices(self, request, initial):"},{"line_number":47,"context_line":"        network_id \u003d initial.get(\u0027network_id\u0027)"},{"line_number":48,"context_line":"        agents \u003d initial.get(\u0027agents\u0027)"},{"line_number":49,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FDUI%3D","line":46,"updated":"2014-01-17 22:09:44.000000000","message":"Should be _populate_agent_choices","commit_id":"842f933d1101fa1989555201f277df83a6d3272c"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1b2d5f94f3b63debd14625cf6f5c05527662640c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.fields[\u0027agent\u0027].choices \u003d self.populate_agent_choices(request,"},{"line_number":44,"context_line":"                                                                   initial)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def populate_agent_choices(self, request, initial):"},{"line_number":47,"context_line":"        network_id \u003d initial.get(\u0027network_id\u0027)"},{"line_number":48,"context_line":"        agents \u003d initial.get(\u0027agents\u0027)"},{"line_number":49,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2B%2BRM%3D","line":46,"in_reply_to":"AAAAUH%2F%2FDUI%3D","updated":"2014-01-20 08:30:23.000000000","message":"Done","commit_id":"842f933d1101fa1989555201f277df83a6d3272c"},{"author":{"_account_id":6966,"name":"Jeffrey J. Walls","email":"jeff.walls@hpe.com","username":"ftcjeff"},"change_message_id":"3f7cbd593f2770b02f3452954ae138ca660b7381","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            exist_agents \u003d []"},{"line_number":55,"context_line":"            msg \u003d _(\u0027Unable to list dhcp agents hosting network\u0027)"},{"line_number":56,"context_line":"            exceptions.handle(request, msg)"},{"line_number":57,"context_line":"        agent_list \u003d [(agent.id, agent.host) for agent in agents"},{"line_number":58,"context_line":"                      if agent.id not in exist_agents]"},{"line_number":59,"context_line":"        if agent_list:"},{"line_number":60,"context_line":"            agent_list.insert(0, (\"\", _(\"Select a new agent\")))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FDT4%3D","line":57,"updated":"2014-01-17 22:09:44.000000000","message":"A blank line above line 57 would improve readability","commit_id":"842f933d1101fa1989555201f277df83a6d3272c"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1b2d5f94f3b63debd14625cf6f5c05527662640c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            exist_agents \u003d []"},{"line_number":55,"context_line":"            msg \u003d _(\u0027Unable to list dhcp agents hosting network\u0027)"},{"line_number":56,"context_line":"            exceptions.handle(request, msg)"},{"line_number":57,"context_line":"        agent_list \u003d [(agent.id, agent.host) for agent in agents"},{"line_number":58,"context_line":"                      if agent.id not in exist_agents]"},{"line_number":59,"context_line":"        if agent_list:"},{"line_number":60,"context_line":"            agent_list.insert(0, (\"\", _(\"Select a new agent\")))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2B%2BRE%3D","line":57,"in_reply_to":"AAAAUH%2F%2FDT4%3D","updated":"2014-01-20 08:30:23.000000000","message":"Done","commit_id":"842f933d1101fa1989555201f277df83a6d3272c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                            request, network_id)]"},{"line_number":53,"context_line":"        except Exception:"},{"line_number":54,"context_line":"            exist_agents \u003d []"},{"line_number":55,"context_line":"            msg \u003d _(\u0027Unable to list dhcp agents hosting network\u0027)"},{"line_number":56,"context_line":"            exceptions.handle(request, msg)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        agent_list \u003d [(agent.id, agent.host) for agent in agents"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Bam4%3D","line":55,"updated":"2014-01-27 06:21:17.000000000","message":"The message should be exactly same as the message in admin/networks/views.py (L.64). It reduces translators efforts.\n\nIn this case, a period is needed at the end of line.","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                            request, network_id)]"},{"line_number":53,"context_line":"        except Exception:"},{"line_number":54,"context_line":"            exist_agents \u003d []"},{"line_number":55,"context_line":"            msg \u003d _(\u0027Unable to list dhcp agents hosting network\u0027)"},{"line_number":56,"context_line":"            exceptions.handle(request, msg)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        agent_list \u003d [(agent.id, agent.host) for agent in agents"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaWU%3D","line":55,"in_reply_to":"AAAAUH%2F%2Bam4%3D","updated":"2014-01-27 08:32:25.000000000","message":"Done","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            messages.success(request, msg)"},{"line_number":73,"context_line":"            return True"},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            msg \u003d _(\u0027Failed to add agent for network %s\u0027) \\"},{"line_number":76,"context_line":"                % data[\u0027network_id\u0027]"},{"line_number":77,"context_line":"            LOG.error(msg)"},{"line_number":78,"context_line":"            redirect \u003d reverse(\u0027horizon:admin:networks:detail\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Bams%3D","line":75,"updated":"2014-01-27 06:21:17.000000000","message":"Needs a period at the end of line.","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            messages.success(request, msg)"},{"line_number":73,"context_line":"            return True"},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            msg \u003d _(\u0027Failed to add agent for network %s\u0027) \\"},{"line_number":76,"context_line":"                % data[\u0027network_id\u0027]"},{"line_number":77,"context_line":"            LOG.error(msg)"},{"line_number":78,"context_line":"            redirect \u003d reverse(\u0027horizon:admin:networks:detail\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaWQ%3D","line":75,"in_reply_to":"AAAAUH%2F%2Bams%3D","updated":"2014-01-27 08:32:25.000000000","message":"Done","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class AddAgent(forms.SelfHandlingForm):"},{"line_number":34,"context_line":"    network_id \u003d forms.CharField(label\u003d_(\"Network ID\"),"},{"line_number":35,"context_line":"                                 widget\u003dforms.TextInput("},{"line_number":36,"context_line":"                                     attrs\u003d{\u0027readonly\u0027: \u0027readonly\u0027}))"},{"line_number":37,"context_line":"    agent \u003d forms.ChoiceField(label\u003d_(\"New Agent\"),"},{"line_number":38,"context_line":"                              help_text\u003d_(\"Choose an Agent to attach to.\"))"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FsII%3D","line":36,"updated":"2014-02-25 09:16:14.000000000","message":"Can we show network name here?","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class AddAgent(forms.SelfHandlingForm):"},{"line_number":34,"context_line":"    network_id \u003d forms.CharField(label\u003d_(\"Network ID\"),"},{"line_number":35,"context_line":"                                 widget\u003dforms.TextInput("},{"line_number":36,"context_line":"                                     attrs\u003d{\u0027readonly\u0027: \u0027readonly\u0027}))"},{"line_number":37,"context_line":"    agent \u003d forms.ChoiceField(label\u003d_(\"New Agent\"),"},{"line_number":38,"context_line":"                              help_text\u003d_(\"Choose an Agent to attach to.\"))"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FguQ%3D","line":36,"in_reply_to":"AAAAU3%2F%2FsII%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                            api.neutron.list_dhcp_agent_hosting_networks("},{"line_number":52,"context_line":"                            request, network_id)]"},{"line_number":53,"context_line":"        except Exception:"},{"line_number":54,"context_line":"            exist_agents \u003d []"},{"line_number":55,"context_line":"            msg \u003d _(\u0027Unable to list dhcp agents hosting network.\u0027)"},{"line_number":56,"context_line":"            exceptions.handle(request, msg)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FsI0%3D","line":54,"updated":"2014-02-25 09:16:14.000000000","message":"IMO it is better to abort the processing here because exist_agents is used at L.59. As a result existing agents are listed in the agent choices and it will leads to an error in add agent operation.","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                            api.neutron.list_dhcp_agent_hosting_networks("},{"line_number":52,"context_line":"                            request, network_id)]"},{"line_number":53,"context_line":"        except Exception:"},{"line_number":54,"context_line":"            exist_agents \u003d []"},{"line_number":55,"context_line":"            msg \u003d _(\u0027Unable to list dhcp agents hosting network.\u0027)"},{"line_number":56,"context_line":"            exceptions.handle(request, msg)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FguI%3D","line":54,"in_reply_to":"AAAAU3%2F%2FsI0%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        try:"},{"line_number":68,"context_line":"            api.neutron.add_network_to_dhcp_agent(request, data[\u0027agent\u0027],"},{"line_number":69,"context_line":"                                                  data[\u0027network_id\u0027])"},{"line_number":70,"context_line":"            msg \u003d _(\u0027Agent %s was successfully added.\u0027) % data[\u0027agent\u0027]"},{"line_number":71,"context_line":"            LOG.debug(msg)"},{"line_number":72,"context_line":"            messages.success(request, msg)"},{"line_number":73,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FsDw%3D","line":70,"updated":"2014-02-25 09:16:14.000000000","message":"UUID of the agent is displayed. Please use agent.host here. The information should be consistent with the form.","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        try:"},{"line_number":68,"context_line":"            api.neutron.add_network_to_dhcp_agent(request, data[\u0027agent\u0027],"},{"line_number":69,"context_line":"                                                  data[\u0027network_id\u0027])"},{"line_number":70,"context_line":"            msg \u003d _(\u0027Agent %s was successfully added.\u0027) % data[\u0027agent\u0027]"},{"line_number":71,"context_line":"            LOG.debug(msg)"},{"line_number":72,"context_line":"            messages.success(request, msg)"},{"line_number":73,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fgt8%3D","line":70,"in_reply_to":"AAAAU3%2F%2FsDw%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            return True"},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            msg \u003d _(\u0027Failed to add agent for network %s.\u0027) \\"},{"line_number":76,"context_line":"                % data[\u0027network_id\u0027]"},{"line_number":77,"context_line":"            LOG.error(msg)"},{"line_number":78,"context_line":"            redirect \u003d reverse(\u0027horizon:admin:networks:detail\u0027,"},{"line_number":79,"context_line":"                               args\u003d(data[\u0027network_id\u0027],))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FsHc%3D","line":76,"updated":"2014-02-25 09:16:14.000000000","message":"Network UUID is not easy to understand. Can we show network name here?\n\nIn addition, it is better to show agent information here (agent.id and agent.host for log; agent.host for the message).","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            return True"},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            msg \u003d _(\u0027Failed to add agent for network %s.\u0027) \\"},{"line_number":76,"context_line":"                % data[\u0027network_id\u0027]"},{"line_number":77,"context_line":"            LOG.error(msg)"},{"line_number":78,"context_line":"            redirect \u003d reverse(\u0027horizon:admin:networks:detail\u0027,"},{"line_number":79,"context_line":"                               args\u003d(data[\u0027network_id\u0027],))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fgtw%3D","line":76,"in_reply_to":"AAAAU3%2F%2FsHc%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"73469844cc9bba3fcd577730893e3005481cd542","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"3ae8d1ca_b12462c7","line":1,"updated":"2014-05-27 07:50:06.000000000","message":"this has been removed from horizon.","commit_id":"e44d9d7a18455e7c7c0b083da56f1b7ab28543d4"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"106b4ab500fe554807e4290b99e34a610957122f","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            messages.success(request, msg)"},{"line_number":78,"context_line":"            return True"},{"line_number":79,"context_line":"        except Exception:"},{"line_number":80,"context_line":"            msg \u003d _(\u0027Failed to add agent %(agent_name)s(%(agent_id)s) \u0027"},{"line_number":81,"context_line":"                    \u0027for network %(network)s.\u0027) \\"},{"line_number":82,"context_line":"                % {\u0027agent_name\u0027: agent_name,"},{"line_number":83,"context_line":"                   \u0027agent_id\u0027: data[\u0027agent\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_cff9484f","line":80,"updated":"2014-07-15 15:23:22.000000000","message":"These error messages seem redundant.","commit_id":"bc137ba86245b696b19911c81303fbbf9bd25b90"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"7a50632688918709e34149cce9f9923a4213def1","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            messages.success(request, msg)"},{"line_number":78,"context_line":"            return True"},{"line_number":79,"context_line":"        except Exception:"},{"line_number":80,"context_line":"            msg \u003d _(\u0027Failed to add agent %(agent_name)s(%(agent_id)s) \u0027"},{"line_number":81,"context_line":"                    \u0027for network %(network)s.\u0027) \\"},{"line_number":82,"context_line":"                % {\u0027agent_name\u0027: agent_name,"},{"line_number":83,"context_line":"                   \u0027agent_id\u0027: data[\u0027agent\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_f01df611","line":80,"in_reply_to":"baada198_cff9484f","updated":"2014-07-16 01:27:21.000000000","message":"Done","commit_id":"bc137ba86245b696b19911c81303fbbf9bd25b90"}],"openstack_dashboard/dashboards/admin/networks/agents/tables.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"def get_agent_status(agent):"},{"line_number":63,"context_line":"    if agent.admin_state_up:"},{"line_number":64,"context_line":"        return _(\u0027Enabled\u0027)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    return _(\u0027Disabled\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tyw%3D","line":65,"updated":"2013-12-21 13:47:57.000000000","message":"Is this blank line needed?","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":62,"context_line":"def get_agent_status(agent):"},{"line_number":63,"context_line":"    if agent.admin_state_up:"},{"line_number":64,"context_line":"        return _(\u0027Enabled\u0027)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    return _(\u0027Disabled\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tJ0%3D","line":65,"in_reply_to":"AAAATn%2F8tyw%3D","updated":"2013-12-22 10:06:12.000000000","message":"Done","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"def get_agent_state(agent):"},{"line_number":70,"context_line":"    if agent.alive:"},{"line_number":71,"context_line":"        return _(\u0027Up\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    return _(\u0027Down\u0027)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tyo%3D","line":72,"updated":"2013-12-21 13:47:57.000000000","message":"Is this blank line needed?","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":69,"context_line":"def get_agent_state(agent):"},{"line_number":70,"context_line":"    if agent.alive:"},{"line_number":71,"context_line":"        return _(\u0027Up\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    return _(\u0027Down\u0027)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tJw%3D","line":72,"in_reply_to":"AAAATn%2F8tyo%3D","updated":"2013-12-22 10:06:12.000000000","message":"Done","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    class Meta:"},{"line_number":89,"context_line":"        name \u003d \"agents\""},{"line_number":90,"context_line":"        verbose_name \u003d _(\"Agents\")"},{"line_number":91,"context_line":"        table_actions \u003d (AddAgent, DeleteAgent)"},{"line_number":92,"context_line":"        row_actions \u003d (DeleteAgent,)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tyI%3D","line":90,"updated":"2013-12-21 13:47:57.000000000","message":"\"Agents\" -\u003e \"DHCP Agents\"","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    class Meta:"},{"line_number":89,"context_line":"        name \u003d \"agents\""},{"line_number":90,"context_line":"        verbose_name \u003d _(\"Agents\")"},{"line_number":91,"context_line":"        table_actions \u003d (AddAgent, DeleteAgent)"},{"line_number":92,"context_line":"        row_actions \u003d (DeleteAgent,)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tJs%3D","line":90,"in_reply_to":"AAAATn%2F8tyI%3D","updated":"2013-12-22 10:06:12.000000000","message":"Done","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":21,"context_line":"from django.template import defaultfilters as filters  # noqa"},{"line_number":22,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from horizon import exceptions"},{"line_number":25,"context_line":"from horizon import tables"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FsDY%3D","line":22,"updated":"2014-02-25 09:16:14.000000000","message":"\"# noqa\" is no longer required.","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":21,"context_line":"from django.template import defaultfilters as filters  # noqa"},{"line_number":22,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from horizon import exceptions"},{"line_number":25,"context_line":"from horizon import tables"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fgto%3D","line":22,"in_reply_to":"AAAAU3%2F%2FsDY%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class DeleteAgent(tables.DeleteAction):"},{"line_number":35,"context_line":"    data_type_singular \u003d _(\"Agent\")"},{"line_number":36,"context_line":"    data_type_plural \u003d _(\"Agents\")"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FsAA%3D","line":34,"updated":"2014-02-25 09:16:14.000000000","message":"DeleteDhcpAgent","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class DeleteAgent(tables.DeleteAction):"},{"line_number":35,"context_line":"    data_type_singular \u003d _(\"Agent\")"},{"line_number":36,"context_line":"    data_type_plural \u003d _(\"Agents\")"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fgtk%3D","line":34,"in_reply_to":"AAAAU3%2F%2FsAA%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            exceptions.handle(request, msg, redirect\u003dredirect)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class AddAgent(tables.LinkAction):"},{"line_number":52,"context_line":"    name \u003d \"add\""},{"line_number":53,"context_line":"    verbose_name \u003d _(\"Add Agent\")"},{"line_number":54,"context_line":"    url \u003d \"horizon:admin:networks:addagent\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fr%2F4%3D","line":51,"updated":"2014-02-25 09:16:14.000000000","message":"AddDhcpAgent","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            exceptions.handle(request, msg, redirect\u003dredirect)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class AddAgent(tables.LinkAction):"},{"line_number":52,"context_line":"    name \u003d \"add\""},{"line_number":53,"context_line":"    verbose_name \u003d _(\"Add Agent\")"},{"line_number":54,"context_line":"    url \u003d \"horizon:admin:networks:addagent\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fgtg%3D","line":51,"in_reply_to":"AAAAU3%2F%2Fr%2F4%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    return _(\u0027Down\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class AgentsTable(tables.DataTable):"},{"line_number":75,"context_line":"    id \u003d tables.Column(\u0027id\u0027, verbose_name\u003d_(\u0027Id\u0027), hidden\u003dTrue)"},{"line_number":76,"context_line":"    agent_type \u003d tables.Column(\u0027agent_type\u0027, verbose_name\u003d_(\u0027Type\u0027))"},{"line_number":77,"context_line":"    binary \u003d tables.Column(\"binary\", verbose_name\u003d_(\u0027Name\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fr6E%3D","line":74,"updated":"2014-02-25 09:16:14.000000000","message":"DhcpAgentsTable","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    return _(\u0027Down\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class AgentsTable(tables.DataTable):"},{"line_number":75,"context_line":"    id \u003d tables.Column(\u0027id\u0027, verbose_name\u003d_(\u0027Id\u0027), hidden\u003dTrue)"},{"line_number":76,"context_line":"    agent_type \u003d tables.Column(\u0027agent_type\u0027, verbose_name\u003d_(\u0027Type\u0027))"},{"line_number":77,"context_line":"    binary \u003d tables.Column(\"binary\", verbose_name\u003d_(\u0027Name\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fgtc%3D","line":74,"in_reply_to":"AAAAU3%2F%2Fr6E%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class AgentsTable(tables.DataTable):"},{"line_number":75,"context_line":"    id \u003d tables.Column(\u0027id\u0027, verbose_name\u003d_(\u0027Id\u0027), hidden\u003dTrue)"},{"line_number":76,"context_line":"    agent_type \u003d tables.Column(\u0027agent_type\u0027, verbose_name\u003d_(\u0027Type\u0027))"},{"line_number":77,"context_line":"    binary \u003d tables.Column(\"binary\", verbose_name\u003d_(\u0027Name\u0027))"},{"line_number":78,"context_line":"    host \u003d tables.Column(\u0027host\u0027, verbose_name\u003d_(\u0027Host\u0027))"},{"line_number":79,"context_line":"    status \u003d tables.Column(get_agent_status, verbose_name\u003d_(\u0027Status\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fr%2B8%3D","line":76,"updated":"2014-02-25 09:16:14.000000000","message":"This table displays only dhcp-agents, so agent_type has no additional information.","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class AgentsTable(tables.DataTable):"},{"line_number":75,"context_line":"    id \u003d tables.Column(\u0027id\u0027, verbose_name\u003d_(\u0027Id\u0027), hidden\u003dTrue)"},{"line_number":76,"context_line":"    agent_type \u003d tables.Column(\u0027agent_type\u0027, verbose_name\u003d_(\u0027Type\u0027))"},{"line_number":77,"context_line":"    binary \u003d tables.Column(\"binary\", verbose_name\u003d_(\u0027Name\u0027))"},{"line_number":78,"context_line":"    host \u003d tables.Column(\u0027host\u0027, verbose_name\u003d_(\u0027Host\u0027))"},{"line_number":79,"context_line":"    status \u003d tables.Column(get_agent_status, verbose_name\u003d_(\u0027Status\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FgtY%3D","line":76,"in_reply_to":"AAAAU3%2F%2Fr%2B8%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":74,"context_line":"class AgentsTable(tables.DataTable):"},{"line_number":75,"context_line":"    id \u003d tables.Column(\u0027id\u0027, verbose_name\u003d_(\u0027Id\u0027), hidden\u003dTrue)"},{"line_number":76,"context_line":"    agent_type \u003d tables.Column(\u0027agent_type\u0027, verbose_name\u003d_(\u0027Type\u0027))"},{"line_number":77,"context_line":"    binary \u003d tables.Column(\"binary\", verbose_name\u003d_(\u0027Name\u0027))"},{"line_number":78,"context_line":"    host \u003d tables.Column(\u0027host\u0027, verbose_name\u003d_(\u0027Host\u0027))"},{"line_number":79,"context_line":"    status \u003d tables.Column(get_agent_status, verbose_name\u003d_(\u0027Status\u0027))"},{"line_number":80,"context_line":"    state \u003d tables.Column(get_agent_state, verbose_name\u003d_(\u0027State\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fr%2Bs%3D","line":77,"updated":"2014-02-25 09:16:14.000000000","message":"Same as the above.","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":74,"context_line":"class AgentsTable(tables.DataTable):"},{"line_number":75,"context_line":"    id \u003d tables.Column(\u0027id\u0027, verbose_name\u003d_(\u0027Id\u0027), hidden\u003dTrue)"},{"line_number":76,"context_line":"    agent_type \u003d tables.Column(\u0027agent_type\u0027, verbose_name\u003d_(\u0027Type\u0027))"},{"line_number":77,"context_line":"    binary \u003d tables.Column(\"binary\", verbose_name\u003d_(\u0027Name\u0027))"},{"line_number":78,"context_line":"    host \u003d tables.Column(\u0027host\u0027, verbose_name\u003d_(\u0027Host\u0027))"},{"line_number":79,"context_line":"    status \u003d tables.Column(get_agent_status, verbose_name\u003d_(\u0027Status\u0027))"},{"line_number":80,"context_line":"    state \u003d tables.Column(get_agent_state, verbose_name\u003d_(\u0027State\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FgtU%3D","line":77,"in_reply_to":"AAAAU3%2F%2Fr%2Bs%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    binary \u003d tables.Column(\"binary\", verbose_name\u003d_(\u0027Name\u0027))"},{"line_number":78,"context_line":"    host \u003d tables.Column(\u0027host\u0027, verbose_name\u003d_(\u0027Host\u0027))"},{"line_number":79,"context_line":"    status \u003d tables.Column(get_agent_status, verbose_name\u003d_(\u0027Status\u0027))"},{"line_number":80,"context_line":"    state \u003d tables.Column(get_agent_state, verbose_name\u003d_(\u0027State\u0027))"},{"line_number":81,"context_line":"    heartbeat_timestamp \u003d tables.Column(\u0027heartbeat_timestamp\u0027,"},{"line_number":82,"context_line":"                                        verbose_name\u003d_(\u0027Updated At\u0027),"},{"line_number":83,"context_line":"                                        filters\u003d(utils_filters.parse_isotime,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fr5k%3D","line":80,"updated":"2014-02-25 09:16:14.000000000","message":"\"Admin State\" for consistency with other tables.","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    binary \u003d tables.Column(\"binary\", verbose_name\u003d_(\u0027Name\u0027))"},{"line_number":78,"context_line":"    host \u003d tables.Column(\u0027host\u0027, verbose_name\u003d_(\u0027Host\u0027))"},{"line_number":79,"context_line":"    status \u003d tables.Column(get_agent_status, verbose_name\u003d_(\u0027Status\u0027))"},{"line_number":80,"context_line":"    state \u003d tables.Column(get_agent_state, verbose_name\u003d_(\u0027State\u0027))"},{"line_number":81,"context_line":"    heartbeat_timestamp \u003d tables.Column(\u0027heartbeat_timestamp\u0027,"},{"line_number":82,"context_line":"                                        verbose_name\u003d_(\u0027Updated At\u0027),"},{"line_number":83,"context_line":"                                        filters\u003d(utils_filters.parse_isotime,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FgtQ%3D","line":80,"in_reply_to":"AAAAU3%2F%2Fr5k%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"106b4ab500fe554807e4290b99e34a610957122f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class DeleteDHCPAgent(tables.DeleteAction):"},{"line_number":35,"context_line":"    data_type_singular \u003d _(\"DHCP Agent\")"},{"line_number":36,"context_line":"    data_type_plural \u003d _(\"DHCP Agents\")"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_ef8b6cbd","line":34,"updated":"2014-07-15 15:23:22.000000000","message":"This class needs policy rule checks, see the other neutron tables for an example.","commit_id":"bc137ba86245b696b19911c81303fbbf9bd25b90"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"7a50632688918709e34149cce9f9923a4213def1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class DeleteDHCPAgent(tables.DeleteAction):"},{"line_number":35,"context_line":"    data_type_singular \u003d _(\"DHCP Agent\")"},{"line_number":36,"context_line":"    data_type_plural \u003d _(\"DHCP Agents\")"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_30184e1e","line":34,"in_reply_to":"baada198_ef8b6cbd","updated":"2014-07-16 01:27:21.000000000","message":"Done","commit_id":"bc137ba86245b696b19911c81303fbbf9bd25b90"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"106b4ab500fe554807e4290b99e34a610957122f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            exceptions.handle(request, msg, redirect\u003dredirect)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class AddDHCPAgent(tables.LinkAction):"},{"line_number":52,"context_line":"    name \u003d \"add\""},{"line_number":53,"context_line":"    verbose_name \u003d _(\"Add DHCP Agent\")"},{"line_number":54,"context_line":"    url \u003d \"horizon:admin:networks:adddhcpagent\""}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_6fb75c85","line":51,"updated":"2014-07-15 15:23:22.000000000","message":"same here.","commit_id":"bc137ba86245b696b19911c81303fbbf9bd25b90"}],"openstack_dashboard/dashboards/admin/networks/agents/views.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                       args\u003d(self.kwargs[\u0027network_id\u0027],))"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def get_agents(self):"},{"line_number":41,"context_line":"        if not hasattr(self, \"_agents\"):"},{"line_number":42,"context_line":"            try:"},{"line_number":43,"context_line":"                self._agents \u003d api.neutron.agent_list(self.request,"},{"line_number":44,"context_line":"                                                      agent_type\u003d\u0027DHCP agent\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tyM%3D","line":41,"updated":"2013-12-21 13:47:57.000000000","message":"Do we need to cache the data here? If needed, please use @memoized decorator. https://review.openstack.org/#/c/54094/ replaces other similar styles.","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                       args\u003d(self.kwargs[\u0027network_id\u0027],))"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def get_agents(self):"},{"line_number":41,"context_line":"        if not hasattr(self, \"_agents\"):"},{"line_number":42,"context_line":"            try:"},{"line_number":43,"context_line":"                self._agents \u003d api.neutron.agent_list(self.request,"},{"line_number":44,"context_line":"                                                      agent_type\u003d\u0027DHCP agent\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tJo%3D","line":41,"in_reply_to":"AAAATn%2F8tyM%3D","updated":"2013-12-22 10:06:12.000000000","message":"Done","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":6966,"name":"Jeffrey J. Walls","email":"jeff.walls@hpe.com","username":"ftcjeff"},"change_message_id":"3f7cbd593f2770b02f3452954ae138ca660b7381","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                       args\u003d(self.kwargs[\u0027network_id\u0027],))"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @memoized"},{"line_number":42,"context_line":"    def get_agents(self):"},{"line_number":43,"context_line":"        try:"},{"line_number":44,"context_line":"            return api.neutron.agent_list(self.request,"},{"line_number":45,"context_line":"                                          agent_type\u003d\u0027DHCP agent\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FDQ0%3D","line":42,"updated":"2014-01-17 22:09:44.000000000","message":"Maybe _get_agents and move it to before get_initial?","commit_id":"842f933d1101fa1989555201f277df83a6d3272c"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1b2d5f94f3b63debd14625cf6f5c05527662640c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                       args\u003d(self.kwargs[\u0027network_id\u0027],))"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @memoized"},{"line_number":42,"context_line":"    def get_agents(self):"},{"line_number":43,"context_line":"        try:"},{"line_number":44,"context_line":"            return api.neutron.agent_list(self.request,"},{"line_number":45,"context_line":"                                          agent_type\u003d\u0027DHCP agent\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2B%2BQ0%3D","line":42,"in_reply_to":"AAAAUH%2F%2FDQ0%3D","updated":"2014-01-20 08:30:23.000000000","message":"Done","commit_id":"842f933d1101fa1989555201f277df83a6d3272c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":19,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from horizon import exceptions"},{"line_number":22,"context_line":"from horizon import forms"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaoI%3D","line":19,"updated":"2014-01-27 06:21:17.000000000","message":"# noqa at L.18 and 19 are no longer required. Please remove them. They are declared as exception in tox.ini.\n\nIt applies to other files too.","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from django.core.urlresolvers import reverse  # noqa"},{"line_number":19,"context_line":"from django.utils.translation import ugettext_lazy as _  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from horizon import exceptions"},{"line_number":22,"context_line":"from horizon import forms"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaW4%3D","line":19,"in_reply_to":"AAAAUH%2F%2BaoI%3D","updated":"2014-01-27 08:32:25.000000000","message":"Done","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                        \"agents\": agents})"},{"line_number":51,"context_line":"        return initial"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @memoized.memoized_method"},{"line_number":54,"context_line":"    def _get_agents(self):"},{"line_number":55,"context_line":"        try:"},{"line_number":56,"context_line":"            return api.neutron.agent_list(self.request,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaoY%3D","line":53,"updated":"2014-01-27 06:21:17.000000000","message":"I am not sure if it work when an exception is raised? If not, we can use memoized_method for api.neutron.agent_list.","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                        \"agents\": agents})"},{"line_number":51,"context_line":"        return initial"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @memoized.memoized_method"},{"line_number":54,"context_line":"    def _get_agents(self):"},{"line_number":55,"context_line":"        try:"},{"line_number":56,"context_line":"            return api.neutron.agent_list(self.request,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaQQ%3D","line":53,"in_reply_to":"AAAAUH%2F%2BaoY%3D","updated":"2014-01-27 08:32:25.000000000","message":"Not sure about this, but other places also using memoized_method like this.","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        except Exception:"},{"line_number":59,"context_line":"            redirect \u003d reverse(self.failure_url,"},{"line_number":60,"context_line":"                               args\u003d(self.kwargs[\u0027network_id\u0027],))"},{"line_number":61,"context_line":"            msg \u003d _(\"Unable to retrieve agent.\")"},{"line_number":62,"context_line":"            exceptions.handle(self.request, msg, redirect\u003dredirect)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BanI%3D","line":61,"updated":"2014-01-27 06:21:17.000000000","message":"\"retrieve agent\" should be \"retrieve agent list\" or \"retrieve DHCP agent list\".","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        except Exception:"},{"line_number":59,"context_line":"            redirect \u003d reverse(self.failure_url,"},{"line_number":60,"context_line":"                               args\u003d(self.kwargs[\u0027network_id\u0027],))"},{"line_number":61,"context_line":"            msg \u003d _(\"Unable to retrieve agent.\")"},{"line_number":62,"context_line":"            exceptions.handle(self.request, msg, redirect\u003dredirect)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaW0%3D","line":61,"in_reply_to":"AAAAUH%2F%2BanI%3D","updated":"2014-01-27 08:32:25.000000000","message":"Done","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"}],"openstack_dashboard/dashboards/admin/networks/tables.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                         link\u003d\u0027horizon:admin:networks:detail\u0027)"},{"line_number":71,"context_line":"    subnets \u003d tables.Column(project_tables.get_subnets,"},{"line_number":72,"context_line":"                            verbose_name\u003d_(\"Subnets Associated\"),)"},{"line_number":73,"context_line":"    host \u003d tables.Column(\"host\", verbose_name\u003d_(\"Host\"))"},{"line_number":74,"context_line":"    shared \u003d tables.Column(\"shared\", verbose_name\u003d_(\"Shared\"),"},{"line_number":75,"context_line":"                           filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":76,"context_line":"    status \u003d tables.Column(\"status\", verbose_name\u003d_(\"Status\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tzA%3D","line":73,"updated":"2013-12-21 13:47:57.000000000","message":"Some plugins do not require dhcp agent. Some plugins have no support of dhcp-agent scheduler. You need to take care of these cases.\n\nDoes it work if one network is hosted by multiple dhcp agents? (I might be wrong because I haven\u0027t tested.)","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                         link\u003d\u0027horizon:admin:networks:detail\u0027)"},{"line_number":71,"context_line":"    subnets \u003d tables.Column(project_tables.get_subnets,"},{"line_number":72,"context_line":"                            verbose_name\u003d_(\"Subnets Associated\"),)"},{"line_number":73,"context_line":"    host \u003d tables.Column(\"host\", verbose_name\u003d_(\"Host\"))"},{"line_number":74,"context_line":"    shared \u003d tables.Column(\"shared\", verbose_name\u003d_(\"Shared\"),"},{"line_number":75,"context_line":"                           filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":76,"context_line":"    status \u003d tables.Column(\"status\", verbose_name\u003d_(\"Status\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tJk%3D","line":73,"in_reply_to":"AAAATn%2F8tzA%3D","updated":"2013-12-22 10:06:12.000000000","message":"Only show the number of DHCP agents here, if dhcp-agent-scheduler extension is not supported, host will be 0.","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    subnets \u003d tables.Column(project_tables.get_subnets,"},{"line_number":72,"context_line":"                            verbose_name\u003d_(\"Subnets Associated\"),)"},{"line_number":73,"context_line":"    # host will be 0, if dhcp_agent_scheduler extension is not supported"},{"line_number":74,"context_line":"    host \u003d tables.Column(\"host\", verbose_name\u003d_(\"DHCP Host\"))"},{"line_number":75,"context_line":"    shared \u003d tables.Column(\"shared\", verbose_name\u003d_(\"Shared\"),"},{"line_number":76,"context_line":"                           filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":77,"context_line":"    status \u003d tables.Column(\"status\", verbose_name\u003d_(\"Status\"))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Ban0%3D","line":74,"updated":"2014-01-27 06:21:17.000000000","message":"This fields displays the number of dhcp agents, so the filed name \"host\" looks inappropriate.","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    subnets \u003d tables.Column(project_tables.get_subnets,"},{"line_number":72,"context_line":"                            verbose_name\u003d_(\"Subnets Associated\"),)"},{"line_number":73,"context_line":"    # host will be 0, if dhcp_agent_scheduler extension is not supported"},{"line_number":74,"context_line":"    host \u003d tables.Column(\"host\", verbose_name\u003d_(\"DHCP Host\"))"},{"line_number":75,"context_line":"    shared \u003d tables.Column(\"shared\", verbose_name\u003d_(\"Shared\"),"},{"line_number":76,"context_line":"                           filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":77,"context_line":"    status \u003d tables.Column(\"status\", verbose_name\u003d_(\"Status\"))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaWs%3D","line":74,"in_reply_to":"AAAAUH%2F%2Ban0%3D","updated":"2014-01-27 08:32:25.000000000","message":"Done","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                            verbose_name\u003d_(\"Subnets Associated\"),)"},{"line_number":73,"context_line":"    # num_agents will be 0, if dhcp_agent_scheduler extension is not supported"},{"line_number":74,"context_line":"    num_agents \u003d tables.Column(\"num_agents\","},{"line_number":75,"context_line":"                               verbose_name\u003d_(\"Number of DHCP Agents\"))"},{"line_number":76,"context_line":"    shared \u003d tables.Column(\"shared\", verbose_name\u003d_(\"Shared\"),"},{"line_number":77,"context_line":"                           filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":78,"context_line":"    status \u003d tables.Column(\"status\", verbose_name\u003d_(\"Status\"))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fr4w%3D","line":75,"updated":"2014-02-25 09:16:14.000000000","message":"This field is meaningless for plugins without dhcp-agent. Can you make it invisible if dhcp-agent agent extension.","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9605436026d55ddd0f0e7f5a31f72a8eaf8c8745","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                            verbose_name\u003d_(\"Subnets Associated\"),)"},{"line_number":73,"context_line":"    # num_agents will be 0, if dhcp_agent_scheduler extension is not supported"},{"line_number":74,"context_line":"    num_agents \u003d tables.Column(\"num_agents\","},{"line_number":75,"context_line":"                               verbose_name\u003d_(\"Number of DHCP Agents\"))"},{"line_number":76,"context_line":"    shared \u003d tables.Column(\"shared\", verbose_name\u003d_(\"Shared\"),"},{"line_number":77,"context_line":"                           filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":78,"context_line":"    status \u003d tables.Column(\"status\", verbose_name\u003d_(\"Status\"))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FevA%3D","line":75,"in_reply_to":"AAAAU3%2F%2FgsI%3D","updated":"2014-02-26 11:40:26.000000000","message":"I understand the situation. After looking at the horizon/tables, there is no public method to hide a particular column when the table is instantiated. It seems better to deal with this topic in a separate patch. Let\u0027s keep as-is in this review.","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                            verbose_name\u003d_(\"Subnets Associated\"),)"},{"line_number":73,"context_line":"    # num_agents will be 0, if dhcp_agent_scheduler extension is not supported"},{"line_number":74,"context_line":"    num_agents \u003d tables.Column(\"num_agents\","},{"line_number":75,"context_line":"                               verbose_name\u003d_(\"Number of DHCP Agents\"))"},{"line_number":76,"context_line":"    shared \u003d tables.Column(\"shared\", verbose_name\u003d_(\"Shared\"),"},{"line_number":77,"context_line":"                           filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":78,"context_line":"    status \u003d tables.Column(\"status\", verbose_name\u003d_(\"Status\"))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FgsI%3D","line":75,"in_reply_to":"AAAAU3%2F%2Fr4w%3D","updated":"2014-02-26 07:49:56.000000000","message":"is_dhcp_extension_supported needs to pass param request, any idea to handle the situation?","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"73469844cc9bba3fcd577730893e3005481cd542","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                            verbose_name\u003d_(\"Subnets Associated\"),)"},{"line_number":71,"context_line":"    # num_agents will be 0, if dhcp_agent_scheduler extension is not supported"},{"line_number":72,"context_line":"    num_agents \u003d tables.Column(\"num_agents\","},{"line_number":73,"context_line":"                               verbose_name\u003d_(\"Number of DHCP Agents\"))"},{"line_number":74,"context_line":"    shared \u003d tables.Column(\"shared\", verbose_name\u003d_(\"Shared\"),"},{"line_number":75,"context_line":"                           filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":76,"context_line":"    status \u003d tables.Column(\"status\", verbose_name\u003d_(\"Status\"))"}],"source_content_type":"text/x-python","patch_set":8,"id":"3ae8d1ca_e33d41bd","line":73,"updated":"2014-05-27 07:50:06.000000000","message":"the verbose_name seems too long for a Column, how about replacing it with \"DHCP Agents\"?","commit_id":"e44d9d7a18455e7c7c0b083da56f1b7ab28543d4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ac1d3f6a2d8402a46a22bbbf8adc7964686ecbdb","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    # num_agents will be Unknown, if dhcp_agent_scheduler extension is"},{"line_number":87,"context_line":"    # not supported"},{"line_number":88,"context_line":"    num_agents \u003d tables.Column(\"num_agents\","},{"line_number":89,"context_line":"                               verbose_name\u003d_(\"DHCP Agents\"))"},{"line_number":90,"context_line":"    shared \u003d tables.Column(\"shared\", verbose_name\u003d_(\"Shared\"),"},{"line_number":91,"context_line":"                           filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":92,"context_line":"    status \u003d tables.Column(\"status\", verbose_name\u003d_(\"Status\"))"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_698bee1d","line":89,"updated":"2014-07-28 15:38:38.000000000","message":"Can we hide num_agents column if dhcp-agent-scheduler extension is not supported? In this case, this column is completely useless.","commit_id":"27f37aec4cd11d59e31ed33eb019e1d55810949c"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"0e857b420cb1f4d695bcb7be52df0f5b739a3154","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    # num_agents will be Unknown, if dhcp_agent_scheduler extension is"},{"line_number":87,"context_line":"    # not supported"},{"line_number":88,"context_line":"    num_agents \u003d tables.Column(\"num_agents\","},{"line_number":89,"context_line":"                               verbose_name\u003d_(\"DHCP Agents\"))"},{"line_number":90,"context_line":"    shared \u003d tables.Column(\"shared\", verbose_name\u003d_(\"Shared\"),"},{"line_number":91,"context_line":"                           filters\u003d(filters.yesno, filters.capfirst))"},{"line_number":92,"context_line":"    status \u003d tables.Column(\"status\", verbose_name\u003d_(\"Status\"))"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_dd403037","line":89,"in_reply_to":"baada198_698bee1d","updated":"2014-07-28 17:04:32.000000000","message":"Done","commit_id":"27f37aec4cd11d59e31ed33eb019e1d55810949c"}],"openstack_dashboard/dashboards/admin/networks/templates/networks/agents/add.html":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{% extends \u0027base.html\u0027 %}"},{"line_number":2,"context_line":"{% load i18n %}"},{"line_number":3,"context_line":"{% block title %}{% trans \"Add Agent\" %}{% endblock %}"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"{% block page_header %}"},{"line_number":6,"context_line":"  {% include \"horizon/common/_page_header.html\" with title\u003d_(\"Add Agent\") %}"}],"source_content_type":"text/html","patch_set":6,"id":"AAAAU3%2F%2Fr5M%3D","line":3,"updated":"2014-02-25 09:16:14.000000000","message":"DHCP Agent","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{% extends \u0027base.html\u0027 %}"},{"line_number":2,"context_line":"{% load i18n %}"},{"line_number":3,"context_line":"{% block title %}{% trans \"Add Agent\" %}{% endblock %}"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"{% block page_header %}"},{"line_number":6,"context_line":"  {% include \"horizon/common/_page_header.html\" with title\u003d_(\"Add Agent\") %}"}],"source_content_type":"text/html","patch_set":6,"id":"AAAAU3%2F%2Fgr8%3D","line":3,"in_reply_to":"AAAAU3%2F%2Fr5M%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2f3902857f1a48e3ee15e47fb2f2f00081781b51","unresolved":false,"context_lines":[{"line_number":3,"context_line":"{% block title %}{% trans \"Add Agent\" %}{% endblock %}"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"{% block page_header %}"},{"line_number":6,"context_line":"  {% include \"horizon/common/_page_header.html\" with title\u003d_(\"Add Agent\") %}"},{"line_number":7,"context_line":"{% endblock page_header %}"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"{% block main %}"}],"source_content_type":"text/html","patch_set":6,"id":"AAAAU3%2F%2Fr5Q%3D","line":6,"updated":"2014-02-25 09:16:14.000000000","message":"DHCP Agent","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f8926d50e5949e8319b07f6210bf2e38063e4a52","unresolved":false,"context_lines":[{"line_number":3,"context_line":"{% block title %}{% trans \"Add Agent\" %}{% endblock %}"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"{% block page_header %}"},{"line_number":6,"context_line":"  {% include \"horizon/common/_page_header.html\" with title\u003d_(\"Add Agent\") %}"},{"line_number":7,"context_line":"{% endblock page_header %}"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"{% block main %}"}],"source_content_type":"text/html","patch_set":6,"id":"AAAAU3%2F%2Fgr4%3D","line":6,"in_reply_to":"AAAAU3%2F%2Fr5Q%3D","updated":"2014-02-26 07:49:56.000000000","message":"Done","commit_id":"4f6f41f54fde8c5eabc1403f16805c56d79f7c56"}],"openstack_dashboard/dashboards/admin/networks/templates/networks/index.html":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"  \u003cdiv id\u003d\"agents\"\u003e"},{"line_number":23,"context_line":"    {{ agents_table.render }}"},{"line_number":24,"context_line":"  \u003c/div\u003e"},{"line_number":25,"context_line":"{% endblock %}"}],"source_content_type":"text/html","patch_set":1,"id":"AAAATn%2F8tzE%3D","line":24,"updated":"2013-12-21 13:47:57.000000000","message":"Whether dhcp agents and dhcp-agent scheduler are supported depends on backend neutron plugins. At least the agent table should not be displayed only when a backend plugin uses dhcp-agent.","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"  \u003cdiv id\u003d\"agents\"\u003e"},{"line_number":23,"context_line":"    {{ agents_table.render }}"},{"line_number":24,"context_line":"  \u003c/div\u003e"},{"line_number":25,"context_line":"{% endblock %}"}],"source_content_type":"text/html","patch_set":1,"id":"AAAATn%2F8tJg%3D","line":24,"in_reply_to":"AAAATn%2F8tzE%3D","updated":"2013-12-22 10:06:12.000000000","message":"agents_table is rendered in detail view, removed from here, seems like the same with subnets_table and ports_table...","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"}],"openstack_dashboard/dashboards/admin/networks/urls.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from django.conf.urls import url  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from openstack_dashboard.dashboards.admin.networks import views"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from openstack_dashboard.dashboards.admin.networks.agents \\"},{"line_number":24,"context_line":"    import views as agent_views"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BasQ%3D","line":22,"updated":"2014-01-27 06:21:17.000000000","message":"No blank line is needed here.","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from django.conf.urls import url  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from openstack_dashboard.dashboards.admin.networks import views"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from openstack_dashboard.dashboards.admin.networks.agents \\"},{"line_number":24,"context_line":"    import views as agent_views"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaWo%3D","line":22,"in_reply_to":"AAAAUH%2F%2BasQ%3D","updated":"2014-01-27 08:32:25.000000000","message":"Done","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from openstack_dashboard.dashboards.admin.networks.agents \\"},{"line_number":24,"context_line":"    import views as agent_views"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from openstack_dashboard.dashboards.admin.networks.subnets \\"},{"line_number":27,"context_line":"    import urls as subnet_urls"},{"line_number":28,"context_line":"from openstack_dashboard.dashboards.admin.networks.subnets \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BasI%3D","line":25,"updated":"2014-01-27 06:21:17.000000000","message":"Ditto","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from openstack_dashboard.dashboards.admin.networks.agents \\"},{"line_number":24,"context_line":"    import views as agent_views"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from openstack_dashboard.dashboards.admin.networks.subnets \\"},{"line_number":27,"context_line":"    import urls as subnet_urls"},{"line_number":28,"context_line":"from openstack_dashboard.dashboards.admin.networks.subnets \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaWk%3D","line":25,"in_reply_to":"AAAAUH%2F%2BasI%3D","updated":"2014-01-27 08:32:25.000000000","message":"Done","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"}],"openstack_dashboard/dashboards/admin/networks/views.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def _get_agents_data(self, network):"},{"line_number":58,"context_line":"        agents \u003d api.neutron.list_dhcp_agent_hosting_networks(self.request,"},{"line_number":59,"context_line":"                                                              network)"},{"line_number":60,"context_line":"        return len(agents)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_data(self):"},{"line_number":63,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8ty8%3D","line":60,"updated":"2013-12-21 13:47:57.000000000","message":"We need to wrap API call with try/except.\n\nIn addition, we need to check dhcp-agent scheduler extension is supported or not.","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"81f66199fb59ba2de6d078f6c363d60779ebadcf","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def _get_agents_data(self, network):"},{"line_number":58,"context_line":"        agents \u003d api.neutron.list_dhcp_agent_hosting_networks(self.request,"},{"line_number":59,"context_line":"                                                              network)"},{"line_number":60,"context_line":"        return len(agents)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_data(self):"},{"line_number":63,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F8tJc%3D","line":60,"in_reply_to":"AAAATn%2F8ty8%3D","updated":"2013-12-22 10:06:12.000000000","message":"Done","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a6ec73b8e6fdc301158c099c314ca4bd365082c0","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        # Since we could not get the request object here, so it is not"},{"line_number":101,"context_line":"        # possible to use is_dhcp_extension_supported."},{"line_number":102,"context_line":"        # TODO(yingjun): Needs to exclude agents table if dhcp-agent-scheduler"},{"line_number":103,"context_line":"        # extension not supported."},{"line_number":104,"context_line":"        self.table_classes \u003d (self.table_classes +"},{"line_number":105,"context_line":"                              (agents_tables.AgentsTable,))"},{"line_number":106,"context_line":"        super(DetailView, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F8tI0%3D","line":103,"updated":"2013-12-22 10:13:59.000000000","message":"Do not get any clue how to get the request object..","commit_id":"883176b7b95e2b043f3f4e10ddf00a069eb5d8af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1a28e026033618eb1205de091aa77440a82590de","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        # Since we could not get the request object here, so it is not"},{"line_number":101,"context_line":"        # possible to use is_dhcp_extension_supported."},{"line_number":102,"context_line":"        # TODO(yingjun): Needs to exclude agents table if dhcp-agent-scheduler"},{"line_number":103,"context_line":"        # extension not supported."},{"line_number":104,"context_line":"        self.table_classes \u003d (self.table_classes +"},{"line_number":105,"context_line":"                              (agents_tables.AgentsTable,))"},{"line_number":106,"context_line":"        super(DetailView, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F8soY%3D","line":103,"in_reply_to":"AAAATn%2F8tI0%3D","updated":"2013-12-23 01:45:10.000000000","message":"Fixed this by moving the assessment code to project/networks/detail.html","commit_id":"883176b7b95e2b043f3f4e10ddf00a069eb5d8af"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                agents \u003d api.neutron.list_dhcp_agent_hosting_networks("},{"line_number":62,"context_line":"                    self.request, network)"},{"line_number":63,"context_line":"            except Exception:"},{"line_number":64,"context_line":"                msg \u003d _(\u0027Unable to list dhcp agents hosting network.\u0027)"},{"line_number":65,"context_line":"                exceptions.handle(self.request, msg)"},{"line_number":66,"context_line":"        return len(agents)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BanM%3D","line":64,"updated":"2014-01-27 06:21:17.000000000","message":"This method is called for each network. If agent-list cannot be retrieved, we will see many pop-ups. I think it is better the error message is popup-ed in get_data() below.","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                agents \u003d api.neutron.list_dhcp_agent_hosting_networks("},{"line_number":62,"context_line":"                    self.request, network)"},{"line_number":63,"context_line":"            except Exception:"},{"line_number":64,"context_line":"                msg \u003d _(\u0027Unable to list dhcp agents hosting network.\u0027)"},{"line_number":65,"context_line":"                exceptions.handle(self.request, msg)"},{"line_number":66,"context_line":"        return len(agents)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaT8%3D","line":64,"in_reply_to":"AAAAUH%2F%2BanM%3D","updated":"2014-01-27 08:32:25.000000000","message":"Done","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                n.tenant_name \u003d getattr(tenant, \u0027name\u0027, None)"},{"line_number":81,"context_line":"                # If name is empty use UUID as name"},{"line_number":82,"context_line":"                n.set_id_as_name_if_empty()"},{"line_number":83,"context_line":"                n.host \u003d self._get_agents_data(n.id)"},{"line_number":84,"context_line":"        return networks"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Bar0%3D","line":83,"updated":"2014-01-27 06:21:17.000000000","message":"_get_agents_data returns the number of dhcp-agents hosting the specified network, so \"host\" looks a inappropriate name. \"num_agents\"?","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                n.tenant_name \u003d getattr(tenant, \u0027name\u0027, None)"},{"line_number":81,"context_line":"                # If name is empty use UUID as name"},{"line_number":82,"context_line":"                n.set_id_as_name_if_empty()"},{"line_number":83,"context_line":"                n.host \u003d self._get_agents_data(n.id)"},{"line_number":84,"context_line":"        return networks"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaWg%3D","line":83,"in_reply_to":"AAAAUH%2F%2Bar0%3D","updated":"2014-01-27 08:32:25.000000000","message":"Done","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            agents \u003d api.neutron.list_dhcp_agent_hosting_networks(self.request,"},{"line_number":130,"context_line":"                                                                  network_id)"},{"line_number":131,"context_line":"        except Exception:"},{"line_number":132,"context_line":"            msg \u003d _(\u0027Agent list can not be retrieved.\u0027)"},{"line_number":133,"context_line":"            exceptions.handle(self.request, msg)"},{"line_number":134,"context_line":"        return agents"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BanU%3D","line":132,"updated":"2014-01-27 06:21:17.000000000","message":"The message should be same as the message at L.64.","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            agents \u003d api.neutron.list_dhcp_agent_hosting_networks(self.request,"},{"line_number":130,"context_line":"                                                                  network_id)"},{"line_number":131,"context_line":"        except Exception:"},{"line_number":132,"context_line":"            msg \u003d _(\u0027Agent list can not be retrieved.\u0027)"},{"line_number":133,"context_line":"            exceptions.handle(self.request, msg)"},{"line_number":134,"context_line":"        return agents"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaWc%3D","line":132,"in_reply_to":"AAAAUH%2F%2BanU%3D","updated":"2014-01-27 08:32:25.000000000","message":"Done","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a85bd29361ca9e03b331a579e382d0238b42f916","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # is not supported."},{"line_number":155,"context_line":"        dhcp_agent_support \u003d False"},{"line_number":156,"context_line":"        if api.neutron.is_dhcp_extension_supported(self.request):"},{"line_number":157,"context_line":"            dhcp_agent_support \u003d True"},{"line_number":158,"context_line":"        context[\u0027dhcp_agent_support\u0027] \u003d dhcp_agent_support"},{"line_number":159,"context_line":"        return context"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Baoo%3D","line":157,"updated":"2014-01-27 06:21:17.000000000","message":"Please consider:\n\n  dhcp_agent_support \u003d api.neutron.is_dhcp_extension_supported(self.request)","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3399eda61bc02547b76cfe407a05aaa483718f1b","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # is not supported."},{"line_number":155,"context_line":"        dhcp_agent_support \u003d False"},{"line_number":156,"context_line":"        if api.neutron.is_dhcp_extension_supported(self.request):"},{"line_number":157,"context_line":"            dhcp_agent_support \u003d True"},{"line_number":158,"context_line":"        context[\u0027dhcp_agent_support\u0027] \u003d dhcp_agent_support"},{"line_number":159,"context_line":"        return context"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2BaWY%3D","line":157,"in_reply_to":"AAAAUH%2F%2Baoo%3D","updated":"2014-01-27 08:32:25.000000000","message":"Done","commit_id":"48cc51f2a0cbced03dd3cbc7f4a002f5da78872d"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"73469844cc9bba3fcd577730893e3005481cd542","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    self.request, network)"},{"line_number":64,"context_line":"            except Exception:"},{"line_number":65,"context_line":"                self.exception \u003d True"},{"line_number":66,"context_line":"        return len(agents)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_data(self):"},{"line_number":69,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3ae8d1ca_234649c0","line":66,"updated":"2014-05-27 07:50:06.000000000","message":"I don\u0027t think return 0 is a good idea if dhcp_agent_scheduler extension is not supported, \u00270\u0027 means the network isn\u0027t assigned to any dhcp agent which will confuse users. IMO, return _(\"Unknown\") seems much better.","commit_id":"e44d9d7a18455e7c7c0b083da56f1b7ab28543d4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"635bea4b41c85a71ed7e1acd06e944f39a105fee","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        context[\"network\"] \u003d self._get_data()"},{"line_number":160,"context_line":"        # Needs to exclude agents table if dhcp-agent-scheduler extension"},{"line_number":161,"context_line":"        # is not supported."},{"line_number":162,"context_line":"        dhcp_agent_support \u003d api.neutron.is_dhcp_extension_supported("},{"line_number":163,"context_line":"            self.request)"},{"line_number":164,"context_line":"        context[\u0027dhcp_agent_support\u0027] \u003d dhcp_agent_support"},{"line_number":165,"context_line":"        return context"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_b87675d6","line":162,"updated":"2014-07-19 05:54:46.000000000","message":"This needs to be wrapped by try/except.","commit_id":"19ffb77c0318df7e730c1e986147004292f40db4"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3478a629f52361846e6ce01cd75b70aec4d08180","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        context[\"network\"] \u003d self._get_data()"},{"line_number":160,"context_line":"        # Needs to exclude agents table if dhcp-agent-scheduler extension"},{"line_number":161,"context_line":"        # is not supported."},{"line_number":162,"context_line":"        dhcp_agent_support \u003d api.neutron.is_dhcp_extension_supported("},{"line_number":163,"context_line":"            self.request)"},{"line_number":164,"context_line":"        context[\u0027dhcp_agent_support\u0027] \u003d dhcp_agent_support"},{"line_number":165,"context_line":"        return context"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_009355a3","line":162,"in_reply_to":"baada198_b87675d6","updated":"2014-07-21 03:03:12.000000000","message":"Done","commit_id":"19ffb77c0318df7e730c1e986147004292f40db4"}],"openstack_dashboard/dashboards/project/networks/templates/networks/detail.html":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"37472c16b12ba42d787a2a495886521b6876ce7a","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  \u003c/div\u003e"},{"line_number":18,"context_line":"  \u003cdiv id\u003d\"agents\"\u003e"},{"line_number":19,"context_line":"    {{ agents_table.render }}"},{"line_number":20,"context_line":"  \u003c/div\u003e"},{"line_number":21,"context_line":"{% endblock %}"}],"source_content_type":"text/html","patch_set":1,"id":"AAAATn%2F8ty4%3D","line":20,"updated":"2013-12-21 13:47:57.000000000","message":"agent information is only available for admin. IMO the agent table should be placed in the project view.","commit_id":"bfbaf0c892697b751e3db267fffa3e874f754945"}]}
