)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"4059f610652044094e36d2a699cf4673ccb1e9d7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"New readonly panel for trunks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Enable display of trunks."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Iacb83f22f81e09457953622e61065f0bb2c27407"},{"line_number":12,"context_line":"Partially-Implements: blueprint neutron-trunk-ui"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3f044301_35768d08","line":9,"updated":"2017-05-04 13:01:41.000000000","message":"I think we should mention this patch is for the project dashboard only.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b2110f896c6e1eeb5ea01c65f7ceae098bf17799","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"New readonly panel for trunks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Enable display of trunks."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Iacb83f22f81e09457953622e61065f0bb2c27407"},{"line_number":12,"context_line":"Partially-Implements: blueprint neutron-trunk-ui"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3f044301_ca1794a3","line":9,"in_reply_to":"3f044301_35768d08","updated":"2017-05-06 05:40:34.000000000","message":"Done","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"4059f610652044094e36d2a699cf4673ccb1e9d7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"New readonly panel for trunks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Enable display of trunks."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Iacb83f22f81e09457953622e61065f0bb2c27407"},{"line_number":12,"context_line":"Partially-Implements: blueprint neutron-trunk-ui"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3f044301_75dad5e9","line":10,"updated":"2017-05-04 13:01:41.000000000","message":"Let\u0027s add Akihiro as a co-author:\n\nCo-Authored-By: Akihiro Motoki \u003camotoki@gmail.com\u003e","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b2110f896c6e1eeb5ea01c65f7ceae098bf17799","unresolved":false,"context_lines":[{"line_number":7,"context_line":"New readonly panel for trunks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Enable display of trunks."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Iacb83f22f81e09457953622e61065f0bb2c27407"},{"line_number":12,"context_line":"Partially-Implements: blueprint neutron-trunk-ui"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3f044301_aa0e888a","line":10,"in_reply_to":"3f044301_75dad5e9","updated":"2017-05-06 05:40:34.000000000","message":"Done","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bf9d69ce2bbf347171accf4e5f40f17a7f48beaf","unresolved":false,"context_lines":[{"line_number":7,"context_line":"New readonly panel for trunks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Enable display of trunks."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Iacb83f22f81e09457953622e61065f0bb2c27407"},{"line_number":12,"context_line":"Partially-Implements: blueprint neutron-trunk-ui"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3f044301_4b73bce8","line":10,"in_reply_to":"3f044301_75dad5e9","updated":"2017-05-04 13:50:08.000000000","message":"I don\u0027t mind it. I am okay with either.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"}],"openstack_dashboard/api/neutron.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"ba0d38ff4fc5949a6be1bd0845b1128c0e5a3723","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"class Trunk(NeutronAPIDictWrapper):"},{"line_number":111,"context_line":"    \"\"\"Wrapper for neutron trunks\"\"\""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class SubnetPool(NeutronAPIDictWrapper):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_5e1b711a","line":111,"updated":"2017-03-24 13:27:13.000000000","message":"nit: missing period","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"class Trunk(NeutronAPIDictWrapper):"},{"line_number":111,"context_line":"    \"\"\"Wrapper for neutron trunks\"\"\""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class SubnetPool(NeutronAPIDictWrapper):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_675c2f7e","line":111,"in_reply_to":"ffe62b97_5e1b711a","updated":"2017-04-07 09:06:19.000000000","message":"Done","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"ba0d38ff4fc5949a6be1bd0845b1128c0e5a3723","unresolved":false,"context_lines":[{"line_number":633,"context_line":""},{"line_number":634,"context_line":"@profiler.trace"},{"line_number":635,"context_line":"def trunk_list(request, **params):"},{"line_number":636,"context_line":"    LOG.debug(\"trunk_list(): params\u003d%s\", params)"},{"line_number":637,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":638,"context_line":"    LOG.debug(\u0027XXXX: trunks \u003d %s\u0027, trunks)"},{"line_number":639,"context_line":"    for t in trunks:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_de34214d","line":636,"updated":"2017-03-24 13:27:13.000000000","message":"Just a hint. There\u0027s a decorator for this in oslo_log:\n\n from oslo_log import helpers as log_helpers\n\n @log_helpers.log_method_call                                                \n def whatever_method(...):","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":633,"context_line":""},{"line_number":634,"context_line":"@profiler.trace"},{"line_number":635,"context_line":"def trunk_list(request, **params):"},{"line_number":636,"context_line":"    LOG.debug(\"trunk_list(): params\u003d%s\", params)"},{"line_number":637,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":638,"context_line":"    LOG.debug(\u0027XXXX: trunks \u003d %s\u0027, trunks)"},{"line_number":639,"context_line":"    for t in trunks:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_67d1cfcd","line":636,"in_reply_to":"ffe62b97_de34214d","updated":"2017-04-07 09:06:19.000000000","message":"that is not used in horizon as I see, so that would affect requirements as well if I understand well.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"ba0d38ff4fc5949a6be1bd0845b1128c0e5a3723","unresolved":false,"context_lines":[{"line_number":637,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":638,"context_line":"    LOG.debug(\u0027XXXX: trunks \u003d %s\u0027, trunks)"},{"line_number":639,"context_line":"    for t in trunks:"},{"line_number":640,"context_line":"        subport_count \u003d len(t[\u0027sub_ports\u0027])"},{"line_number":641,"context_line":"        t[\u0027subport_cnt\u0027] \u003d subport_count"},{"line_number":642,"context_line":"    return [Trunk(t) for t in trunks]"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_e1086429","line":641,"range":{"start_line":640,"start_character":0,"end_line":641,"end_character":40},"updated":"2017-03-24 13:27:13.000000000","message":"Maybe we could be a bit more defensive and treat the case when there\u0027s no \u0027sub_ports\u0027 field.\n\nnit: This could be one line.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":637,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":638,"context_line":"    LOG.debug(\u0027XXXX: trunks \u003d %s\u0027, trunks)"},{"line_number":639,"context_line":"    for t in trunks:"},{"line_number":640,"context_line":"        subport_count \u003d len(t[\u0027sub_ports\u0027])"},{"line_number":641,"context_line":"        t[\u0027subport_cnt\u0027] \u003d subport_count"},{"line_number":642,"context_line":"    return [Trunk(t) for t in trunks]"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_a7f0f768","line":641,"range":{"start_line":640,"start_character":0,"end_line":641,"end_character":40},"in_reply_to":"ffe62b97_e1086429","updated":"2017-04-07 09:06:19.000000000","message":"I moved this part to __init__ of the Trunk","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cfd70e4039298764a92de9cd8c787f253259a44b","unresolved":false,"context_lines":[{"line_number":631,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":632,"context_line":"    for t in trunks:"},{"line_number":633,"context_line":"        subport_count \u003d len(t[\u0027sub_ports\u0027])"},{"line_number":634,"context_line":"        t[\u0027subport_cnt\u0027] \u003d subport_count"},{"line_number":635,"context_line":"    return [Trunk(t) for t in trunks]"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_f6096631","line":634,"range":{"start_line":634,"start_character":19,"end_line":634,"end_character":22},"updated":"2017-03-30 21:16:04.000000000","message":"How about using full spelling? subport_count","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cfd70e4039298764a92de9cd8c787f253259a44b","unresolved":false,"context_lines":[{"line_number":630,"context_line":"    LOG.debug(\"trunk_list(): params\u003d%s\", params)"},{"line_number":631,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":632,"context_line":"    for t in trunks:"},{"line_number":633,"context_line":"        subport_count \u003d len(t[\u0027sub_ports\u0027])"},{"line_number":634,"context_line":"        t[\u0027subport_cnt\u0027] \u003d subport_count"},{"line_number":635,"context_line":"    return [Trunk(t) for t in trunks]"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_ea1bb670","line":634,"range":{"start_line":633,"start_character":8,"end_line":634,"end_character":40},"updated":"2017-03-30 21:16:04.000000000","message":"I think this can be moved to Trunk.__init__.\n\n class Trunk(...):\n    def __init__(self, apidict):\n         apidict[\u0027subport_count\u0027] \u003d len(apidict[\u0027sub_ports\u0027])\n\nso you don\u0027t need special logic here.","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0d29e383849860d7d36db80f1585c8530f3db8f5","unresolved":false,"context_lines":[{"line_number":630,"context_line":"    LOG.debug(\"trunk_list(): params\u003d%s\", params)"},{"line_number":631,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":632,"context_line":"    for t in trunks:"},{"line_number":633,"context_line":"        subport_count \u003d len(t[\u0027sub_ports\u0027])"},{"line_number":634,"context_line":"        t[\u0027subport_cnt\u0027] \u003d subport_count"},{"line_number":635,"context_line":"    return [Trunk(t) for t in trunks]"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bff0334d_ea35a6db","line":634,"range":{"start_line":633,"start_character":8,"end_line":634,"end_character":40},"in_reply_to":"dfeb2761_ea1bb670","updated":"2017-04-07 09:14:32.000000000","message":"Done","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0d29e383849860d7d36db80f1585c8530f3db8f5","unresolved":false,"context_lines":[{"line_number":631,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":632,"context_line":"    for t in trunks:"},{"line_number":633,"context_line":"        subport_count \u003d len(t[\u0027sub_ports\u0027])"},{"line_number":634,"context_line":"        t[\u0027subport_cnt\u0027] \u003d subport_count"},{"line_number":635,"context_line":"    return [Trunk(t) for t in trunks]"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bff0334d_aa4d5e73","line":634,"range":{"start_line":634,"start_character":19,"end_line":634,"end_character":22},"in_reply_to":"dfeb2761_f6096631","updated":"2017-04-07 09:14:32.000000000","message":"Done","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"828e292652d9ba9a630a26b8a50f84d332ea2e70","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    \"\"\"Wrapper for neutron trunks.\"\"\""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, apidict):"},{"line_number":114,"context_line":"        apidict[\u0027subport_count\u0027] \u003d len(apidict[\u0027sub_ports\u0027])"},{"line_number":115,"context_line":"        super(Trunk, self).__init__(apidict)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_777ee0af","line":114,"updated":"2017-04-10 13:57:35.000000000","message":"This way we store redundant information. If somebody modifies either \u0027sub_ports\u0027 or \u0027subport_count\u0027 they must keep the other in sync. That\u0027s bound to fail. A computed (read-only) property can nicely solve this problem:\n\n @property\n def subport_count(self):\n     return len(self._apidict.get(\u0027sub_ports\u0027, []))","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"69bb7432f81043bde7d2728f5c768602bb0a503d","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    \"\"\"Wrapper for neutron trunks.\"\"\""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, apidict):"},{"line_number":114,"context_line":"        apidict[\u0027subport_count\u0027] \u003d len(apidict[\u0027sub_ports\u0027])"},{"line_number":115,"context_line":"        super(Trunk, self).__init__(apidict)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_44da0d4c","line":114,"in_reply_to":"7ffa3b31_b73a21c9","updated":"2017-04-27 13:27:14.000000000","message":"Added readonly subport_count property, and use that to fill the subport_count","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5257ef774cc6091368906207cf5bf1db12ad3396","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    \"\"\"Wrapper for neutron trunks.\"\"\""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, apidict):"},{"line_number":114,"context_line":"        apidict[\u0027subport_count\u0027] \u003d len(apidict[\u0027sub_ports\u0027])"},{"line_number":115,"context_line":"        super(Trunk, self).__init__(apidict)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_b73a21c9","line":114,"in_reply_to":"bff0334d_777ee0af","updated":"2017-04-20 09:31:14.000000000","message":"+1","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"828e292652d9ba9a630a26b8a50f84d332ea2e70","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, apidict):"},{"line_number":114,"context_line":"        apidict[\u0027subport_count\u0027] \u003d len(apidict[\u0027sub_ports\u0027])"},{"line_number":115,"context_line":"        super(Trunk, self).__init__(apidict)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class SubnetPool(NeutronAPIDictWrapper):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_978724b6","line":115,"range":{"start_line":115,"start_character":8,"end_line":115,"end_character":13},"updated":"2017-04-10 13:57:35.000000000","message":"Please always call super() first. Otherwise our ancestors may encounter (and need to treat) data and/or logic specific to this class. But they should not know about that. Calling super() first ensures they don\u0027t need to know.","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"69bb7432f81043bde7d2728f5c768602bb0a503d","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, apidict):"},{"line_number":114,"context_line":"        apidict[\u0027subport_count\u0027] \u003d len(apidict[\u0027sub_ports\u0027])"},{"line_number":115,"context_line":"        super(Trunk, self).__init__(apidict)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class SubnetPool(NeutronAPIDictWrapper):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_a4ee71ea","line":115,"range":{"start_line":115,"start_character":8,"end_line":115,"end_character":13},"in_reply_to":"7ffa3b31_d73dadc4","updated":"2017-04-27 13:27:14.000000000","message":"I removed the __init__ as there is no need to that.","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5257ef774cc6091368906207cf5bf1db12ad3396","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, apidict):"},{"line_number":114,"context_line":"        apidict[\u0027subport_count\u0027] \u003d len(apidict[\u0027sub_ports\u0027])"},{"line_number":115,"context_line":"        super(Trunk, self).__init__(apidict)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class SubnetPool(NeutronAPIDictWrapper):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_d73dadc4","line":115,"range":{"start_line":115,"start_character":8,"end_line":115,"end_character":13},"in_reply_to":"bff0334d_978724b6","updated":"2017-04-20 09:31:14.000000000","message":"It depends on a situation. If we really want to do something, it is no problem to place such before calling super(), but in this case I agree with your comment at L.114 and there is no need to override __init__().","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6e7748983048ea7789c97ae5b434d5d40448eadd","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from horizon import exceptions"},{"line_number":35,"context_line":"from horizon import messages"},{"line_number":36,"context_line":"from horizon.utils.memoized import memoized  # noqa"},{"line_number":37,"context_line":"from openstack_dashboard.api import base"},{"line_number":38,"context_line":"from openstack_dashboard.api import network_base"},{"line_number":39,"context_line":"from openstack_dashboard.api import nova"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ffa3b31_1c445c73","line":36,"range":{"start_line":36,"start_character":43,"end_line":36,"end_character":51},"updated":"2017-04-20 13:37:02.000000000","message":"noqa is no longer needed.","commit_id":"46f40fbe3f8767de9d458296399058b1d31efbae"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6e7748983048ea7789c97ae5b434d5d40448eadd","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    \"\"\"Wrapper for neutron trunks.\"\"\""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, apidict):"},{"line_number":114,"context_line":"        apidict[\u0027subport_count\u0027] \u003d len(apidict[\u0027sub_ports\u0027])"},{"line_number":115,"context_line":"        super(Trunk, self).__init__(apidict)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7ffa3b31_fc3d30dd","line":114,"range":{"start_line":114,"start_character":8,"end_line":114,"end_character":60},"updated":"2017-04-20 13:37:02.000000000","message":"I agree with Bence\u0027s comment in patch set 5. Please check it.","commit_id":"46f40fbe3f8767de9d458296399058b1d31efbae"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bf9d69ce2bbf347171accf4e5f40f17a7f48beaf","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def to_dict(self):"},{"line_number":118,"context_line":"        my_dict \u003d super(Trunk, self).to_dict()"},{"line_number":119,"context_line":"        my_dict.update({\u0027name_or_id\u0027: self.name_or_id})"},{"line_number":120,"context_line":"        my_dict.update({\u0027subport_count\u0027: self.subport_count})"},{"line_number":121,"context_line":"        return my_dict"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5ff73747_9090c650","line":120,"range":{"start_line":119,"start_character":8,"end_line":120,"end_character":61},"updated":"2017-05-04 13:50:08.000000000","message":"Consider using:\n\n  my_dict[\u0027name_or_id\u0027] \u003d self.name_or_id\n  my_dict[\u0027subport_count\u0027] \u003d self.subport_count","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b2110f896c6e1eeb5ea01c65f7ceae098bf17799","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def to_dict(self):"},{"line_number":118,"context_line":"        my_dict \u003d super(Trunk, self).to_dict()"},{"line_number":119,"context_line":"        my_dict.update({\u0027name_or_id\u0027: self.name_or_id})"},{"line_number":120,"context_line":"        my_dict.update({\u0027subport_count\u0027: self.subport_count})"},{"line_number":121,"context_line":"        return my_dict"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_4a238406","line":120,"range":{"start_line":119,"start_character":8,"end_line":120,"end_character":61},"in_reply_to":"5ff73747_9090c650","updated":"2017-05-06 05:40:34.000000000","message":"Done","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bf9d69ce2bbf347171accf4e5f40f17a7f48beaf","unresolved":false,"context_lines":[{"line_number":639,"context_line":"def trunk_list(request, **params):"},{"line_number":640,"context_line":"    LOG.debug(\"trunk_list(): params\u003d%s\", params)"},{"line_number":641,"context_line":"    # List trunks only for the given tenant."},{"line_number":642,"context_line":"    # TODO(elajkat): With this now the filtering is good enough for the"},{"line_number":643,"context_line":"    # project dashboard. When we introduce the trunk panel to the"},{"line_number":644,"context_line":"    # admin dashboard as well we have to change the filtering for the"},{"line_number":645,"context_line":"    # admin tenant, as admin can see all the trunks of other tenants"}],"source_content_type":"text/x-python","patch_set":9,"id":"5ff73747_70abfa74","line":642,"range":{"start_line":642,"start_character":6,"end_line":642,"end_character":19},"updated":"2017-05-04 13:50:08.000000000","message":"Just a comment: all_projects\u003dTrue/False might help you when you support admin dashboard.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b2110f896c6e1eeb5ea01c65f7ceae098bf17799","unresolved":false,"context_lines":[{"line_number":639,"context_line":"def trunk_list(request, **params):"},{"line_number":640,"context_line":"    LOG.debug(\"trunk_list(): params\u003d%s\", params)"},{"line_number":641,"context_line":"    # List trunks only for the given tenant."},{"line_number":642,"context_line":"    # TODO(elajkat): With this now the filtering is good enough for the"},{"line_number":643,"context_line":"    # project dashboard. When we introduce the trunk panel to the"},{"line_number":644,"context_line":"    # admin dashboard as well we have to change the filtering for the"},{"line_number":645,"context_line":"    # admin tenant, as admin can see all the trunks of other tenants"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_ca7c34ed","line":642,"range":{"start_line":642,"start_character":6,"end_line":642,"end_character":19},"in_reply_to":"5ff73747_70abfa74","updated":"2017-05-06 05:40:34.000000000","message":"I realized that the same information can be pushed from angular side, see trunks.service.js, getTrunksPromise","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"4059f610652044094e36d2a699cf4673ccb1e9d7","unresolved":false,"context_lines":[{"line_number":644,"context_line":"    # admin dashboard as well we have to change the filtering for the"},{"line_number":645,"context_line":"    # admin tenant, as admin can see all the trunks of other tenants"},{"line_number":646,"context_line":"    # from the admin dashboard."},{"line_number":647,"context_line":"    params[\u0027project_id\u0027] \u003d request.user.project_id"},{"line_number":648,"context_line":"    print(request.user.project_id)"},{"line_number":649,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":650,"context_line":"    return [Trunk(t) for t in trunks]"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_55c8f953","line":647,"updated":"2017-05-04 13:01:41.000000000","message":"This filtering should not be here. I think we agree we need the following behavior:\n\n* in the project dashboard any user (including admin) should see the object belonging to the current project (\u003dtenant)\n* in the admin dashboard (to which only the admin user has access) the admin user should see objects of all tenants\n\nBut I think this is not right place to do this. For example router listing behaves like above, but \u0027def router_list\u0027 does not filter by project. But if I simply remove the filtering by project here then in the project dashboard as admin I see all tenants\u0027 objects. That\u0027s not what we want.\n\nSo I\u0027m still looking to understand.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bf9d69ce2bbf347171accf4e5f40f17a7f48beaf","unresolved":false,"context_lines":[{"line_number":644,"context_line":"    # admin dashboard as well we have to change the filtering for the"},{"line_number":645,"context_line":"    # admin tenant, as admin can see all the trunks of other tenants"},{"line_number":646,"context_line":"    # from the admin dashboard."},{"line_number":647,"context_line":"    params[\u0027project_id\u0027] \u003d request.user.project_id"},{"line_number":648,"context_line":"    print(request.user.project_id)"},{"line_number":649,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":650,"context_line":"    return [Trunk(t) for t in trunks]"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_8e13120e","line":647,"in_reply_to":"3f044301_55c8f953","updated":"2017-05-04 13:50:08.000000000","message":"This is the point to be discussed. Horizon has two types of dashboard implementations: django and angularJS. In the django case, tenant_id(project_id) filter is specified in the django view in most cases. In the angularJS case, it is a discussion point. One option is to apply filtering in api/rest/neutron.py and the other option is to apply here.\n\nIn any case, I think filtering resources is a responsibility of the server side logic and the client side logic should focus on presentation.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b2110f896c6e1eeb5ea01c65f7ceae098bf17799","unresolved":false,"context_lines":[{"line_number":644,"context_line":"    # admin dashboard as well we have to change the filtering for the"},{"line_number":645,"context_line":"    # admin tenant, as admin can see all the trunks of other tenants"},{"line_number":646,"context_line":"    # from the admin dashboard."},{"line_number":647,"context_line":"    params[\u0027project_id\u0027] \u003d request.user.project_id"},{"line_number":648,"context_line":"    print(request.user.project_id)"},{"line_number":649,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":650,"context_line":"    return [Trunk(t) for t in trunks]"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_6a6d2031","line":647,"in_reply_to":"3f044301_8e13120e","updated":"2017-05-06 05:40:34.000000000","message":"The project_id \"injection\" is now in angular side, that is still a question what to do if the admin dashboard will be in place, but let\u0027s solve that at that time.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"4059f610652044094e36d2a699cf4673ccb1e9d7","unresolved":false,"context_lines":[{"line_number":645,"context_line":"    # admin tenant, as admin can see all the trunks of other tenants"},{"line_number":646,"context_line":"    # from the admin dashboard."},{"line_number":647,"context_line":"    params[\u0027project_id\u0027] \u003d request.user.project_id"},{"line_number":648,"context_line":"    print(request.user.project_id)"},{"line_number":649,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":650,"context_line":"    return [Trunk(t) for t in trunks]"},{"line_number":651,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_15c27134","line":648,"updated":"2017-05-04 13:01:41.000000000","message":"Please do not leave debug prints around.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b2110f896c6e1eeb5ea01c65f7ceae098bf17799","unresolved":false,"context_lines":[{"line_number":645,"context_line":"    # admin tenant, as admin can see all the trunks of other tenants"},{"line_number":646,"context_line":"    # from the admin dashboard."},{"line_number":647,"context_line":"    params[\u0027project_id\u0027] \u003d request.user.project_id"},{"line_number":648,"context_line":"    print(request.user.project_id)"},{"line_number":649,"context_line":"    trunks \u003d neutronclient(request).list_trunks(**params).get(\u0027trunks\u0027)"},{"line_number":650,"context_line":"    return [Trunk(t) for t in trunks]"},{"line_number":651,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_4a682420","line":648,"in_reply_to":"3f044301_15c27134","updated":"2017-05-06 05:40:34.000000000","message":"Done","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"}],"openstack_dashboard/api/rest/neutron.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"ba0d38ff4fc5949a6be1bd0845b1128c0e5a3723","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@urls.register"},{"line_number":143,"context_line":"class Trunks(generic.View):"},{"line_number":144,"context_line":"    \"\"\"API for neutron Trunks"},{"line_number":145,"context_line":"    https://developer.openstack.org/api-ref/networking/v2/index.html"},{"line_number":146,"context_line":"    \"\"\""},{"line_number":147,"context_line":"    url_regex \u003d r\u0027neutron/trunks/$\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_813d18bd","line":144,"updated":"2017-03-24 13:27:13.000000000","message":"nit: missing newline","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@urls.register"},{"line_number":143,"context_line":"class Trunks(generic.View):"},{"line_number":144,"context_line":"    \"\"\"API for neutron Trunks"},{"line_number":145,"context_line":"    https://developer.openstack.org/api-ref/networking/v2/index.html"},{"line_number":146,"context_line":"    \"\"\""},{"line_number":147,"context_line":"    url_regex \u003d r\u0027neutron/trunks/$\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_2704e749","line":144,"in_reply_to":"ffe62b97_813d18bd","updated":"2017-04-07 09:06:19.000000000","message":"Done","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6e7748983048ea7789c97ae5b434d5d40448eadd","unresolved":false,"context_lines":[{"line_number":140,"context_line":"class Trunks(generic.View):"},{"line_number":141,"context_line":"    \"\"\"API for neutron Trunks"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    https://developer.openstack.org/api-ref/networking/v2/index.html"},{"line_number":144,"context_line":"    \"\"\""},{"line_number":145,"context_line":"    url_regex \u003d r\u0027neutron/trunks/$\u0027"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7ffa3b31_dc26f4ce","line":143,"range":{"start_line":143,"start_character":4,"end_line":143,"end_character":68},"updated":"2017-04-20 13:37:02.000000000","message":"Do we need URL for the API reference?","commit_id":"46f40fbe3f8767de9d458296399058b1d31efbae"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"634d3d38d37f67681654b44526fd2c5520e4ebe9","unresolved":false,"context_lines":[{"line_number":140,"context_line":"class Trunks(generic.View):"},{"line_number":141,"context_line":"    \"\"\"API for neutron Trunks"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    https://developer.openstack.org/api-ref/networking/v2/index.html"},{"line_number":144,"context_line":"    \"\"\""},{"line_number":145,"context_line":"    url_regex \u003d r\u0027neutron/trunks/$\u0027"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_441b2dcf","line":143,"range":{"start_line":143,"start_character":4,"end_line":143,"end_character":68},"in_reply_to":"7ffa3b31_dc26f4ce","updated":"2017-04-27 13:27:08.000000000","message":"I removed it as it is not clear if needed or not.","commit_id":"46f40fbe3f8767de9d458296399058b1d31efbae"}],"openstack_dashboard/dashboards/project/trunks/panel.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"ba0d38ff4fc5949a6be1bd0845b1128c0e5a3723","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ffe62b97_01510837","updated":"2017-03-24 13:27:13.000000000","message":"Do we need this file?","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"0e7c53e91c69a60ed93f6829830bacd2e5b7bb9e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ffe62b97_476a8080","in_reply_to":"ffe62b97_01510837","updated":"2017-03-24 13:59:57.000000000","message":"To answer my own question: Yes, we do need this. Just leftover .pyc files tricked me into believing otherwise.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"9b65b8f7eb4dd7d6d33395d921c16b049f3628bc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    slug \u003d \"trunks\""},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.network\u0027,)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def allowed(self, context):"},{"line_number":32,"context_line":"        request \u003d context[\u0027request\u0027]"},{"line_number":33,"context_line":"        if not request.user.has_perms(self.permissions):"},{"line_number":34,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_322b3cec","line":31,"updated":"2017-03-24 15:05:33.000000000","message":"The body of this method could have a better structure, eg.:\n\n try:\n     return (\n         super().allowed()\n         and has_perms()\n         and is_service_enabled())\n except (NeutronClientException, MaybeSomeOtherErrorToo):\n     LOG.error()\n     return False","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    slug \u003d \"trunks\""},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.network\u0027,)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def allowed(self, context):"},{"line_number":32,"context_line":"        request \u003d context[\u0027request\u0027]"},{"line_number":33,"context_line":"        if not request.user.has_perms(self.permissions):"},{"line_number":34,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_a79597e6","line":31,"in_reply_to":"ffe62b97_322b3cec","updated":"2017-04-07 09:06:19.000000000","message":"Done","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"828e292652d9ba9a630a26b8a50f84d332ea2e70","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            return ("},{"line_number":35,"context_line":"                super(Trunks, self).allowed(context)"},{"line_number":36,"context_line":"                and request.user.has_perms(self.permissions)"},{"line_number":37,"context_line":"                and neutron.is_service_enabled(request,"},{"line_number":38,"context_line":"                                               config_name\u003d\u0027enable_trunk\u0027,"},{"line_number":39,"context_line":"                                               ext_name\u003d\u0027trunk\u0027)"},{"line_number":40,"context_line":"            )"},{"line_number":41,"context_line":"        except Exception:"},{"line_number":42,"context_line":"            LOG.error(\"Call to list enabled services failed. This is likely \""}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_89a70ca8","line":39,"range":{"start_line":37,"start_character":16,"end_line":39,"end_character":64},"updated":"2017-04-10 13:57:35.000000000","message":"This is inconsistent. If we deleted the example config line from local_settings.py.example then we should not introduce config option \u0027enable_trunk\u0027 here either. Try neutron.is_extension_supported() instead.","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"69bb7432f81043bde7d2728f5c768602bb0a503d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            return ("},{"line_number":35,"context_line":"                super(Trunks, self).allowed(context)"},{"line_number":36,"context_line":"                and request.user.has_perms(self.permissions)"},{"line_number":37,"context_line":"                and neutron.is_service_enabled(request,"},{"line_number":38,"context_line":"                                               config_name\u003d\u0027enable_trunk\u0027,"},{"line_number":39,"context_line":"                                               ext_name\u003d\u0027trunk\u0027)"},{"line_number":40,"context_line":"            )"},{"line_number":41,"context_line":"        except Exception:"},{"line_number":42,"context_line":"            LOG.error(\"Call to list enabled services failed. This is likely \""}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_8499357a","line":39,"range":{"start_line":37,"start_character":16,"end_line":39,"end_character":64},"in_reply_to":"7ffa3b31_97b6053e","updated":"2017-04-27 13:27:14.000000000","message":"Sorry misunderstood the thing.\nBut this way with the change in tests.settings the unit tests are failing due to the fact that the tests try to fetch the extension list from neutron.\nSee details for that file.","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3c680634c9d668b3eb0f621d099de551c5a6cf28","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            return ("},{"line_number":35,"context_line":"                super(Trunks, self).allowed(context)"},{"line_number":36,"context_line":"                and request.user.has_perms(self.permissions)"},{"line_number":37,"context_line":"                and neutron.is_service_enabled(request,"},{"line_number":38,"context_line":"                                               config_name\u003d\u0027enable_trunk\u0027,"},{"line_number":39,"context_line":"                                               ext_name\u003d\u0027trunk\u0027)"},{"line_number":40,"context_line":"            )"},{"line_number":41,"context_line":"        except Exception:"},{"line_number":42,"context_line":"            LOG.error(\"Call to list enabled services failed. This is likely \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_97b6053e","line":39,"range":{"start_line":37,"start_character":16,"end_line":39,"end_character":64},"in_reply_to":"7ffa3b31_dc0f1435","updated":"2017-04-20 09:33:15.000000000","message":"I made the same comment and the author replied \u0027Done\u0027 but ....","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5257ef774cc6091368906207cf5bf1db12ad3396","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            return ("},{"line_number":35,"context_line":"                super(Trunks, self).allowed(context)"},{"line_number":36,"context_line":"                and request.user.has_perms(self.permissions)"},{"line_number":37,"context_line":"                and neutron.is_service_enabled(request,"},{"line_number":38,"context_line":"                                               config_name\u003d\u0027enable_trunk\u0027,"},{"line_number":39,"context_line":"                                               ext_name\u003d\u0027trunk\u0027)"},{"line_number":40,"context_line":"            )"},{"line_number":41,"context_line":"        except Exception:"},{"line_number":42,"context_line":"            LOG.error(\"Call to list enabled services failed. This is likely \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_dc0f1435","line":39,"range":{"start_line":37,"start_character":16,"end_line":39,"end_character":64},"in_reply_to":"bff0334d_89a70ca8","updated":"2017-04-20 09:31:14.000000000","message":"+1","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"69bb7432f81043bde7d2728f5c768602bb0a503d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            return ("},{"line_number":35,"context_line":"                super(Trunks, self).allowed(context)"},{"line_number":36,"context_line":"                and request.user.has_perms(self.permissions)"},{"line_number":37,"context_line":"                and neutron.is_service_enabled(request,"},{"line_number":38,"context_line":"                                               config_name\u003d\u0027enable_trunk\u0027,"},{"line_number":39,"context_line":"                                               ext_name\u003d\u0027trunk\u0027)"},{"line_number":40,"context_line":"            )"},{"line_number":41,"context_line":"        except Exception:"},{"line_number":42,"context_line":"            LOG.error(\"Call to list enabled services failed. This is likely \""}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_24b4a1f1","line":39,"range":{"start_line":37,"start_character":16,"end_line":39,"end_character":64},"in_reply_to":"bff0334d_89a70ca8","updated":"2017-04-27 13:27:14.000000000","message":"Done","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"}],"openstack_dashboard/dashboards/project/trunks/tables.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"ba0d38ff4fc5949a6be1bd0845b1128c0e5a3723","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ffe62b97_c11200b2","updated":"2017-03-24 13:27:13.000000000","message":"This file is only referenced from the view. If the view is not needed, neither is this.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"069754d229686b3cc4603817ae95a0dbd4d2fc0b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ffe62b97_5847014d","in_reply_to":"ffe62b97_c11200b2","updated":"2017-03-24 14:40:01.000000000","message":"Done","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"}],"openstack_dashboard/dashboards/project/trunks/tests.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"ba0d38ff4fc5949a6be1bd0845b1128c0e5a3723","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ffe62b97_24b89ac6","updated":"2017-03-24 13:27:13.000000000","message":"If we only have a urls.py, I don\u0027t know if there\u0027s anything to test from here.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"069754d229686b3cc4603817ae95a0dbd4d2fc0b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ffe62b97_38767da6","in_reply_to":"ffe62b97_24b89ac6","updated":"2017-03-24 14:40:01.000000000","message":"Done","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"}],"openstack_dashboard/dashboards/project/trunks/views.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"ba0d38ff4fc5949a6be1bd0845b1128c0e5a3723","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ffe62b97_01e228d6","updated":"2017-03-24 13:27:13.000000000","message":"Do we need this file for angularized panel? I don\u0027t see it used anywhere. There\u0027s no error if I delete it.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"069754d229686b3cc4603817ae95a0dbd4d2fc0b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ffe62b97_d874319c","in_reply_to":"ffe62b97_01e228d6","updated":"2017-03-24 14:40:01.000000000","message":"Done","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"}],"openstack_dashboard/enabled/_1500_project_trunks_panel.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"4059f610652044094e36d2a699cf4673ccb1e9d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3f044301_552119b4","updated":"2017-05-04 13:01:41.000000000","message":"Once I read this in https://docs.openstack.org/developer/horizon/topics/settings.html:\n\n\"For upstream development since Newton, please use ANGULAR_FEATURES setting to toggle Angular panel features, instead of defining an enabled file for the Angular panel. Then use settings.ANGULAR_FEATURES[\u003cpanel_name\u003e] in your urls.py. This enforces showing one service panel in the dashboard at a time.\"\n\nTherefore I think we should not add an enabled file.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bf9d69ce2bbf347171accf4e5f40f17a7f48beaf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3f044301_2ef07ec9","in_reply_to":"3f044301_552119b4","updated":"2017-05-04 13:50:08.000000000","message":"\"enabled\" file is the right thing in this case.\n\nIt does not apply to new panels. ANGULAR_FEATURES is used to specify which implementation is used (django (legacy) vs angular (NG)).","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"}],"openstack_dashboard/local/local_settings.py.example":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"ba0d38ff4fc5949a6be1bd0845b1128c0e5a3723","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    \u0027enable_firewall\u0027: True,"},{"line_number":290,"context_line":"    \u0027enable_vpn\u0027: True,"},{"line_number":291,"context_line":"    \u0027enable_fip_topology_check\u0027: True,"},{"line_number":292,"context_line":"    \u0027enable_trunk\u0027: True,"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    # Default dns servers you would like to use when a subnet is"},{"line_number":295,"context_line":"    # created.  This is only a default, users can still choose a different"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"ffe62b97_fe512510","line":292,"updated":"2017-03-24 13:27:13.000000000","message":"Is this needed? I didn\u0027t add this to my local_settings.py and the panel was still on.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"0e7c53e91c69a60ed93f6829830bacd2e5b7bb9e","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    \u0027enable_firewall\u0027: True,"},{"line_number":290,"context_line":"    \u0027enable_vpn\u0027: True,"},{"line_number":291,"context_line":"    \u0027enable_fip_topology_check\u0027: True,"},{"line_number":292,"context_line":"    \u0027enable_trunk\u0027: True,"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    # Default dns servers you would like to use when a subnet is"},{"line_number":295,"context_line":"    # created.  This is only a default, users can still choose a different"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"ffe62b97_67f344a0","line":292,"in_reply_to":"ffe62b97_fe512510","updated":"2017-03-24 13:59:57.000000000","message":"To answer my own question: This can be used to enable/disable the trunk panel. But keep in mind that it defaults to True, therefore we usually don\u0027t need to edit the config.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cfd70e4039298764a92de9cd8c787f253259a44b","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    \u0027enable_firewall\u0027: True,"},{"line_number":290,"context_line":"    \u0027enable_vpn\u0027: True,"},{"line_number":291,"context_line":"    \u0027enable_fip_topology_check\u0027: True,"},{"line_number":292,"context_line":"    \u0027enable_trunk\u0027: True,"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    # Default dns servers you would like to use when a subnet is"},{"line_number":295,"context_line":"    # created.  This is only a default, users can still choose a different"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"dfeb2761_0a3dbaba","line":292,"updated":"2017-03-30 21:16:04.000000000","message":"Do we really need this? Isn\u0027t it enough to check \u0027trunk\u0027 in extension-list?","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0d29e383849860d7d36db80f1585c8530f3db8f5","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    \u0027enable_firewall\u0027: True,"},{"line_number":290,"context_line":"    \u0027enable_vpn\u0027: True,"},{"line_number":291,"context_line":"    \u0027enable_fip_topology_check\u0027: True,"},{"line_number":292,"context_line":"    \u0027enable_trunk\u0027: True,"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    # Default dns servers you would like to use when a subnet is"},{"line_number":295,"context_line":"    # created.  This is only a default, users can still choose a different"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"bff0334d_8a797a94","line":292,"in_reply_to":"dfeb2761_0a3dbaba","updated":"2017-04-07 09:14:32.000000000","message":"Done","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"}],"openstack_dashboard/static/app/core/core.module.js":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"9b65b8f7eb4dd7d6d33395d921c16b049f3628bc","unresolved":false,"context_lines":[{"line_number":36,"context_line":"      \u0027horizon.app.core.cloud-services\u0027,"},{"line_number":37,"context_line":"      \u0027horizon.app.core.flavors\u0027,"},{"line_number":38,"context_line":"      \u0027horizon.app.core.images\u0027,"},{"line_number":39,"context_line":"      \u0027horizon.app.core.trunks\u0027,"},{"line_number":40,"context_line":"      \u0027horizon.app.core.metadata\u0027,"},{"line_number":41,"context_line":"      \u0027horizon.app.core.openstack-service-api\u0027,"},{"line_number":42,"context_line":"      \u0027horizon.app.core.workflow\u0027,"}],"source_content_type":"text/javascript","patch_set":2,"id":"ffe62b97_5845c1b2","line":39,"updated":"2017-03-24 15:05:33.000000000","message":"This should move down, to be in alphabetic order.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":36,"context_line":"      \u0027horizon.app.core.cloud-services\u0027,"},{"line_number":37,"context_line":"      \u0027horizon.app.core.flavors\u0027,"},{"line_number":38,"context_line":"      \u0027horizon.app.core.images\u0027,"},{"line_number":39,"context_line":"      \u0027horizon.app.core.trunks\u0027,"},{"line_number":40,"context_line":"      \u0027horizon.app.core.metadata\u0027,"},{"line_number":41,"context_line":"      \u0027horizon.app.core.openstack-service-api\u0027,"},{"line_number":42,"context_line":"      \u0027horizon.app.core.workflow\u0027,"}],"source_content_type":"text/javascript","patch_set":2,"id":"bff0334d_e7927ff6","line":39,"in_reply_to":"ffe62b97_5845c1b2","updated":"2017-04-07 09:06:19.000000000","message":"Done","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"}],"openstack_dashboard/static/app/core/openstack-service-api/neutron.service.js":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"9b65b8f7eb4dd7d6d33395d921c16b049f3628bc","unresolved":false,"context_lines":[{"line_number":356,"context_line":"              if (item.hasOwnProperty(\u0027sub_ports\u0027)) {"},{"line_number":357,"context_line":"                item.subport_count \u003d item.sub_ports.length;"},{"line_number":358,"context_line":"                item.subport_ids \u003d [ ];"},{"line_number":359,"context_line":"                angular.forEach(item.sub_ports, function(value) {"},{"line_number":360,"context_line":"                  angular.forEach(value, function(value, key) {"},{"line_number":361,"context_line":"                    if (key \u003d\u003d\u003d \u0027port_id\u0027) {"},{"line_number":362,"context_line":"                      item.subport_ids.push(value + \u0027 \u0027);"},{"line_number":363,"context_line":"                    }"},{"line_number":364,"context_line":"                  });"},{"line_number":365,"context_line":"                });"}],"source_content_type":"text/javascript","patch_set":2,"id":"ffe62b97_7892c5f8","line":362,"range":{"start_line":359,"start_character":0,"end_line":362,"end_character":56},"updated":"2017-03-24 15:05:33.000000000","message":"Here we lose the segmentation type and id of the subports. I think we shouldn\u0027t, because the subport id has limited use without those.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":356,"context_line":"              if (item.hasOwnProperty(\u0027sub_ports\u0027)) {"},{"line_number":357,"context_line":"                item.subport_count \u003d item.sub_ports.length;"},{"line_number":358,"context_line":"                item.subport_ids \u003d [ ];"},{"line_number":359,"context_line":"                angular.forEach(item.sub_ports, function(value) {"},{"line_number":360,"context_line":"                  angular.forEach(value, function(value, key) {"},{"line_number":361,"context_line":"                    if (key \u003d\u003d\u003d \u0027port_id\u0027) {"},{"line_number":362,"context_line":"                      item.subport_ids.push(value + \u0027 \u0027);"},{"line_number":363,"context_line":"                    }"},{"line_number":364,"context_line":"                  });"},{"line_number":365,"context_line":"                });"}],"source_content_type":"text/javascript","patch_set":2,"id":"bff0334d_277747d7","line":362,"range":{"start_line":359,"start_character":0,"end_line":362,"end_character":56},"in_reply_to":"ffe62b97_7892c5f8","updated":"2017-04-07 09:06:19.000000000","message":"I removed totally this part, and moved to the Trunk __init__ in api/neutron.py.\nI plan to make visible the subport details in a later patch.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6e7748983048ea7789c97ae5b434d5d40448eadd","unresolved":false,"context_lines":[{"line_number":350,"context_line":"          toastService.add(\u0027error\u0027, gettext(\u0027Unable to retrieve the trunks.\u0027));"},{"line_number":351,"context_line":"        });"},{"line_number":352,"context_line":"    }"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"  }"},{"line_number":355,"context_line":"}());"}],"source_content_type":"text/javascript","patch_set":6,"id":"7ffa3b31_01f748d5","line":353,"updated":"2017-04-20 13:37:02.000000000","message":"This blank line looks unnecessary.","commit_id":"46f40fbe3f8767de9d458296399058b1d31efbae"}],"openstack_dashboard/static/app/core/openstack-service-api/neutron.service.spec.js":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"c8706c93eff164f4e58f781694f8afad524b909e","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        \"testInput\": []"},{"line_number":136,"context_line":"      },"},{"line_number":137,"context_line":"      {"},{"line_number":138,"context_line":"        \"func\": \"getTrunks\","},{"line_number":139,"context_line":"        \"method\": \"get\","},{"line_number":140,"context_line":"        \"path\": \"/api/neutron/trunks/\","},{"line_number":141,"context_line":"        \"data\": {"}],"source_content_type":"text/javascript","patch_set":11,"id":"3f044301_02a8838a","line":138,"range":{"start_line":138,"start_character":17,"end_line":138,"end_character":26},"updated":"2017-05-10 14:22:06.000000000","message":"On the jasmine page it\u0027s a bit perplexing that these two tests look exactly the same. It\u0027s not an error though, just weird.","commit_id":"8685fa0f040683e41a22ea2e8b7de8682677b26d"}],"openstack_dashboard/static/app/core/trunks/summary.html":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"9b65b8f7eb4dd7d6d33395d921c16b049f3628bc","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    resource-type-name\u003d\"OS::Neutron::Trunk\""},{"line_number":3,"context_line":"    item\u003d\"item\""},{"line_number":4,"context_line":"    property-groups\u003d\"["},{"line_number":5,"context_line":"      [\u0027name\u0027, \u0027id\u0027],"},{"line_number":6,"context_line":"      [\u0027port_id\u0027],"},{"line_number":7,"context_line":"      [\u0027subport_ids\u0027],"},{"line_number":8,"context_line":"      [\u0027status\u0027, \u0027admin_state_up\u0027],"},{"line_number":9,"context_line":"      [\u0027created_at\u0027, \u0027updated_at\u0027],"},{"line_number":10,"context_line":"      [\u0027project_id\u0027, \u0027tenant_id\u0027]]\"\u003e"},{"line_number":11,"context_line":"  \u003c/hz-resource-property-list\u003e"},{"line_number":12,"context_line":"\u003cdiv class\u003d\"row\"\u003e"},{"line_number":13,"context_line":" \u003cdiv class\u003d\"col-md-4\"\u003e"}],"source_content_type":"text/html","patch_set":2,"id":"ffe62b97_98cd895f","line":10,"range":{"start_line":5,"start_character":0,"end_line":10,"end_character":36},"updated":"2017-03-24 15:05:33.000000000","message":"I played a bit with this and I liked the following:\n\n [\u0027name\u0027, \u0027admin_state_up\u0027, \u0027status\u0027, \u0027created_at\u0027, \u0027updated_at\u0027],\n [\u0027id\u0027, \u0027port_id\u0027, \u0027project_id\u0027, \u0027tenant_id\u0027],\n [\u0027subport_ids\u0027]\n\nBut note that \u0027id\u0027 is at a non-standard position. Plus there\u0027s some problem with \u0027admin_state_up\u0027. It does not show.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    resource-type-name\u003d\"OS::Neutron::Trunk\""},{"line_number":3,"context_line":"    item\u003d\"item\""},{"line_number":4,"context_line":"    property-groups\u003d\"["},{"line_number":5,"context_line":"      [\u0027name\u0027, \u0027id\u0027],"},{"line_number":6,"context_line":"      [\u0027port_id\u0027],"},{"line_number":7,"context_line":"      [\u0027subport_ids\u0027],"},{"line_number":8,"context_line":"      [\u0027status\u0027, \u0027admin_state_up\u0027],"},{"line_number":9,"context_line":"      [\u0027created_at\u0027, \u0027updated_at\u0027],"},{"line_number":10,"context_line":"      [\u0027project_id\u0027, \u0027tenant_id\u0027]]\"\u003e"},{"line_number":11,"context_line":"  \u003c/hz-resource-property-list\u003e"},{"line_number":12,"context_line":"\u003cdiv class\u003d\"row\"\u003e"},{"line_number":13,"context_line":" \u003cdiv class\u003d\"col-md-4\"\u003e"}],"source_content_type":"text/html","patch_set":2,"id":"bff0334d_e7595f5a","line":10,"range":{"start_line":5,"start_character":0,"end_line":10,"end_character":36},"in_reply_to":"ffe62b97_98cd895f","updated":"2017-04-07 09:06:19.000000000","message":"I think now I show only the important part, except the subports, but that can be too much to show up here, so for that the details is the good place.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"9b65b8f7eb4dd7d6d33395d921c16b049f3628bc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"      [\u0027project_id\u0027, \u0027tenant_id\u0027]]\"\u003e"},{"line_number":11,"context_line":"  \u003c/hz-resource-property-list\u003e"},{"line_number":12,"context_line":"\u003cdiv class\u003d\"row\"\u003e"},{"line_number":13,"context_line":" \u003cdiv class\u003d\"col-md-4\"\u003e"},{"line_number":14,"context_line":"    \u003cdl\u003e"},{"line_number":15,"context_line":"      \u003cdiv ng-repeat\u003d\"(key, value) in item.extras\"\u003e"},{"line_number":16,"context_line":"        \u003cdt\u003e{$ key $}\u003c/dt\u003e"}],"source_content_type":"text/html","patch_set":2,"id":"ffe62b97_78c9a576","line":13,"range":{"start_line":13,"start_character":13,"end_line":13,"end_character":21},"updated":"2017-03-24 15:05:33.000000000","message":"A reminder that we need to tweak the grid layout, because it is overflowing now.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":10,"context_line":"      [\u0027project_id\u0027, \u0027tenant_id\u0027]]\"\u003e"},{"line_number":11,"context_line":"  \u003c/hz-resource-property-list\u003e"},{"line_number":12,"context_line":"\u003cdiv class\u003d\"row\"\u003e"},{"line_number":13,"context_line":" \u003cdiv class\u003d\"col-md-4\"\u003e"},{"line_number":14,"context_line":"    \u003cdl\u003e"},{"line_number":15,"context_line":"      \u003cdiv ng-repeat\u003d\"(key, value) in item.extras\"\u003e"},{"line_number":16,"context_line":"        \u003cdt\u003e{$ key $}\u003c/dt\u003e"}],"source_content_type":"text/html","patch_set":2,"id":"bff0334d_075b2354","line":13,"range":{"start_line":13,"start_character":13,"end_line":13,"end_character":21},"in_reply_to":"ffe62b97_78c9a576","updated":"2017-04-07 09:06:19.000000000","message":"Done","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"}],"openstack_dashboard/static/app/core/trunks/trunks.module.js":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"9b65b8f7eb4dd7d6d33395d921c16b049f3628bc","unresolved":false,"context_lines":[{"line_number":106,"context_line":"   * @name trunkProperties"},{"line_number":107,"context_line":"   * @description resource properties for trunk module"},{"line_number":108,"context_line":"   */"},{"line_number":109,"context_line":"  function trunkProperties() {"},{"line_number":110,"context_line":"    return {"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"}],"source_content_type":"text/javascript","patch_set":2,"id":"ffe62b97_539b6271","line":109,"updated":"2017-03-24 15:05:33.000000000","message":"Out of these properties I think the table shall have the following columns (in this order):\n\n Name, Parent Port, Subport Count, Admin State, Status\n\nThe rest is to be shown in the \u0027detail\u0027 only.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":106,"context_line":"   * @name trunkProperties"},{"line_number":107,"context_line":"   * @description resource properties for trunk module"},{"line_number":108,"context_line":"   */"},{"line_number":109,"context_line":"  function trunkProperties() {"},{"line_number":110,"context_line":"    return {"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"}],"source_content_type":"text/javascript","patch_set":2,"id":"bff0334d_c702db0b","line":109,"in_reply_to":"ffe62b97_539b6271","updated":"2017-04-07 09:06:19.000000000","message":"Done","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"9b65b8f7eb4dd7d6d33395d921c16b049f3628bc","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    return {"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"},{"line_number":116,"context_line":"      status: gettext(\u0027Status\u0027),"}],"source_content_type":"text/javascript","patch_set":2,"id":"ffe62b97_b3406e37","line":113,"updated":"2017-03-24 15:05:33.000000000","message":"I\u0027d call this simply \u0027Parent Port\u0027. Then display the name of it if there\u0027s one. Otherwise display the uuid in parentheses. This seems to me a standard in Horizon.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    return {"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"},{"line_number":116,"context_line":"      status: gettext(\u0027Status\u0027),"}],"source_content_type":"text/javascript","patch_set":2,"id":"bff0334d_673b0feb","line":113,"in_reply_to":"ffe62b97_b3406e37","updated":"2017-04-07 09:06:19.000000000","message":"Done","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"9b65b8f7eb4dd7d6d33395d921c16b049f3628bc","unresolved":false,"context_lines":[{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"},{"line_number":116,"context_line":"      status: gettext(\u0027Status\u0027),"},{"line_number":117,"context_line":"      admin_state_up: gettext(\u0027Admin State\u0027),"}],"source_content_type":"text/javascript","patch_set":2,"id":"ffe62b97_736306de","line":114,"range":{"start_line":114,"start_character":30,"end_line":114,"end_character":48},"updated":"2017-03-24 15:05:33.000000000","message":"\"Subport Count\" is shorter and tells the same.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"},{"line_number":116,"context_line":"      status: gettext(\u0027Status\u0027),"},{"line_number":117,"context_line":"      admin_state_up: gettext(\u0027Admin State\u0027),"}],"source_content_type":"text/javascript","patch_set":2,"id":"bff0334d_473ecbda","line":114,"range":{"start_line":114,"start_character":30,"end_line":114,"end_character":48},"in_reply_to":"ffe62b97_736306de","updated":"2017-04-07 09:06:19.000000000","message":"Done","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"9b65b8f7eb4dd7d6d33395d921c16b049f3628bc","unresolved":false,"context_lines":[{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"},{"line_number":116,"context_line":"      status: gettext(\u0027Status\u0027),"},{"line_number":117,"context_line":"      admin_state_up: gettext(\u0027Admin State\u0027),"},{"line_number":118,"context_line":"      description: gettext(\u0027Description\u0027),"}],"source_content_type":"text/javascript","patch_set":2,"id":"ffe62b97_b3974e91","line":115,"range":{"start_line":115,"start_character":28,"end_line":115,"end_character":37},"updated":"2017-03-24 15:05:33.000000000","message":"Let\u0027s have a standard spelling as before: Subports.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6f44a84b20eeaeed085085285f6e6466262cc521","unresolved":false,"context_lines":[{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"},{"line_number":116,"context_line":"      status: gettext(\u0027Status\u0027),"},{"line_number":117,"context_line":"      admin_state_up: gettext(\u0027Admin State\u0027),"},{"line_number":118,"context_line":"      description: gettext(\u0027Description\u0027),"}],"source_content_type":"text/javascript","patch_set":2,"id":"bff0334d_e72effa3","line":115,"range":{"start_line":115,"start_character":28,"end_line":115,"end_character":37},"in_reply_to":"ffe62b97_b3974e91","updated":"2017-04-07 09:06:19.000000000","message":"I removed this information from this view, and plan to show that in a later patch in the details view.","commit_id":"8342c60fb6690af18c7d9319304ddcfe323c4207"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6d127d171f168416a0bb1c4daac41c0fe10357de","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        singleton: true"},{"line_number":97,"context_line":"      })"},{"line_number":98,"context_line":"      .append({"},{"line_number":99,"context_line":"        label: gettext(\u0027AdminState\u0027),"},{"line_number":100,"context_line":"        name: \u0027admin_state\u0027,"},{"line_number":101,"context_line":"        singleton: true"},{"line_number":102,"context_line":"      });"}],"source_content_type":"text/javascript","patch_set":4,"id":"dfeb2761_0a9ffa50","line":99,"range":{"start_line":99,"start_character":24,"end_line":99,"end_character":34},"updated":"2017-03-30 22:01:15.000000000","message":"-\u003e \"Admin State\"\n\n(needs a space before State)","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0d29e383849860d7d36db80f1585c8530f3db8f5","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        singleton: true"},{"line_number":97,"context_line":"      })"},{"line_number":98,"context_line":"      .append({"},{"line_number":99,"context_line":"        label: gettext(\u0027AdminState\u0027),"},{"line_number":100,"context_line":"        name: \u0027admin_state\u0027,"},{"line_number":101,"context_line":"        singleton: true"},{"line_number":102,"context_line":"      });"}],"source_content_type":"text/javascript","patch_set":4,"id":"bff0334d_ca5e6211","line":99,"range":{"start_line":99,"start_character":24,"end_line":99,"end_character":34},"in_reply_to":"dfeb2761_0a9ffa50","updated":"2017-04-07 09:14:32.000000000","message":"Done","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6d127d171f168416a0bb1c4daac41c0fe10357de","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  function trunkProperties() {"},{"line_number":110,"context_line":"    return {"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"}],"source_content_type":"text/javascript","patch_set":4,"id":"dfeb2761_ca9a326d","line":112,"range":{"start_line":112,"start_character":6,"end_line":112,"end_character":24},"updated":"2017-03-30 22:01:15.000000000","message":"In horizon, we don\u0027t usually show ID in a table.\nFor example, in the network table, we show \u0027name\u0027 first and if \u0027name\u0027 is empty a shortened version of ID is displayed like \"(4ae117ff-74c5)\".","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0d29e383849860d7d36db80f1585c8530f3db8f5","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  function trunkProperties() {"},{"line_number":110,"context_line":"    return {"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"}],"source_content_type":"text/javascript","patch_set":4,"id":"bff0334d_ca72e249","line":112,"range":{"start_line":112,"start_character":6,"end_line":112,"end_character":24},"in_reply_to":"dfeb2761_ca9a326d","updated":"2017-04-07 09:14:32.000000000","message":"I removed id from this list.\nCould you help me out with this shortened uuid, please?\nIn the django code if I understand well the \ntables.WrappingColumn(\"name_or_id\",....) is doing that, but for angular I can\u0027t find similar.","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6d127d171f168416a0bb1c4daac41c0fe10357de","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    return {"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"},{"line_number":116,"context_line":"      status: gettext(\u0027Status\u0027),"}],"source_content_type":"text/javascript","patch_set":4,"id":"dfeb2761_aa892e27","line":113,"range":{"start_line":113,"start_character":23,"end_line":113,"end_character":41},"updated":"2017-03-30 22:01:15.000000000","message":"It should be \"Parent Port\".\n\nIn addition, a port name should be displayed instead of full UUID.\nSee my comment above.","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"641a4c85b19bed7ffee040bf3b4e27e9a0a340f3","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    return {"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"},{"line_number":116,"context_line":"      status: gettext(\u0027Status\u0027),"}],"source_content_type":"text/javascript","patch_set":4,"id":"5ff73747_642d09fd","line":113,"range":{"start_line":113,"start_character":23,"end_line":113,"end_character":41},"in_reply_to":"7ffa3b31_613e0c8c","updated":"2017-04-27 13:27:21.000000000","message":"thanks. I used the to_dict, but I see now that in images the angular way was used.","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e95a444b12fd49d664e9ac3cef726c8b449e1205","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    return {"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"},{"line_number":116,"context_line":"      status: gettext(\u0027Status\u0027),"}],"source_content_type":"text/javascript","patch_set":4,"id":"7ffa3b31_613e0c8c","line":113,"range":{"start_line":113,"start_character":23,"end_line":113,"end_character":41},"in_reply_to":"bff0334d_aa379eb0","updated":"2017-04-20 13:35:15.000000000","message":"One option is to return \u0027name_or_id\u0027 field from to_dict() method in the server side. Another approach is to generate an equivalent field in JavaScript side.\n\nNote that you can add a new feature in the angular side. When I implemented the network panel, I introduced name_or_id property to follow the horizon convention.","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0d29e383849860d7d36db80f1585c8530f3db8f5","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    return {"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":113,"context_line":"      port_id: gettext(\u0027Parent Port ID\u0027),"},{"line_number":114,"context_line":"      subport_count: gettext(\u0027Number of Subports\u0027),"},{"line_number":115,"context_line":"      subport_ids: gettext(\u0027Sub Ports\u0027),"},{"line_number":116,"context_line":"      status: gettext(\u0027Status\u0027),"}],"source_content_type":"text/javascript","patch_set":4,"id":"bff0334d_aa379eb0","line":113,"range":{"start_line":113,"start_character":23,"end_line":113,"end_character":41},"in_reply_to":"dfeb2761_aa892e27","updated":"2017-04-07 09:14:32.000000000","message":"2 questions for this:\n\n- As by getting the trunk from neutron, we have just the uuid of the parent, what do you think about adding some more complex logic to api.neutron.Trunk.__init__ to fetch the port by the uuid, and add the name of the parent to the apidict?\n\n- I can\u0027t find the uuid shortener in the angular code, do you have some suggestions how to do that?","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6d127d171f168416a0bb1c4daac41c0fe10357de","unresolved":false,"context_lines":[{"line_number":118,"context_line":"      description: gettext(\u0027Description\u0027),"},{"line_number":119,"context_line":"      created_at: gettext(\u0027Created At\u0027),"},{"line_number":120,"context_line":"      updated_at: gettext(\u0027Updated At\u0027),"},{"line_number":121,"context_line":"      project_id: gettext(\u0027Project ID\u0027),"},{"line_number":122,"context_line":"      tenant_id: gettext(\u0027Tenant ID\u0027)"},{"line_number":123,"context_line":"    };"},{"line_number":124,"context_line":"  }"},{"line_number":125,"context_line":""}],"source_content_type":"text/javascript","patch_set":4,"id":"dfeb2761_8a18aad3","line":122,"range":{"start_line":121,"start_character":5,"end_line":122,"end_character":37},"updated":"2017-03-30 22:01:15.000000000","message":"You don\u0027t need to show tenant ID. Horizon use \u0027project\u0027 in all panels.","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0d29e383849860d7d36db80f1585c8530f3db8f5","unresolved":false,"context_lines":[{"line_number":118,"context_line":"      description: gettext(\u0027Description\u0027),"},{"line_number":119,"context_line":"      created_at: gettext(\u0027Created At\u0027),"},{"line_number":120,"context_line":"      updated_at: gettext(\u0027Updated At\u0027),"},{"line_number":121,"context_line":"      project_id: gettext(\u0027Project ID\u0027),"},{"line_number":122,"context_line":"      tenant_id: gettext(\u0027Tenant ID\u0027)"},{"line_number":123,"context_line":"    };"},{"line_number":124,"context_line":"  }"},{"line_number":125,"context_line":""}],"source_content_type":"text/javascript","patch_set":4,"id":"bff0334d_ea77e639","line":122,"range":{"start_line":121,"start_character":5,"end_line":122,"end_character":37},"in_reply_to":"dfeb2761_8a18aad3","updated":"2017-04-07 09:14:32.000000000","message":"Done","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"4059f610652044094e36d2a699cf4673ccb1e9d7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        label: gettext(\u0027Admin State\u0027),"},{"line_number":96,"context_line":"        name: \u0027admin_state\u0027,"},{"line_number":97,"context_line":"        singleton: true"},{"line_number":98,"context_line":"      });"},{"line_number":99,"context_line":"  }"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":9,"id":"3f044301_78ae4ce8","line":98,"updated":"2017-05-04 13:01:41.000000000","message":"Why don\u0027t we add filters for all columns in the table? Now we can\u0027t filter for parent port or subport count.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b2110f896c6e1eeb5ea01c65f7ceae098bf17799","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        label: gettext(\u0027Admin State\u0027),"},{"line_number":96,"context_line":"        name: \u0027admin_state\u0027,"},{"line_number":97,"context_line":"        singleton: true"},{"line_number":98,"context_line":"      });"},{"line_number":99,"context_line":"  }"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":9,"id":"3f044301_2a771805","line":98,"in_reply_to":"3f044301_78ae4ce8","updated":"2017-05-06 05:40:34.000000000","message":"Done\nFor subport_count as that is a counted field it is not working, so that is not here.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"4059f610652044094e36d2a699cf4673ccb1e9d7","unresolved":false,"context_lines":[{"line_number":108,"context_line":"      created_at: gettext(\u0027Created at\u0027),"},{"line_number":109,"context_line":"      description: gettext(\u0027Description\u0027),"},{"line_number":110,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      port_id: gettext(\u0027Parent Port\u0027),"},{"line_number":113,"context_line":"      project_id: gettext(\u0027Project ID\u0027),"},{"line_number":114,"context_line":"      status: gettext(\u0027Status\u0027),"}],"source_content_type":"text/javascript","patch_set":9,"id":"3f044301_88e9cd81","line":111,"range":{"start_line":111,"start_character":6,"end_line":111,"end_character":10},"updated":"2017-05-04 13:01:41.000000000","message":"I think we need to change this to \u0027name_or_id\u0027 just like it was changed in L58. Because now the \u0027name_or_id\u0027 column does not have a name meant for humans.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bf9d69ce2bbf347171accf4e5f40f17a7f48beaf","unresolved":false,"context_lines":[{"line_number":108,"context_line":"      created_at: gettext(\u0027Created at\u0027),"},{"line_number":109,"context_line":"      description: gettext(\u0027Description\u0027),"},{"line_number":110,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      port_id: gettext(\u0027Parent Port\u0027),"},{"line_number":113,"context_line":"      project_id: gettext(\u0027Project ID\u0027),"},{"line_number":114,"context_line":"      status: gettext(\u0027Status\u0027),"}],"source_content_type":"text/javascript","patch_set":9,"id":"3f044301_aeffee65","line":111,"range":{"start_line":111,"start_character":6,"end_line":111,"end_character":10},"in_reply_to":"3f044301_88e9cd81","updated":"2017-05-04 13:50:08.000000000","message":"In my understanding, this returns all properties, right? In this case, we can show \u0027name\u0027 even if it is empty. The main purpose of name_or_id is to provide user-friendly \"name\". If we show details of trunks, name and ID would be good.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b2110f896c6e1eeb5ea01c65f7ceae098bf17799","unresolved":false,"context_lines":[{"line_number":108,"context_line":"      created_at: gettext(\u0027Created at\u0027),"},{"line_number":109,"context_line":"      description: gettext(\u0027Description\u0027),"},{"line_number":110,"context_line":"      id: gettext(\u0027ID\u0027),"},{"line_number":111,"context_line":"      name: gettext(\u0027Name\u0027),"},{"line_number":112,"context_line":"      port_id: gettext(\u0027Parent Port\u0027),"},{"line_number":113,"context_line":"      project_id: gettext(\u0027Project ID\u0027),"},{"line_number":114,"context_line":"      status: gettext(\u0027Status\u0027),"}],"source_content_type":"text/javascript","patch_set":9,"id":"3f044301_aa5c487e","line":111,"range":{"start_line":111,"start_character":6,"end_line":111,"end_character":10},"in_reply_to":"3f044301_aeffee65","updated":"2017-05-06 05:40:34.000000000","message":"I changed the name_or_id column name to Name.","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"8a85b688a936f7aecb5237b09eb0bdff77ede49b","unresolved":false,"context_lines":[{"line_number":99,"context_line":"      .append({"},{"line_number":100,"context_line":"        label: gettext(\u0027Admin State\u0027),"},{"line_number":101,"context_line":"        name: \u0027admin_state_up\u0027,"},{"line_number":102,"context_line":"        singleton: true"},{"line_number":103,"context_line":"      });"},{"line_number":104,"context_line":"  }"},{"line_number":105,"context_line":""}],"source_content_type":"text/javascript","patch_set":15,"id":"ff0f0b1f_dfa18cab","line":102,"updated":"2017-05-19 09:06:49.000000000","message":"These filters need options filling, see https://github.com/openstack/horizon/blob/master/openstack_dashboard/static/app/core/images/images.module.js#L147\n\nStatus and Admin State should both just have fixed options.","commit_id":"3a23fa7d55f7fc8e10f386ab7f80f065a362ef67"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"36c2bccb008863d31d2f9a5196cf5794e7358ed8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"      .append({"},{"line_number":100,"context_line":"        label: gettext(\u0027Admin State\u0027),"},{"line_number":101,"context_line":"        name: \u0027admin_state_up\u0027,"},{"line_number":102,"context_line":"        singleton: true"},{"line_number":103,"context_line":"      });"},{"line_number":104,"context_line":"  }"},{"line_number":105,"context_line":""}],"source_content_type":"text/javascript","patch_set":15,"id":"ff0f0b1f_f395a7e5","line":102,"in_reply_to":"ff0f0b1f_dfa18cab","updated":"2017-05-19 11:32:44.000000000","message":"Done","commit_id":"3a23fa7d55f7fc8e10f386ab7f80f065a362ef67"}],"openstack_dashboard/test/helpers.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1fa97f2c0c7b959b4295a19d29682c760d92e0d2","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            \u0027.aggregates.panel.Aggregates.can_access\u0027,"},{"line_number":213,"context_line":"            mock.Mock(return_value\u003dTrue))"},{"line_number":214,"context_line":"        self.patchers[\u0027aggregates\u0027].start()"},{"line_number":215,"context_line":"        self.patchers[\u0027trunk\u0027] \u003d mock.patch("},{"line_number":216,"context_line":"            \u0027openstack_dashboard.dashboards.project\u0027"},{"line_number":217,"context_line":"            \u0027.trunks.panel.Trunks.can_access\u0027,"},{"line_number":218,"context_line":"            mock.Mock(return_value\u003dTrue))"},{"line_number":219,"context_line":"        self.patchers[\u0027trunk\u0027].start()"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def tearDown(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5ff73747_ec0ac123","line":218,"range":{"start_line":215,"start_character":0,"end_line":218,"end_character":41},"updated":"2017-05-02 05:41:14.000000000","message":"Very good, thanks Akihiro:-)","commit_id":"9976239ecbb83b4947da761dd558ebae9ac22435"}],"openstack_dashboard/test/settings.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cfd70e4039298764a92de9cd8c787f253259a44b","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    \u0027enable_firewall\u0027: False,"},{"line_number":174,"context_line":"    \u0027enable_vpn\u0027: False,"},{"line_number":175,"context_line":"    \u0027enable_distributed_router\u0027: False,"},{"line_number":176,"context_line":"    # \u0027profile_support\u0027: \u0027cisco\u0027"},{"line_number":177,"context_line":"    \u0027enable_trunk\u0027: False,"},{"line_number":178,"context_line":"}"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_ca5fd20c","line":176,"range":{"start_line":176,"start_character":4,"end_line":176,"end_character":32},"updated":"2017-03-30 21:16:04.000000000","message":"Unrelated","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0d29e383849860d7d36db80f1585c8530f3db8f5","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    \u0027enable_firewall\u0027: False,"},{"line_number":174,"context_line":"    \u0027enable_vpn\u0027: False,"},{"line_number":175,"context_line":"    \u0027enable_distributed_router\u0027: False,"},{"line_number":176,"context_line":"    # \u0027profile_support\u0027: \u0027cisco\u0027"},{"line_number":177,"context_line":"    \u0027enable_trunk\u0027: False,"},{"line_number":178,"context_line":"}"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bff0334d_aa8f9e21","line":176,"range":{"start_line":176,"start_character":4,"end_line":176,"end_character":32},"in_reply_to":"dfeb2761_ca5fd20c","updated":"2017-04-07 09:14:32.000000000","message":"Done","commit_id":"89b091fbc0624b0db2c6a971b8d571c57e89fadf"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"828e292652d9ba9a630a26b8a50f84d332ea2e70","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    \u0027enable_firewall\u0027: False,"},{"line_number":174,"context_line":"    \u0027enable_vpn\u0027: False,"},{"line_number":175,"context_line":"    \u0027enable_distributed_router\u0027: False,"},{"line_number":176,"context_line":"    \u0027enable_trunk\u0027: False,"},{"line_number":177,"context_line":"}"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"OPENSTACK_HYPERVISOR_FEATURES \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_9f6bba83","line":176,"updated":"2017-04-10 13:57:35.000000000","message":"Let\u0027s decide if we want a config option or not. Then either have it everywhere (here, in the example file, in the allowed() function), or nowhere.","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f719a2557b81a21e7ed293de8219567a269f9d42","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    \u0027enable_firewall\u0027: False,"},{"line_number":174,"context_line":"    \u0027enable_vpn\u0027: False,"},{"line_number":175,"context_line":"    \u0027enable_distributed_router\u0027: False,"},{"line_number":176,"context_line":"    \u0027enable_trunk\u0027: False,"},{"line_number":177,"context_line":"}"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"OPENSTACK_HYPERVISOR_FEATURES \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_973840a0","line":176,"in_reply_to":"5ff73747_64086991","updated":"2017-04-27 16:54:34.000000000","message":"What kind of test failure do you see? We would like to avoid adding a setting only for testing. For trunk case, we don\u0027t see a value having a setting. The same thing can be said to enable_firewall/vpn (but they will be moved out to horizon plugins soon).\n\nNote that \u0027enable_distributed_router\u0027 and \u0027enable_router\u0027 were introduced from other reasons from operator feedbacks that they want to disable it even when neutron provides them.","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2242dc20745de0e3b2b965b604f2380c75c0cfef","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    \u0027enable_firewall\u0027: False,"},{"line_number":174,"context_line":"    \u0027enable_vpn\u0027: False,"},{"line_number":175,"context_line":"    \u0027enable_distributed_router\u0027: False,"},{"line_number":176,"context_line":"    \u0027enable_trunk\u0027: False,"},{"line_number":177,"context_line":"}"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"OPENSTACK_HYPERVISOR_FEATURES \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_68adbc99","line":176,"in_reply_to":"5ff73747_973840a0","updated":"2017-04-28 08:28:03.000000000","message":"From the test runs:\nhttp://logs.openstack.org/17/449217/7/check/gate-horizon-tox-py27dj19-ubuntu-xenial/a4f2351/console.html\n\n.\n.\n.\n2017-04-27 13:24:23.190368 |   File \"/home/jenkins/workspace/gate-horizon-tox-py27dj19-ubuntu-xenial/openstack_dashboard/test/helpers.py\", line 163, in fake_conn_request\n2017-04-27 13:24:23.190387 |     traceback.print_stack()\n2017-04-27 13:24:23.190439 | Call to list enabled services failed. This is likely due to a problem communicating with the Neutron endpoint. Trunks panel will not be displayed.\n2017-04-27 13:24:23.790760 | ECall to list enabled services failed. This is likely due to a problem communicating with the Neutron endpoint. Trunks panel will not be displayed.\n.\n.\n\nBy this I suppose that the neutron extension list is not mocked/stubbed somewhere in the depths of horizon testing.\nThe worse is that this is the same error for all of the tests, so not just a few fails, but most of them, due to some automatic panel loading mechanism during django test execution.","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"69bb7432f81043bde7d2728f5c768602bb0a503d","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    \u0027enable_firewall\u0027: False,"},{"line_number":174,"context_line":"    \u0027enable_vpn\u0027: False,"},{"line_number":175,"context_line":"    \u0027enable_distributed_router\u0027: False,"},{"line_number":176,"context_line":"    \u0027enable_trunk\u0027: False,"},{"line_number":177,"context_line":"}"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"OPENSTACK_HYPERVISOR_FEATURES \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_64086991","line":176,"in_reply_to":"bff0334d_9f6bba83","updated":"2017-04-27 13:27:14.000000000","message":"By removing this the unit tests are failing ,due to the fact that the tests for some reason want to load the trunk_panel, and fetch the extension list from neutron.\nSee the commented lines above enable_firewall","commit_id":"5b154fa3069ae294c71995bb293826bb5308d65c"}],"openstack_dashboard/test/test_data/neutron_data.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"4059f610652044094e36d2a699cf4673ccb1e9d7","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                   \"description\": \"Add HA capability to routers.\"}"},{"line_number":590,"context_line":"    extension_6 \u003d {\"name\": \"Trunks\","},{"line_number":591,"context_line":"                   \"alias\": \"trunk\","},{"line_number":592,"context_line":"                   \"description\": \"blahblah\"}"},{"line_number":593,"context_line":"    TEST.api_extensions.add(extension_1)"},{"line_number":594,"context_line":"    TEST.api_extensions.add(extension_2)"},{"line_number":595,"context_line":"    TEST.api_extensions.add(extension_3)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_380204b6","line":592,"range":{"start_line":592,"start_character":35,"end_line":592,"end_character":43},"updated":"2017-05-04 13:01:41.000000000","message":"Provides support for trunk ports","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b2110f896c6e1eeb5ea01c65f7ceae098bf17799","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                   \"description\": \"Add HA capability to routers.\"}"},{"line_number":590,"context_line":"    extension_6 \u003d {\"name\": \"Trunks\","},{"line_number":591,"context_line":"                   \"alias\": \"trunk\","},{"line_number":592,"context_line":"                   \"description\": \"blahblah\"}"},{"line_number":593,"context_line":"    TEST.api_extensions.add(extension_1)"},{"line_number":594,"context_line":"    TEST.api_extensions.add(extension_2)"},{"line_number":595,"context_line":"    TEST.api_extensions.add(extension_3)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_8a5f4c71","line":592,"range":{"start_line":592,"start_character":35,"end_line":592,"end_character":43},"in_reply_to":"3f044301_2ef3dea0","updated":"2017-05-06 05:40:34.000000000","message":"Done","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bf9d69ce2bbf347171accf4e5f40f17a7f48beaf","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                   \"description\": \"Add HA capability to routers.\"}"},{"line_number":590,"context_line":"    extension_6 \u003d {\"name\": \"Trunks\","},{"line_number":591,"context_line":"                   \"alias\": \"trunk\","},{"line_number":592,"context_line":"                   \"description\": \"blahblah\"}"},{"line_number":593,"context_line":"    TEST.api_extensions.add(extension_1)"},{"line_number":594,"context_line":"    TEST.api_extensions.add(extension_2)"},{"line_number":595,"context_line":"    TEST.api_extensions.add(extension_3)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_2ef3dea0","line":592,"range":{"start_line":592,"start_character":35,"end_line":592,"end_character":43},"in_reply_to":"3f044301_380204b6","updated":"2017-05-04 13:50:08.000000000","message":"+1","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b2110f896c6e1eeb5ea01c65f7ceae098bf17799","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                   \"description\": \"Add HA capability to routers.\"}"},{"line_number":590,"context_line":"    extension_6 \u003d {\"name\": \"Trunks\","},{"line_number":591,"context_line":"                   \"alias\": \"trunk\","},{"line_number":592,"context_line":"                   \"description\": \"blahblah\"}"},{"line_number":593,"context_line":"    TEST.api_extensions.add(extension_1)"},{"line_number":594,"context_line":"    TEST.api_extensions.add(extension_2)"},{"line_number":595,"context_line":"    TEST.api_extensions.add(extension_3)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f044301_6a56405f","line":592,"range":{"start_line":592,"start_character":35,"end_line":592,"end_character":43},"in_reply_to":"3f044301_380204b6","updated":"2017-05-06 05:40:34.000000000","message":"Done","commit_id":"cb3b02ffb98e206423edd157fbd42e79361b8f20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2c62b2f9fb8dccf49d1c11336f3be2409c9a2bd8","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                  \u0027port_id\u0027: \u0027895d375c-1447-11e7-a52f-f7f280bbc809\u0027,"},{"line_number":115,"context_line":"                  \u0027id\u0027: \u002794fcb9e8-1447-11e7-bed6-8b8c4ac74491\u0027}"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    TEST.api_trunks.add(trunk_dict)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    network \u003d copy.deepcopy(network_dict)"},{"line_number":120,"context_line":"    subnet \u003d neutron.Subnet(subnet_dict)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff0f0b1f_865dab16","line":117,"updated":"2017-05-23 12:16:17.000000000","message":"I just wonder why you added trunk data inside of network data. L.84-123 handles one data.....","commit_id":"463a95d2a0888d3041ec409ebf7da1682c3b6f4c"},{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"79ec15972690f9cf7feb05a06750a2f10c464ece","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    TEST.subnets \u003d utils.TestDataContainer()"},{"line_number":32,"context_line":"    TEST.subnetpools \u003d utils.TestDataContainer()"},{"line_number":33,"context_line":"    TEST.ports \u003d utils.TestDataContainer()"},{"line_number":34,"context_line":"    TEST.trunks \u003d utils.TestDataContainer()"},{"line_number":35,"context_line":"    TEST.routers \u003d utils.TestDataContainer()"},{"line_number":36,"context_line":"    TEST.routers_with_rules \u003d utils.TestDataContainer()"},{"line_number":37,"context_line":"    TEST.routers_with_routes \u003d utils.TestDataContainer()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_be066ccd","line":34,"updated":"2017-05-23 18:26:58.000000000","message":"Sorry, just noticed; is this even used anywhere? The convention elsewhere seems to be to add the raw data to this dict and the APIWrapper data to the api_ data","commit_id":"9bbdf1ff6af8aaa4e84fa7423a6e55fd00081895"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c9f257b6a332ee6aa781b98f44eebb4107721f06","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    TEST.subnets \u003d utils.TestDataContainer()"},{"line_number":32,"context_line":"    TEST.subnetpools \u003d utils.TestDataContainer()"},{"line_number":33,"context_line":"    TEST.ports \u003d utils.TestDataContainer()"},{"line_number":34,"context_line":"    TEST.trunks \u003d utils.TestDataContainer()"},{"line_number":35,"context_line":"    TEST.routers \u003d utils.TestDataContainer()"},{"line_number":36,"context_line":"    TEST.routers_with_rules \u003d utils.TestDataContainer()"},{"line_number":37,"context_line":"    TEST.routers_with_routes \u003d utils.TestDataContainer()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_a66776e9","line":34,"in_reply_to":"ff0f0b1f_be066ccd","updated":"2017-05-24 02:09:35.000000000","message":"Good catch!","commit_id":"9bbdf1ff6af8aaa4e84fa7423a6e55fd00081895"}]}
