)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"54d11f444e03c6653d25cc1ab9e36c4cad5a5e91","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When we list networks, neutron does not support paginating with"},{"line_number":10,"context_line":"provider attribute, such as \u0027provider:network_type\u0027,"},{"line_number":11,"context_line":"\u0027provider:physical_network\u0027, \u0027provider:segmentation_id\u0027."},{"line_number":12,"context_line":"this patch enable ml2 plugin support it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da20952f_b5317bef","line":12,"updated":"2015-09-03 21:46:15.000000000","message":"If there is a specific use case for this, can you include it here?  I can\u0027t find any way in Horizon or in the neutron command line to specify these attributes for filtering","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"7a87edd6d85e91df48dc64f61870b3de2f48c607","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When we list networks, neutron does not support paginating with"},{"line_number":10,"context_line":"provider attribute, such as \u0027provider:network_type\u0027,"},{"line_number":11,"context_line":"\u0027provider:physical_network\u0027, \u0027provider:segmentation_id\u0027."},{"line_number":12,"context_line":"this patch enable ml2 plugin support it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da20952f_cec69199","line":12,"in_reply_to":"da20952f_b5317bef","updated":"2015-09-07 03:39:59.000000000","message":"In some cases, there are more than one network types in one openstack, like vlan and vxlan, then user may want to paginate with provider attribute network_type or physical_network","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"48a0381d9e195c315045523a0fdbd409b474bd39","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When we list networks, neutron does not support paginating with"},{"line_number":10,"context_line":"provider attribute, such as \u0027provider:network_type\u0027,"},{"line_number":11,"context_line":"\u0027provider:physical_network\u0027, \u0027provider:segmentation_id\u0027."},{"line_number":12,"context_line":"this patch enable ml2 plugin support it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ba15a1d1_638b5769","line":12,"updated":"2015-09-22 12:21:05.000000000","message":"please add the explanation from PS4 comments into the commit message","commit_id":"1baec393f6df276ec7408a23bdaed82e7f679e7c"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"06fe6135868a6bc4cf8f4baf5ffe19b30d4673ad","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When we list networks, neutron does not support paginating with"},{"line_number":10,"context_line":"provider attribute, such as \u0027provider:network_type\u0027,"},{"line_number":11,"context_line":"\u0027provider:physical_network\u0027, \u0027provider:segmentation_id\u0027."},{"line_number":12,"context_line":"this patch enable ml2 plugin support it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a1a9d01_7906bf21","line":12,"in_reply_to":"9a1a9d01_5512570a","updated":"2015-10-02 18:55:24.000000000","message":"I\u0027m not a fan of explanations only being in PS comments.  That being said - I do see that we have a DocImpact tag and that would be a better place than even here","commit_id":"1baec393f6df276ec7408a23bdaed82e7f679e7c"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"1ee22580afbb71a96f57cc7b1e7ad69f09bfc614","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When we list networks, neutron does not support paginating with"},{"line_number":10,"context_line":"provider attribute, such as \u0027provider:network_type\u0027,"},{"line_number":11,"context_line":"\u0027provider:physical_network\u0027, \u0027provider:segmentation_id\u0027."},{"line_number":12,"context_line":"this patch enable ml2 plugin support it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a8ffd7b_946286ac","line":12,"in_reply_to":"9a1a9d01_7906bf21","updated":"2015-12-01 01:11:29.000000000","message":"Done","commit_id":"1baec393f6df276ec7408a23bdaed82e7f679e7c"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"dac4178f43870fd667f050f8f673e1947b8c810f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When we list networks, neutron does not support paginating with"},{"line_number":10,"context_line":"provider attribute, such as \u0027provider:network_type\u0027,"},{"line_number":11,"context_line":"\u0027provider:physical_network\u0027, \u0027provider:segmentation_id\u0027."},{"line_number":12,"context_line":"this patch enable ml2 plugin support it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a1a9d01_5512570a","line":12,"in_reply_to":"ba15a1d1_638b5769","updated":"2015-09-29 07:25:56.000000000","message":"I have explain for Brad Behle in PS4, do you think it need to add that to commit message?","commit_id":"1baec393f6df276ec7408a23bdaed82e7f679e7c"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"3e675fca3653d4a74295d0ccc28fa8cf445d0bfc","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When we list networks, neutron does not support paginating with"},{"line_number":10,"context_line":"provider attribute, such as \u0027provider:network_type\u0027,"},{"line_number":11,"context_line":"\u0027provider:physical_network\u0027, \u0027provider:segmentation_id\u0027."},{"line_number":12,"context_line":"this patch enable ml2 plugin support it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-bug: #1481231"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a8ffd7b_caafeb7b","line":12,"updated":"2015-12-01 12:59:28.000000000","message":"My apologies as I have misled you.  I really want the DocImpact tag back...","commit_id":"6bd9a379344276ab74efe131438f24a166b1857b"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"97ee846b950b3ff9d5b8fcdfa547c23df5008eee","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When we list networks, neutron does not support paginating with"},{"line_number":10,"context_line":"provider attribute, such as \u0027provider:network_type\u0027,"},{"line_number":11,"context_line":"\u0027provider:physical_network\u0027, \u0027provider:segmentation_id\u0027."},{"line_number":12,"context_line":"this patch enable ml2 plugin support it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-bug: #1481231"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a8ffd7b_d5d8df81","line":12,"in_reply_to":"9a8ffd7b_caafeb7b","updated":"2015-12-01 16:12:17.000000000","message":"got it","commit_id":"6bd9a379344276ab74efe131438f24a166b1857b"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"b88ccc092d48b3ff84e5d31d57de3196c293327b","unresolved":false,"context_lines":[{"line_number":11,"context_line":"\u0027provider:physical_network\u0027, \u0027provider:segmentation_id\u0027."},{"line_number":12,"context_line":"this patch enable ml2 plugin support it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Closes-bug: #1481231"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7a740942_08bbe273","line":14,"updated":"2015-12-04 01:16:14.000000000","message":"Please follow guidelines as detailed here:\n\nhttp://lists.openstack.org/pipermail/openstack-dev/2015-November/080294.html\n\n\"you will need to add a description whenever you add a DocImpact flag in your commit message.\"","commit_id":"de1bd9b9201a54cada86c176ef3e87e6775c4567"}],"neutron/db/providernet_db.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"b5ee8baaa5660c16ff29c4959c654a1539e42ecb","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def _networks_provider_query_hook(self, context, original_model, query):"},{"line_number":22,"context_line":"        query \u003d query.outerjoin("},{"line_number":23,"context_line":"            segments_db.NetworkSegment,"},{"line_number":24,"context_line":"            original_model.id \u003d\u003d segments_db.NetworkSegment.network_id)"},{"line_number":25,"context_line":"        return query"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _networks_provider_filter(self, query, filters):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_701fc15b","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":71},"updated":"2016-06-28 02:58:05.000000000","message":"The original logic will return networks if the network don\u0027t have segment[1]. But your change here seems only consider the network that have segments. Although I think the original logic is not good, at least an update to the commit msg or DocImpact will be great.\n\nPlus, is it possible to add a filtering argument --no-segment?  to query the networks without any segment associated.\n\n[1] https://github.com/openstack/neutron/blob/6e3b453ebb5ac97679343a593a0514cc64b59bff/neutron/plugins/ml2/managers.py#L142","commit_id":"f3a6c32a641b08b691a20350bcfd4cc439f27b1e"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"c383e3a0bd4c10a6de646cfa5818aa73ea87f37b","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def _networks_provider_query_hook(self, context, original_model, query):"},{"line_number":22,"context_line":"        query \u003d query.outerjoin("},{"line_number":23,"context_line":"            segments_db.NetworkSegment,"},{"line_number":24,"context_line":"            original_model.id \u003d\u003d segments_db.NetworkSegment.network_id)"},{"line_number":25,"context_line":"        return query"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _networks_provider_filter(self, query, filters):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_8e41290e","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":71},"in_reply_to":"3aaa91ec_701fc15b","updated":"2016-06-29 08:43:28.000000000","message":"Hong Hui xiao, thx for your review and suggestion, as I understand, for the plugin(eg. ml2) which support extension \u0027provider\u0027, the logic does not change, for the plugin which not support \u0027provider\u0027, it is no need to inherit this new class, what do you think?","commit_id":"f3a6c32a641b08b691a20350bcfd4cc439f27b1e"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"3f8c4829028645b54b6abd80a8159cdfc32d82f3","unresolved":false,"context_lines":[{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        return self._fields(result, fields)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def _filterd_by_provider_attr(self, query, filters, network):"},{"line_number":690,"context_line":"        network_segment \u003d models.NetworkSegment"},{"line_number":691,"context_line":"        attr_map \u003d {"},{"line_number":692,"context_line":"            provider.NETWORK_TYPE: network_segment.network_type,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_b27431fe","line":689,"updated":"2015-09-03 21:41:16.000000000","message":"filterd or filter?","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"7a87edd6d85e91df48dc64f61870b3de2f48c607","unresolved":false,"context_lines":[{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        return self._fields(result, fields)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def _filterd_by_provider_attr(self, query, filters, network):"},{"line_number":690,"context_line":"        network_segment \u003d models.NetworkSegment"},{"line_number":691,"context_line":"        attr_map \u003d {"},{"line_number":692,"context_line":"            provider.NETWORK_TYPE: network_segment.network_type,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_08aec12d","line":689,"in_reply_to":"da20952f_b27431fe","updated":"2015-09-07 03:39:59.000000000","message":"maybe filter is better","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"3f8c4829028645b54b6abd80a8159cdfc32d82f3","unresolved":false,"context_lines":[{"line_number":693,"context_line":"            provider.PHYSICAL_NETWORK: network_segment.physical_network,"},{"line_number":694,"context_line":"            provider.SEGMENTATION_ID: network_segment.segmentation_id}"},{"line_number":695,"context_line":""},{"line_number":696,"context_line":"        for network_attr in provider.ATTRIBUTES:"},{"line_number":697,"context_line":"            attr \u003d filters.pop(network_attr, None)"},{"line_number":698,"context_line":"            if attr is not None:"},{"line_number":699,"context_line":"                query \u003d query.filter(attr_map[network_attr] \u003d\u003d attr[0])"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_b2e2f19e","line":696,"updated":"2015-09-03 21:41:16.000000000","message":"use:\n\n for network_attr, attr_col in attr_map.items():\n  ...\n  query \u003d query.filter(attr_col \u003d\u003d ...)","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"7a87edd6d85e91df48dc64f61870b3de2f48c607","unresolved":false,"context_lines":[{"line_number":693,"context_line":"            provider.PHYSICAL_NETWORK: network_segment.physical_network,"},{"line_number":694,"context_line":"            provider.SEGMENTATION_ID: network_segment.segmentation_id}"},{"line_number":695,"context_line":""},{"line_number":696,"context_line":"        for network_attr in provider.ATTRIBUTES:"},{"line_number":697,"context_line":"            attr \u003d filters.pop(network_attr, None)"},{"line_number":698,"context_line":"            if attr is not None:"},{"line_number":699,"context_line":"                query \u003d query.filter(attr_map[network_attr] \u003d\u003d attr[0])"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_e8790dc9","line":696,"in_reply_to":"da20952f_b2e2f19e","updated":"2015-09-07 03:39:59.000000000","message":"thx for your suggestion","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"3f8c4829028645b54b6abd80a8159cdfc32d82f3","unresolved":false,"context_lines":[{"line_number":697,"context_line":"            attr \u003d filters.pop(network_attr, None)"},{"line_number":698,"context_line":"            if attr is not None:"},{"line_number":699,"context_line":"                query \u003d query.filter(attr_map[network_attr] \u003d\u003d attr[0])"},{"line_number":700,"context_line":"            query \u003d self._apply_filters_to_query(query, network, filters)"},{"line_number":701,"context_line":"        return query"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def _get_networks_query(self, context, filters\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_d2f6855c","line":700,"updated":"2015-09-03 21:41:16.000000000","message":"L700 indentation seems incorrect?","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"ac4b8d52d43274d277a140cb87b59690f612d747","unresolved":false,"context_lines":[{"line_number":697,"context_line":"            attr \u003d filters.pop(network_attr, None)"},{"line_number":698,"context_line":"            if attr is not None:"},{"line_number":699,"context_line":"                query \u003d query.filter(attr_map[network_attr] \u003d\u003d attr[0])"},{"line_number":700,"context_line":"            query \u003d self._apply_filters_to_query(query, network, filters)"},{"line_number":701,"context_line":"        return query"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def _get_networks_query(self, context, filters\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_f0e56aa3","line":700,"in_reply_to":"da20952f_c87a09ba","updated":"2015-09-07 11:12:40.000000000","message":"because self._apply_filters_to_query is called 3 times instead of once","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"7a87edd6d85e91df48dc64f61870b3de2f48c607","unresolved":false,"context_lines":[{"line_number":697,"context_line":"            attr \u003d filters.pop(network_attr, None)"},{"line_number":698,"context_line":"            if attr is not None:"},{"line_number":699,"context_line":"                query \u003d query.filter(attr_map[network_attr] \u003d\u003d attr[0])"},{"line_number":700,"context_line":"            query \u003d self._apply_filters_to_query(query, network, filters)"},{"line_number":701,"context_line":"        return query"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def _get_networks_query(self, context, filters\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_c87a09ba","line":700,"in_reply_to":"da20952f_d2f6855c","updated":"2015-09-07 03:39:59.000000000","message":"why?","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"059de82afde2fabb6e97cf0a3b0278d9bc445d5f","unresolved":false,"context_lines":[{"line_number":700,"context_line":"            query \u003d self._apply_filters_to_query(query, network, filters)"},{"line_number":701,"context_line":"        return query"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def _get_networks_query(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":704,"context_line":"                            sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":705,"context_line":"                            page_reverse\u003dFalse):"},{"line_number":706,"context_line":"        marker_obj \u003d self._get_marker_obj(context, \u0027network\u0027, limit, marker)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_01434543","line":703,"updated":"2015-09-04 00:02:47.000000000","message":"this is kind of a copy of get_networks from db_base_plugin and _get_collection. It\u0027s also missing the correct logic to populate the context for make_network_dict.\n\nPlease find a different way to refactor so we don\u0027t end up duplicating logic of the things we are inheriting from in incorrect ways.","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"7a87edd6d85e91df48dc64f61870b3de2f48c607","unresolved":false,"context_lines":[{"line_number":700,"context_line":"            query \u003d self._apply_filters_to_query(query, network, filters)"},{"line_number":701,"context_line":"        return query"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def _get_networks_query(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":704,"context_line":"                            sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":705,"context_line":"                            page_reverse\u003dFalse):"},{"line_number":706,"context_line":"        marker_obj \u003d self._get_marker_obj(context, \u0027network\u0027, limit, marker)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_aeb23d47","line":703,"in_reply_to":"da20952f_01434543","updated":"2015-09-07 03:39:59.000000000","message":"kevin, thx very much for your review, I agree with you，but the table \u0027ml2_network_segments\u0027 just in ml2/models.py，so I don\u0027t have idea about how to refactor, can you give a suggestion","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"3f8c4829028645b54b6abd80a8159cdfc32d82f3","unresolved":false,"context_lines":[{"line_number":714,"context_line":"        query \u003d self._filterd_by_provider_attr(query, filters, network)"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        if limit and page_reverse and sorts:"},{"line_number":717,"context_line":"            sorts \u003d [(s[0], not s[1]) for s in sorts]"},{"line_number":718,"context_line":"        query \u003d sqlalchemyutils.paginate_query(query, network, limit,"},{"line_number":719,"context_line":"                                               sorts, marker_obj\u003dmarker_obj)"},{"line_number":720,"context_line":"        items \u003d [self._make_network_dict(c, fields) for c in query]"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_52b83575","line":717,"updated":"2015-09-03 21:41:16.000000000","message":"sorts \u003d [(s0, not s1) for s0, s1 in sorts] seems more readable","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"7a87edd6d85e91df48dc64f61870b3de2f48c607","unresolved":false,"context_lines":[{"line_number":714,"context_line":"        query \u003d self._filterd_by_provider_attr(query, filters, network)"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        if limit and page_reverse and sorts:"},{"line_number":717,"context_line":"            sorts \u003d [(s[0], not s[1]) for s in sorts]"},{"line_number":718,"context_line":"        query \u003d sqlalchemyutils.paginate_query(query, network, limit,"},{"line_number":719,"context_line":"                                               sorts, marker_obj\u003dmarker_obj)"},{"line_number":720,"context_line":"        items \u003d [self._make_network_dict(c, fields) for c in query]"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_884f3191","line":717,"in_reply_to":"da20952f_52b83575","updated":"2015-09-07 03:39:59.000000000","message":"agree","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"89f0ef2ccc976028fa61e76c77c2b1faaa05bff4","unresolved":false,"context_lines":[{"line_number":708,"context_line":"            attr \u003d filters.pop(network_attr, None)"},{"line_number":709,"context_line":"            if attr is not None:"},{"line_number":710,"context_line":"                query \u003d query.filter(attr_col \u003d\u003d attr[0])"},{"line_number":711,"context_line":"            query \u003d self._apply_filters_to_query(query, network, filters)"},{"line_number":712,"context_line":"        return query"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"    def _get_networks_query(self, context, filters\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_7d1cab13","line":711,"updated":"2015-10-23 14:41:58.000000000","message":"Cedric\u0027s comment from PS4 still applies here - this is applying the filters three times and it\u0027s not clear why this is strictly necessary","commit_id":"1baec393f6df276ec7408a23bdaed82e7f679e7c"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"1ee22580afbb71a96f57cc7b1e7ad69f09bfc614","unresolved":false,"context_lines":[{"line_number":708,"context_line":"            attr \u003d filters.pop(network_attr, None)"},{"line_number":709,"context_line":"            if attr is not None:"},{"line_number":710,"context_line":"                query \u003d query.filter(attr_col \u003d\u003d attr[0])"},{"line_number":711,"context_line":"            query \u003d self._apply_filters_to_query(query, network, filters)"},{"line_number":712,"context_line":"        return query"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"    def _get_networks_query(self, context, filters\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_d4ba4e0a","line":711,"in_reply_to":"3a29b11f_7d1cab13","updated":"2015-12-01 01:11:29.000000000","message":"in every loop, the query changes, so this loop is necessary","commit_id":"1baec393f6df276ec7408a23bdaed82e7f679e7c"},{"author":{"_account_id":9459,"name":".Haifeng Yan","email":"yanheven@qq.com","username":"yan"},"change_message_id":"de13717a2c2146bfb36aa7474eb9c6a77eec99b7","unresolved":false,"context_lines":[{"line_number":749,"context_line":"        query \u003d sqlalchemyutils.paginate_query(query, network, limit,"},{"line_number":750,"context_line":"                                               sorts, marker_obj\u003dmarker_obj)"},{"line_number":751,"context_line":"        make_network_dict \u003d functools.partial(self._make_network_dict,"},{"line_number":752,"context_line":"                                              context\u003dcontext)"},{"line_number":753,"context_line":"        items \u003d [make_network_dict(c, fields) for c in query]"},{"line_number":754,"context_line":"        if limit and page_reverse:"},{"line_number":755,"context_line":"            items.reverse()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_d2c19530","line":752,"updated":"2015-12-02 15:08:52.000000000","message":"1,really need partial?\n2,why don\u0027t includ fields?","commit_id":"de1bd9b9201a54cada86c176ef3e87e6775c4567"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"425d7769c120f5beebcf4c188c69f1791a5caa69","unresolved":false,"context_lines":[{"line_number":749,"context_line":"        query \u003d sqlalchemyutils.paginate_query(query, network, limit,"},{"line_number":750,"context_line":"                                               sorts, marker_obj\u003dmarker_obj)"},{"line_number":751,"context_line":"        make_network_dict \u003d functools.partial(self._make_network_dict,"},{"line_number":752,"context_line":"                                              context\u003dcontext)"},{"line_number":753,"context_line":"        items \u003d [make_network_dict(c, fields) for c in query]"},{"line_number":754,"context_line":"        if limit and page_reverse:"},{"line_number":755,"context_line":"            items.reverse()"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_4d8763d7","line":752,"in_reply_to":"9a8ffd7b_d2c19530","updated":"2015-12-07 09:13:08.000000000","message":"it refer to function get_networks in db_base_plugin_v2.py","commit_id":"de1bd9b9201a54cada86c176ef3e87e6775c4567"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"d1f2034538b8f8e3ae1a18908a4ca4c7ce8436dc","unresolved":false,"context_lines":[{"line_number":719,"context_line":"                     sorts\u003dNone, limit\u003dNone, marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":720,"context_line":"        session \u003d context.session"},{"line_number":721,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":722,"context_line":"            nets \u003d super(Ml2Plugin,"},{"line_number":723,"context_line":"                         self).get_networks(context, filters, None, sorts,"},{"line_number":724,"context_line":"                                            limit, marker, page_reverse)"},{"line_number":725,"context_line":"            self.type_manager.extend_networks_dict_provider(context, nets)"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"            nets \u003d self._filter_nets_provider(context, nets, filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a7b0d38_8fffb0a9","side":"PARENT","line":724,"range":{"start_line":722,"start_character":12,"end_line":724,"end_character":72},"updated":"2015-12-24 06:53:41.000000000","message":"We expected this method calls super class. Even if the logic is changed in super class, this method can get the change by the calling super(). Should we add useful attribute into the result which super class returned.","commit_id":"aa285ff82c781a69c4b2172a7f7b83bcf30d7fc0"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"51bbff4e1d0c6bde7ba24486d31f2c1647ef78ca","unresolved":false,"context_lines":[{"line_number":719,"context_line":"                     sorts\u003dNone, limit\u003dNone, marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":720,"context_line":"        session \u003d context.session"},{"line_number":721,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":722,"context_line":"            nets \u003d super(Ml2Plugin,"},{"line_number":723,"context_line":"                         self).get_networks(context, filters, None, sorts,"},{"line_number":724,"context_line":"                                            limit, marker, page_reverse)"},{"line_number":725,"context_line":"            self.type_manager.extend_networks_dict_provider(context, nets)"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"            nets \u003d self._filter_nets_provider(context, nets, filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_54a2744c","side":"PARENT","line":724,"range":{"start_line":722,"start_character":12,"end_line":724,"end_character":72},"in_reply_to":"1a7b0d38_202a4b2d","updated":"2016-01-05 01:05:24.000000000","message":"I didn\u0027t mean to add it in db_base_plugin_v2.py. I mean, can we add \u0027ml2_network_segments\u0027 the result(nets) after calling super class?","commit_id":"aa285ff82c781a69c4b2172a7f7b83bcf30d7fc0"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"a4b9db2bb5370faf19fab55373a5ee04e84ba5fe","unresolved":false,"context_lines":[{"line_number":719,"context_line":"                     sorts\u003dNone, limit\u003dNone, marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":720,"context_line":"        session \u003d context.session"},{"line_number":721,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":722,"context_line":"            nets \u003d super(Ml2Plugin,"},{"line_number":723,"context_line":"                         self).get_networks(context, filters, None, sorts,"},{"line_number":724,"context_line":"                                            limit, marker, page_reverse)"},{"line_number":725,"context_line":"            self.type_manager.extend_networks_dict_provider(context, nets)"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"            nets \u003d self._filter_nets_provider(context, nets, filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a7b0d38_202a4b2d","side":"PARENT","line":724,"range":{"start_line":722,"start_character":12,"end_line":724,"end_character":72},"in_reply_to":"1a7b0d38_8fffb0a9","updated":"2015-12-24 08:51:05.000000000","message":"the table \u0027ml2_network_segments\u0027 is just for ml2 plugin, so I think we can\u0027t add the new logic to super class in db_base_plugin_v2.py","commit_id":"aa285ff82c781a69c4b2172a7f7b83bcf30d7fc0"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"1ecb309cd77936d45d3ad151cfcca7f334205b04","unresolved":false,"context_lines":[{"line_number":719,"context_line":"                     sorts\u003dNone, limit\u003dNone, marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":720,"context_line":"        session \u003d context.session"},{"line_number":721,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":722,"context_line":"            nets \u003d super(Ml2Plugin,"},{"line_number":723,"context_line":"                         self).get_networks(context, filters, None, sorts,"},{"line_number":724,"context_line":"                                            limit, marker, page_reverse)"},{"line_number":725,"context_line":"            self.type_manager.extend_networks_dict_provider(context, nets)"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"            nets \u003d self._filter_nets_provider(context, nets, filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_a4ce1b2c","side":"PARENT","line":724,"range":{"start_line":722,"start_character":12,"end_line":724,"end_character":72},"in_reply_to":"fa69d971_54a2744c","updated":"2016-01-05 02:43:48.000000000","message":"hi Hirofumi Ichihara, thx for your suggestion, but I think we can\u0027t add \u0027ml2_network_segments\u0027 the result(nets) after calling super class, for example: there are 3 networks, one is vlan type, others are vxlan, if we select the network with vxlan type filter and 2 limit, the result that super class will include one vlan network and one vxlan network, so we can\u0027t get correct result, what do you think?","commit_id":"aa285ff82c781a69c4b2172a7f7b83bcf30d7fc0"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"dd0c4bdcfc9afa13a3bba4f11e1b1b17ba846b9e","unresolved":false,"context_lines":[{"line_number":719,"context_line":"                     sorts\u003dNone, limit\u003dNone, marker\u003dNone, page_reverse\u003dFalse):"},{"line_number":720,"context_line":"        session \u003d context.session"},{"line_number":721,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":722,"context_line":"            nets \u003d super(Ml2Plugin,"},{"line_number":723,"context_line":"                         self).get_networks(context, filters, None, sorts,"},{"line_number":724,"context_line":"                                            limit, marker, page_reverse)"},{"line_number":725,"context_line":"            self.type_manager.extend_networks_dict_provider(context, nets)"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"            nets \u003d self._filter_nets_provider(context, nets, filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_f7c35c55","side":"PARENT","line":724,"range":{"start_line":722,"start_character":12,"end_line":724,"end_character":72},"in_reply_to":"fa69d971_a4ce1b2c","updated":"2016-01-05 10:34:21.000000000","message":"Sorry, I misunderstood behavior of \"Pagination\". We cannot get resource info with both filter and limit now. I guess that it\u0027s a issue in API layer.\n\nI confirmed this patch in my env but I cannot.\nhttp://paste.openstack.org/show/483012/","commit_id":"aa285ff82c781a69c4b2172a7f7b83bcf30d7fc0"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"d1f2034538b8f8e3ae1a18908a4ca4c7ce8436dc","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                          fanout\u003dFalse)"},{"line_number":209,"context_line":"        return self.conn_reports.consume_in_threads()"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def _filter_nets_provider(self, context, networks, filters):"},{"line_number":212,"context_line":"        return [network"},{"line_number":213,"context_line":"                for network in networks"},{"line_number":214,"context_line":"                if self.type_manager.network_matches_filters(network, filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a7b0d38_4f2a2880","line":211,"range":{"start_line":211,"start_character":8,"end_line":211,"end_character":29},"updated":"2015-12-24 06:53:41.000000000","message":"This method is never called. Could you configure removing it?","commit_id":"e44ae3d9bf5b10a5511a35bbe9aaa3492e9810c4"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"a4b9db2bb5370faf19fab55373a5ee04e84ba5fe","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                          fanout\u003dFalse)"},{"line_number":209,"context_line":"        return self.conn_reports.consume_in_threads()"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def _filter_nets_provider(self, context, networks, filters):"},{"line_number":212,"context_line":"        return [network"},{"line_number":213,"context_line":"                for network in networks"},{"line_number":214,"context_line":"                if self.type_manager.network_matches_filters(network, filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a7b0d38_c021074f","line":211,"range":{"start_line":211,"start_character":8,"end_line":211,"end_character":29},"in_reply_to":"1a7b0d38_4f2a2880","updated":"2015-12-24 08:51:05.000000000","message":"agree","commit_id":"e44ae3d9bf5b10a5511a35bbe9aaa3492e9810c4"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"4f741086ba02a643ad094eff07b567fe2beb2aec","unresolved":false,"context_lines":[{"line_number":786,"context_line":""},{"line_number":787,"context_line":"    def _get_networks_query(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":788,"context_line":"                            sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":789,"context_line":"                            page_reverse\u003dFalse):"},{"line_number":790,"context_line":"        marker_obj \u003d self._get_marker_obj(context, \u0027network\u0027, limit, marker)"},{"line_number":791,"context_line":"        network \u003d models_v2.Network"},{"line_number":792,"context_line":"        network_segment \u003d models.NetworkSegment"}],"source_content_type":"text/x-python","patch_set":11,"id":"da0c15f0_bd3a8c96","line":789,"updated":"2016-03-28 07:37:17.000000000","message":"We can\u0027t override _get_networks_query. That\u0027s not a sustainable way to make these kinds of changes. There should be a way to accomplish this using the db query hooks. If the DB hooks do not provide what is necessary, we should change the hooks to allow what is required.\n\nSee \u0027register_model_query_hook\u0027 in common_db_mixin","commit_id":"8997ecfb513b49897a907174ee396805d9cdc90a"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"6b4ba2de066a1974192d3f2098503548b3240141","unresolved":false,"context_lines":[{"line_number":786,"context_line":""},{"line_number":787,"context_line":"    def _get_networks_query(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":788,"context_line":"                            sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":789,"context_line":"                            page_reverse\u003dFalse):"},{"line_number":790,"context_line":"        marker_obj \u003d self._get_marker_obj(context, \u0027network\u0027, limit, marker)"},{"line_number":791,"context_line":"        network \u003d models_v2.Network"},{"line_number":792,"context_line":"        network_segment \u003d models.NetworkSegment"}],"source_content_type":"text/x-python","patch_set":11,"id":"da0c15f0_80863c63","line":789,"in_reply_to":"da0c15f0_bd3a8c96","updated":"2016-03-28 08:44:51.000000000","message":"kevin, agree with you, thx for your suggestion","commit_id":"8997ecfb513b49897a907174ee396805d9cdc90a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"189eb6168bd17a05bf78953f16f734439701f95c","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            self.type_manager.extend_network_dict_provider(context, result)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"        return self._fields(result, fields)"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    def _ml2_networks_provider_query_hook(self, context, original_model,"},{"line_number":751,"context_line":"                                          query):"},{"line_number":752,"context_line":"        query \u003d query.outerjoin("}],"source_content_type":"text/x-python","patch_set":12,"id":"1a122d0e_bcfe1303","line":749,"updated":"2016-04-23 02:58:38.000000000","message":"How about registering the model query hook in db/segments_db.py? This query is useful for other plugins which implements provider network.","commit_id":"0f6a7e1358872cb743e607011553c09a45e0b47a"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"41616f98bd55632c16053f285d2700d8b046e027","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            self.type_manager.extend_network_dict_provider(context, result)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"        return self._fields(result, fields)"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    def _ml2_networks_provider_query_hook(self, context, original_model,"},{"line_number":751,"context_line":"                                          query):"},{"line_number":752,"context_line":"        query \u003d query.outerjoin("}],"source_content_type":"text/x-python","patch_set":12,"id":"1a122d0e_22aaded2","line":749,"in_reply_to":"1a122d0e_bcfe1303","updated":"2016-04-23 06:56:33.000000000","message":"agree","commit_id":"0f6a7e1358872cb743e607011553c09a45e0b47a"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8a11765a8959270d29b758bf9c13bdc2c68638ed","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    def _filter_nets_provider(self, context, networks, filters):"},{"line_number":255,"context_line":"        return [network"},{"line_number":256,"context_line":"                for network in networks"},{"line_number":257,"context_line":"                if self.type_manager.network_matches_filters(network, filters)"},{"line_number":258,"context_line":"                ]"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def _check_mac_update_allowed(self, orig_port, port, binding):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7aa08908_4a3d29dc","side":"PARENT","line":257,"updated":"2016-06-14 00:43:49.000000000","message":"there are a couple of related methods to get rid of in the type manager as well: \u0027_match_segment\u0027, \u0027network_matches_filters\u0027","commit_id":"d8ae9cf4755416ca65108112a60e8b2e67607daf"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"f4d214bbb9da396f96ff37336844474409681a6c","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    def _filter_nets_provider(self, context, networks, filters):"},{"line_number":255,"context_line":"        return [network"},{"line_number":256,"context_line":"                for network in networks"},{"line_number":257,"context_line":"                if self.type_manager.network_matches_filters(network, filters)"},{"line_number":258,"context_line":"                ]"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def _check_mac_update_allowed(self, orig_port, port, binding):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7aa08908_da00c8ad","side":"PARENT","line":257,"in_reply_to":"7aa08908_4a3d29dc","updated":"2016-06-14 02:42:27.000000000","message":"agree, thx for your suggestion","commit_id":"d8ae9cf4755416ca65108112a60e8b2e67607daf"}],"neutron/tests/unit/plugins/ml2/test_plugin.py":[{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"54d11f444e03c6653d25cc1ab9e36c4cad5a5e91","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            self.assertEqual(expected_net[attr], network[attr])"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _test_list_with_pagination_and_filter(self, resource, filter, limit):"},{"line_number":280,"context_line":"        resources \u003d \u0027%ss\u0027 % resource"},{"line_number":281,"context_line":"        query_str \u003d (\"limit\u003d%s\u0026%s\") % (limit, filter)"},{"line_number":282,"context_line":"        req \u003d self.new_list_request(resources, params\u003dquery_str)"},{"line_number":283,"context_line":"        res \u003d self.deserialize(self.fmt, req.get_response(self.api))"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_fe87d5b2","line":280,"updated":"2015-09-03 21:46:15.000000000","message":"I think it\u0027s fine to pass in the resource name, but it is confusing to add an \u0027s\u0027 to the end of it.  It would be more simple and less confusing if the caller passed in the full name of the resource (like \"networks\", etc), so that \u0027s\u0027 doesn\u0027t need to be added to it.","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"7a87edd6d85e91df48dc64f61870b3de2f48c607","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            self.assertEqual(expected_net[attr], network[attr])"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _test_list_with_pagination_and_filter(self, resource, filter, limit):"},{"line_number":280,"context_line":"        resources \u003d \u0027%ss\u0027 % resource"},{"line_number":281,"context_line":"        query_str \u003d (\"limit\u003d%s\u0026%s\") % (limit, filter)"},{"line_number":282,"context_line":"        req \u003d self.new_list_request(resources, params\u003dquery_str)"},{"line_number":283,"context_line":"        res \u003d self.deserialize(self.fmt, req.get_response(self.api))"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_0e7a4977","line":280,"in_reply_to":"da20952f_fe87d5b2","updated":"2015-09-07 03:39:59.000000000","message":"agree","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"3f8c4829028645b54b6abd80a8159cdfc32d82f3","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        self._create_and_verify_networks(self.pnets)"},{"line_number":288,"context_line":"        networks \u003d self._test_list_with_pagination_and_filter("},{"line_number":289,"context_line":"            \u0027network\u0027, \u0027provider:physical_network\u003dphysnet2\u0027, 2)"},{"line_number":290,"context_line":"        self.assertEqual(2, len(networks))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def test_list_mpnetworks_with_segmentation_id(self):"},{"line_number":293,"context_line":"        self._create_and_verify_networks(self.nets)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_32410164","line":290,"updated":"2015-09-03 21:41:16.000000000","message":"it doesn\u0027t test page_reverse nor provider + non-provider filters","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"7a87edd6d85e91df48dc64f61870b3de2f48c607","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        self._create_and_verify_networks(self.pnets)"},{"line_number":288,"context_line":"        networks \u003d self._test_list_with_pagination_and_filter("},{"line_number":289,"context_line":"            \u0027network\u0027, \u0027provider:physical_network\u003dphysnet2\u0027, 2)"},{"line_number":290,"context_line":"        self.assertEqual(2, len(networks))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def test_list_mpnetworks_with_segmentation_id(self):"},{"line_number":293,"context_line":"        self._create_and_verify_networks(self.nets)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_ee9355a1","line":290,"in_reply_to":"da20952f_32410164","updated":"2015-09-07 03:39:59.000000000","message":"Done","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"54d11f444e03c6653d25cc1ab9e36c4cad5a5e91","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        networks \u003d self._test_list_with_pagination_and_filter("},{"line_number":289,"context_line":"            \u0027network\u0027, \u0027provider:physical_network\u003dphysnet2\u0027, 2)"},{"line_number":290,"context_line":"        self.assertEqual(2, len(networks))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def test_list_mpnetworks_with_segmentation_id(self):"},{"line_number":293,"context_line":"        self._create_and_verify_networks(self.nets)"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_dedc51e6","line":291,"updated":"2015-09-03 21:46:15.000000000","message":"This test case should verify not only that the two networks were returned but also that they have the proper attributes set, like the other test methods in this class do (_create_and_verify_networks, test_list_networks_with_segmentation_id, test_list_mpnetworks_with_segmentation_id).  Add something like the following: \n\n        self.assertEqual(2, len(networks))\n        if networks[0][\u0027name\u0027] \u003d\u003d \u0027net2\u0027:\n            result_net2 \u003d networks[0]\n            result_net3 \u003d networks[1]\n        else:\n            result_net2 \u003d networks[1]\n            result_net3 \u003d networks[0]\n\n        for attr in pnet.ATTRIBUTES:\n            self.assertEqual(result_net2[attr], self.pnets[1][attr])\n            self.assertEqual(result_net3[attr], self.pnets[2][attr])","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"7a87edd6d85e91df48dc64f61870b3de2f48c607","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        networks \u003d self._test_list_with_pagination_and_filter("},{"line_number":289,"context_line":"            \u0027network\u0027, \u0027provider:physical_network\u003dphysnet2\u0027, 2)"},{"line_number":290,"context_line":"        self.assertEqual(2, len(networks))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def test_list_mpnetworks_with_segmentation_id(self):"},{"line_number":293,"context_line":"        self._create_and_verify_networks(self.nets)"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_ae89dd70","line":291,"in_reply_to":"da20952f_dedc51e6","updated":"2015-09-07 03:39:59.000000000","message":"thx for your good  suggestion","commit_id":"293fb8387e0f69b1a1f5e1aef2ce01d5057d48f3"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"f659a3c6d99a1f1acb1a96b0c4c838c680c13f73","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            result_net3 \u003d networks[0]"},{"line_number":314,"context_line":"        for attr in pnet.ATTRIBUTES:"},{"line_number":315,"context_line":"            self.assertEqual(result_net2[attr], self.pnets[1][attr])"},{"line_number":316,"context_line":"            self.assertEqual(result_net3[attr], self.pnets[2][attr])"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def test_list_mpnetworks_with_segmentation_id(self):"},{"line_number":319,"context_line":"        self._create_and_verify_networks(self.nets)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_f2fbd045","line":316,"updated":"2015-12-01 10:36:00.000000000","message":"It\u0027s better to use the pattern \"self.assertEqual(expected, observed)\"[1].\n\n[1]: https://github.com/openstack/neutron/blob/master/doc/source/devref/effective_neutron.rst#mocking-and-testing","commit_id":"6bd9a379344276ab74efe131438f24a166b1857b"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"56d3f6eb1cb30233e22f8d52371f7a3b2b4f9609","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            result_net3 \u003d networks[0]"},{"line_number":314,"context_line":"        for attr in pnet.ATTRIBUTES:"},{"line_number":315,"context_line":"            self.assertEqual(result_net2[attr], self.pnets[1][attr])"},{"line_number":316,"context_line":"            self.assertEqual(result_net3[attr], self.pnets[2][attr])"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def test_list_mpnetworks_with_segmentation_id(self):"},{"line_number":319,"context_line":"        self._create_and_verify_networks(self.nets)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_26411d3a","line":316,"in_reply_to":"9a8ffd7b_f2fbd045","updated":"2015-12-01 10:38:05.000000000","message":"agree","commit_id":"6bd9a379344276ab74efe131438f24a166b1857b"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"15cfa4c3a293eea9dbd7c091bb07619be4c82193","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        res \u003d self.deserialize(self.fmt, req.get_response(self.api))"},{"line_number":310,"context_line":"        return res[resources]"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def test_list_networks_with_pagination_provider(self):"},{"line_number":313,"context_line":"        self._create_and_verify_networks(self.pnets)"},{"line_number":314,"context_line":"        networks \u003d self._test_list_with_pagination_and_filter("},{"line_number":315,"context_line":"            \u0027networks\u0027, \u0027provider:physical_network\u003dphysnet2\u0027, 2)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9abb7d3a_96e16a9d","line":312,"range":{"start_line":312,"start_character":8,"end_line":312,"end_character":51},"updated":"2016-05-30 04:11:04.000000000","message":"can u add more test cases on type,  vlan and even some combination?","commit_id":"28fd9915826fba8545b90ca5cc347785a4af0e7f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae68b60def8e58940ab8079870bdfd677d0f430c","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        network \u003d networks[\u0027networks\u0027][0]"},{"line_number":304,"context_line":"        for attr in pnet.ATTRIBUTES:"},{"line_number":305,"context_line":"            self.assertEqual(expected_net[attr], network[attr])"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def _test_list_with_pagination_and_filter(self, resources, filter, limit):"},{"line_number":308,"context_line":"        query_str \u003d (\"limit\u003d%s\u0026%s\") % (limit, filter)"},{"line_number":309,"context_line":"        req \u003d self.new_list_request(resources, params\u003dquery_str)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7aa08908_e27b00f3","line":306,"updated":"2016-06-15 13:08:54.000000000","message":"How about adding a new test module db/test_providernet_db.py.\nBy doing so, we can easily know where a corresponding test exists.\n\nI know we need a plugin with provider network implementation\nand you need ML2 plugin to test this, but I think it is better to match the main code and the test module.\n\nI would like to know opinions from other reviewers.","commit_id":"f3a6c32a641b08b691a20350bcfd4cc439f27b1e"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"c383e3a0bd4c10a6de646cfa5818aa73ea87f37b","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        network \u003d networks[\u0027networks\u0027][0]"},{"line_number":304,"context_line":"        for attr in pnet.ATTRIBUTES:"},{"line_number":305,"context_line":"            self.assertEqual(expected_net[attr], network[attr])"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def _test_list_with_pagination_and_filter(self, resources, filter, limit):"},{"line_number":308,"context_line":"        query_str \u003d (\"limit\u003d%s\u0026%s\") % (limit, filter)"},{"line_number":309,"context_line":"        req \u003d self.new_list_request(resources, params\u003dquery_str)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_ee670db5","line":306,"in_reply_to":"7aa08908_e27b00f3","updated":"2016-06-29 08:43:28.000000000","message":"thx for your suggestion, let me try it!","commit_id":"f3a6c32a641b08b691a20350bcfd4cc439f27b1e"}]}
