)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"bede852add542ab7b111d2020f7fb76385220f10","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filter port-list based on security_groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allow user to filter ports depending on secuirty groups."},{"line_number":10,"context_line":"Closes-Bug: 1405057"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I528719d895fc1d89f74e2ee85b9ddc470323c601"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"df87a7cf_f665f31e","line":9,"range":{"start_line":9,"start_character":51,"end_line":9,"end_character":59},"updated":"2017-12-11 15:37:41.000000000","message":"security","commit_id":"c9e03e640a34ca2f2bb7156acb34b23c9e78e545"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"34c580b538197bb8d701490757e343ad3f7544a5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filter port-list based on security_groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allow user to filter ports depending on security groups."},{"line_number":10,"context_line":"Closes-Bug: 1405057"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I528719d895fc1d89f74e2ee85b9ddc470323c601"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"df87a7cf_4bac2dec","line":9,"range":{"start_line":9,"start_character":11,"end_line":9,"end_character":16},"updated":"2017-12-11 19:26:27.000000000","message":"allows","commit_id":"026ca0e04e009ad1b42189aa9db84bd217667594"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"4e50396f4ad509c1d4cb6d00990f854fcfbe2223","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Filter port-list based on security_groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows user to filter ports depending on secuirty groups."},{"line_number":10,"context_line":"In addtion to that I added unit test to verfiy this change."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: 1405057"},{"line_number":13,"context_line":"Change-Id: I528719d895fc1d89f74e2ee85b9ddc470323c601"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9f91af0f_5904e37b","line":10,"updated":"2017-12-28 10:58:38.000000000","message":"typo: addtion -\u003e addition","commit_id":"d56b78cc51c4e96940c99b079f3e0f3e96ea9f9a"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"c7f47e52b9e53c687e7ecbffd73d214ef4ef73b7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Filter port-list based on security_groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows user to filter ports depending on secuirty groups."},{"line_number":10,"context_line":"In addtion to that I added unit test to verfiy this change."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: 1405057"},{"line_number":13,"context_line":"Change-Id: I528719d895fc1d89f74e2ee85b9ddc470323c601"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9f91af0f_94679226","line":10,"in_reply_to":"9f91af0f_5904e37b","updated":"2017-12-28 12:51:36.000000000","message":"Done","commit_id":"d56b78cc51c4e96940c99b079f3e0f3e96ea9f9a"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"d74b455009b7338a52c2daab6c6ccd5d0a5b330f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filter port-list based on security_groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows user to filter ports depending on security groups."},{"line_number":10,"context_line":"In addition to that I added unit test to verify this change."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: 1405057"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7f96bb07_f82a6ae5","line":9,"range":{"start_line":9,"start_character":18,"end_line":9,"end_character":22},"updated":"2018-01-12 02:35:58.000000000","message":"users","commit_id":"048d931519b7e77e0183ea92d063fe9e9f041fdc"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"77765d09b8f76f7685e75f1aa0cb9becab15a020","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filter port-list based on security_groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows user to filter ports depending on security groups."},{"line_number":10,"context_line":"In addition to that I added unit test to verify this change."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: 1405057"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7f96bb07_4a1a997d","line":9,"range":{"start_line":9,"start_character":18,"end_line":9,"end_character":22},"in_reply_to":"7f96bb07_f82a6ae5","updated":"2018-01-12 08:44:49.000000000","message":"Done","commit_id":"048d931519b7e77e0183ea92d063fe9e9f041fdc"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"d74b455009b7338a52c2daab6c6ccd5d0a5b330f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Filter port-list based on security_groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows user to filter ports depending on security groups."},{"line_number":10,"context_line":"In addition to that I added unit test to verify this change."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: 1405057"},{"line_number":13,"context_line":"Change-Id: I528719d895fc1d89f74e2ee85b9ddc470323c601"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7f96bb07_b834e24b","line":10,"range":{"start_line":10,"start_character":28,"end_line":10,"end_character":37},"updated":"2018-01-12 02:35:58.000000000","message":"a unit test","commit_id":"048d931519b7e77e0183ea92d063fe9e9f041fdc"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"77765d09b8f76f7685e75f1aa0cb9becab15a020","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Filter port-list based on security_groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows user to filter ports depending on security groups."},{"line_number":10,"context_line":"In addition to that I added unit test to verify this change."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: 1405057"},{"line_number":13,"context_line":"Change-Id: I528719d895fc1d89f74e2ee85b9ddc470323c601"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7f96bb07_6a1f556c","line":10,"range":{"start_line":10,"start_character":28,"end_line":10,"end_character":37},"in_reply_to":"7f96bb07_b834e24b","updated":"2018-01-12 08:44:49.000000000","message":"Done","commit_id":"048d931519b7e77e0183ea92d063fe9e9f041fdc"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3057d4f153ca69e54db51b80039608d54fc2d1be","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Filter port-list based on security_groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows users to filter ports depending on security groups."},{"line_number":10,"context_line":"In addition to that I added a unit test to verify this change."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: 1405057"},{"line_number":13,"context_line":"Change-Id: I528719d895fc1d89f74e2ee85b9ddc470323c601"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"5f93b717_f7be37ac","line":10,"updated":"2018-02-02 13:59:14.000000000","message":"Could you mention that moving security_groups_port_filtering_lib.py into neutron-lib is a TODO?","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"3a3b53df8bc9c355accb6c207fc39670470b49a6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Filter port-list based on security_groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows users to filter ports depending on security groups."},{"line_number":10,"context_line":"In addition to that I added a unit test to verify this change."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: 1405057"},{"line_number":13,"context_line":"Change-Id: I528719d895fc1d89f74e2ee85b9ddc470323c601"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"5f93b717_050d9be6","line":10,"in_reply_to":"5f93b717_f7be37ac","updated":"2018-02-03 13:33:07.000000000","message":"Done","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"}],"neutron/db/db_base_plugin_v2.py":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"bede852add542ab7b111d2020f7fb76385220f10","unresolved":false,"context_lines":[{"line_number":1390,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1391,"context_line":"                                      filters[\u0027security_groups\u0027]})"},{"line_number":1392,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1393,"context_line":"                del (filters[\u0027security_groups\u0027])"},{"line_number":1394,"context_line":"        marker_obj \u003d ndb_utils.get_marker_obj(self, context, \u0027port\u0027,"},{"line_number":1395,"context_line":"                                              limit, marker)"},{"line_number":1396,"context_line":"        query \u003d self._get_ports_query(context, filters\u003dfilters,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_f9016406","line":1393,"range":{"start_line":1393,"start_character":16,"end_line":1393,"end_character":48},"updated":"2017-12-11 15:37:41.000000000","message":"good thing this delete. But this delete can be outside the inner if loop","commit_id":"c9e03e640a34ca2f2bb7156acb34b23c9e78e545"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"34c580b538197bb8d701490757e343ad3f7544a5","unresolved":false,"context_lines":[{"line_number":1390,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1391,"context_line":"                                      filters[\u0027security_groups\u0027]})"},{"line_number":1392,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1393,"context_line":"                del (filters[\u0027security_groups\u0027])"},{"line_number":1394,"context_line":"        marker_obj \u003d ndb_utils.get_marker_obj(self, context, \u0027port\u0027,"},{"line_number":1395,"context_line":"                                              limit, marker)"},{"line_number":1396,"context_line":"        query \u003d self._get_ports_query(context, filters\u003dfilters,"}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_6b7c9171","line":1393,"range":{"start_line":1393,"start_character":16,"end_line":1393,"end_character":48},"updated":"2017-12-11 19:26:27.000000000","message":"Consider using:\n\nfilters.pop(\u0027security_groups\u0027)","commit_id":"026ca0e04e009ad1b42189aa9db84bd217667594"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"041bc42281d18c698b680097f43d5fcc31ed9723","unresolved":false,"context_lines":[{"line_number":1383,"context_line":"    def get_ports(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":1384,"context_line":"                  sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":1385,"context_line":"                  page_reverse\u003dFalse):"},{"line_number":1386,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1387,"context_line":"            if \u0027security-group\u0027 in self.supported_extension_aliases:"},{"line_number":1388,"context_line":"                port_bindings \u003d securitygroups_db.SecurityGroupDbMixin().\\"},{"line_number":1389,"context_line":"                    _get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_63731582","line":1386,"updated":"2017-12-21 21:30:09.000000000","message":"It doesn\u0027t seem to me that the correct place to add this code is the DB plugin layer. This layer doesn\u0027t have knowledge of the security group concept (search for the word security and you won\u0027t find it). The core plugin, though, knows about security groups. In fact, it uses the method that you are calling in L1389: https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/plugin.py#L1277. So I think we need to add a get_ports method to the ML2 plugin, where the filters will be pre-processed first and then the get_ports method here is called. You won\u0027t need to check if \u0027security-group\u0027 is in supported_extension_aliases","commit_id":"5879f8de8ec1d1457acab3a233e83c6973ff52a9"}],"neutron/extensions/security_groups_port_filtering.py":[{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"ad0ce1baf4507ea0fd067a98dbe11d77fb6da806","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2017 Huawei Technology, Inc.  All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f91af0f_01862614","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2018-01-10 01:14:47.000000000","message":"2018?","commit_id":"f571b0688037b3e10900d550a6d0326f534a274d"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"ad0ce1baf4507ea0fd067a98dbe11d77fb6da806","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2017 Huawei Technology, Inc.  All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f91af0f_c17b5e25","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":44},"updated":"2018-01-10 01:14:47.000000000","message":"From your email address I guess this should be changed?","commit_id":"f571b0688037b3e10900d550a6d0326f534a274d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"da55b276729686f579c37a61c0409b5299de491e","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class Security_groups_port_filtering(extensions.APIExtensionDescriptor):"},{"line_number":21,"context_line":"    \"\"\"Extension class supporting security group filtering.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    api_definition \u003d apidef"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f96bb07_9d9a036c","line":21,"updated":"2018-01-15 07:52:29.000000000","message":"IMHO it should be something like \"supporting ports filtering based on used security groups\" or something like that","commit_id":"c4d05167948d085024c9f035cebe8524bb0565bc"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"38c2c31427cafea96bb7d9a86ac6a2a572cefeb9","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class Security_groups_port_filtering(extensions.APIExtensionDescriptor):"},{"line_number":21,"context_line":"    \"\"\"Extension class supporting security group filtering.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    api_definition \u003d apidef"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f96bb07_ef476976","line":21,"in_reply_to":"7f96bb07_9d9a036c","updated":"2018-01-17 17:25:28.000000000","message":"Done","commit_id":"c4d05167948d085024c9f035cebe8524bb0565bc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"915240faf0cecf1f0510552ffa3207c3995850c1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2018 Nokia.  All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_923be5e9","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":26},"updated":"2018-01-26 20:47:52.000000000","message":"this is changed between PS23 and 24. Is it intentional?","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"113b2f04fb022071231281c22a11d23938e7bb61","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2018 Nokia.  All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_c8d3fa37","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":26},"in_reply_to":"5f93b717_686506e1","updated":"2018-01-26 22:05:48.000000000","message":"ok :)","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"45d61fe38a2a9ddf88cb9cec5412b128cae223bc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2018 Nokia.  All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_686506e1","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":26},"in_reply_to":"5f93b717_923be5e9","updated":"2018-01-26 21:51:23.000000000","message":"Yes.","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"}],"neutron/extensions/security_groups_port_filtering_lib.py":[{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"ad0ce1baf4507ea0fd067a98dbe11d77fb6da806","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"\"\"\""},{"line_number":14,"context_line":"TODO(hongbin): This module should be deleted once neutron-lib containing"},{"line_number":15,"context_line":"https://review.openstack.org/#/c/527105/ change is released."},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# The alias of the extension."}],"source_content_type":"text/x-python","patch_set":7,"id":"9f91af0f_c1a03e93","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":60},"updated":"2018-01-10 01:14:47.000000000","message":"You didn\u0027t provide a change to neutron-lib. This comment is invalid.","commit_id":"f571b0688037b3e10900d550a6d0326f534a274d"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"ad0ce1baf4507ea0fd067a98dbe11d77fb6da806","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# The alias of the extension."},{"line_number":19,"context_line":"ALIAS \u003d \u0027security-groups\u0027"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# Whether or not this extension is simply signaling behavior to the user"},{"line_number":22,"context_line":"# or it actively modifies the attribute map."}],"source_content_type":"text/x-python","patch_set":7,"id":"9f91af0f_81a6b6aa","line":19,"range":{"start_line":19,"start_character":8,"end_line":19,"end_character":25},"updated":"2018-01-10 01:14:47.000000000","message":"Is it a good name for feature?","commit_id":"f571b0688037b3e10900d550a6d0326f534a274d"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"d74b455009b7338a52c2daab6c6ccd5d0a5b330f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"DESCRIPTION \u003d \"Provides secuirty groups filtering when listing ports\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# A timestamp of when the extension was introduced."},{"line_number":35,"context_line":"UPDATED_TIMESTAMP \u003d \"2018-01-9T09:00:00-00:00\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"# The resource attribute map for the extension."},{"line_number":38,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f96bb07_98f6c68f","line":35,"range":{"start_line":35,"start_character":21,"end_line":35,"end_character":30},"updated":"2018-01-12 02:35:58.000000000","message":"We use the format YYYY-MM-DD","commit_id":"048d931519b7e77e0183ea92d063fe9e9f041fdc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e4a452326a275b9f913d8bd1ac92c707e4562b4a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# The alias of the extension."},{"line_number":14,"context_line":"ALIAS \u003d \u0027security-groups-filtering\u0027"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# Whether or not this extension is simply signaling behavior to the user"},{"line_number":17,"context_line":"# or it actively modifies the attribute map."}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_c540da38","line":14,"updated":"2018-01-12 08:55:46.000000000","message":"maybe something like \"port-security-groups-filtering\"? this alias isn\u0027t good IMO","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"06af0d4eeea80c486c7746678b2e4c99d229f5fd","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# The alias of the extension."},{"line_number":14,"context_line":"ALIAS \u003d \u0027security-groups-filtering\u0027"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# Whether or not this extension is simply signaling behavior to the user"},{"line_number":17,"context_line":"# or it actively modifies the attribute map."}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_d6808c8e","line":14,"in_reply_to":"7f96bb07_c540da38","updated":"2018-01-12 15:13:36.000000000","message":"Done","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e4a452326a275b9f913d8bd1ac92c707e4562b4a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"# The name of the extension."},{"line_number":29,"context_line":"NAME \u003d \u0027Secuirty groups filtering\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The description of the extension."},{"line_number":32,"context_line":"DESCRIPTION \u003d \"Provides secuirty groups filtering when listing ports\""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_657b068c","line":29,"updated":"2018-01-12 08:55:46.000000000","message":"AFAIU it is not security groups filtering but ports filtering based on security groups which ports are using, right?","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"06af0d4eeea80c486c7746678b2e4c99d229f5fd","unresolved":false,"context_lines":[{"line_number":26,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"# The name of the extension."},{"line_number":29,"context_line":"NAME \u003d \u0027Secuirty groups filtering\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The description of the extension."},{"line_number":32,"context_line":"DESCRIPTION \u003d \"Provides secuirty groups filtering when listing ports\""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_f67b48bb","line":29,"in_reply_to":"7f96bb07_657b068c","updated":"2018-01-12 15:13:36.000000000","message":"Done","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"8ae88ef189c2aed54b8a225338280879c2f2f963","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"7f96bb07_68c5da8d","updated":"2018-01-24 05:06:49.000000000","message":"Did you ever push a patch to neutron-lib with this extension definition?","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"362f3c671b2eba1f8a19abb39b6a64ddb1c7c489","unresolved":false,"context_lines":[{"line_number":26,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"# The name of the extension."},{"line_number":29,"context_line":"NAME \u003d \u0027Port filtering on secuirty groups\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The description of the extension."},{"line_number":32,"context_line":"DESCRIPTION \u003d \"Provides secuirty groups filtering when listing ports\""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_b7c3ce37","line":29,"range":{"start_line":29,"start_character":26,"end_line":29,"end_character":34},"updated":"2018-02-02 14:35:04.000000000","message":"security","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"3a3b53df8bc9c355accb6c207fc39670470b49a6","unresolved":false,"context_lines":[{"line_number":26,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"# The name of the extension."},{"line_number":29,"context_line":"NAME \u003d \u0027Port filtering on secuirty groups\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The description of the extension."},{"line_number":32,"context_line":"DESCRIPTION \u003d \"Provides secuirty groups filtering when listing ports\""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_2510d7ff","line":29,"range":{"start_line":29,"start_character":26,"end_line":29,"end_character":34},"in_reply_to":"5f93b717_b7c3ce37","updated":"2018-02-03 13:33:07.000000000","message":"Done","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"362f3c671b2eba1f8a19abb39b6a64ddb1c7c489","unresolved":false,"context_lines":[{"line_number":29,"context_line":"NAME \u003d \u0027Port filtering on secuirty groups\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The description of the extension."},{"line_number":32,"context_line":"DESCRIPTION \u003d \"Provides secuirty groups filtering when listing ports\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# A timestamp of when the extension was introduced."},{"line_number":35,"context_line":"UPDATED_TIMESTAMP \u003d \"2018-01-09T09:00:00-00:00\""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_d7be9aac","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":32},"updated":"2018-02-02 14:35:04.000000000","message":"ditto","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"3a3b53df8bc9c355accb6c207fc39670470b49a6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"NAME \u003d \u0027Port filtering on secuirty groups\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The description of the extension."},{"line_number":32,"context_line":"DESCRIPTION \u003d \"Provides secuirty groups filtering when listing ports\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# A timestamp of when the extension was introduced."},{"line_number":35,"context_line":"UPDATED_TIMESTAMP \u003d \"2018-01-09T09:00:00-00:00\""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_c5fa53bb","line":32,"range":{"start_line":32,"start_character":24,"end_line":32,"end_character":32},"in_reply_to":"5f93b717_d7be9aac","updated":"2018-02-03 13:33:07.000000000","message":"Done","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3057d4f153ca69e54db51b80039608d54fc2d1be","unresolved":false,"context_lines":[{"line_number":35,"context_line":"UPDATED_TIMESTAMP \u003d \"2018-01-09T09:00:00-00:00\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"# The resource attribute map for the extension."},{"line_number":38,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":39,"context_line":"}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# The subresource attribute map for the extension."},{"line_number":42,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_cb7ef8ad","line":39,"range":{"start_line":38,"start_character":25,"end_line":39,"end_character":1},"updated":"2018-02-02 13:59:14.000000000","message":"nit: there is no need to wrap lines. I think it is easier to read.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"3a3b53df8bc9c355accb6c207fc39670470b49a6","unresolved":false,"context_lines":[{"line_number":35,"context_line":"UPDATED_TIMESTAMP \u003d \"2018-01-09T09:00:00-00:00\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"# The resource attribute map for the extension."},{"line_number":38,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":39,"context_line":"}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# The subresource attribute map for the extension."},{"line_number":42,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_c5233355","line":39,"range":{"start_line":38,"start_character":25,"end_line":39,"end_character":1},"in_reply_to":"5f93b717_cb7ef8ad","updated":"2018-02-03 13:33:07.000000000","message":"This how lib file from other bugs look like. See the review: https://review.openstack.org/#/c/521683","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"b9a80f8572ae7c10582787edef551f6d60596cbe","unresolved":false,"context_lines":[{"line_number":51,"context_line":"}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"# The list of required extensions."},{"line_number":54,"context_line":"REQUIRED_EXTENSIONS \u003d ["},{"line_number":55,"context_line":"]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# The list of optional extensions."}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_f7d2b6ff","line":54,"updated":"2018-02-02 14:34:27.000000000","message":"i suspect this requires security groups.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"3a3b53df8bc9c355accb6c207fc39670470b49a6","unresolved":false,"context_lines":[{"line_number":51,"context_line":"}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"# The list of required extensions."},{"line_number":54,"context_line":"REQUIRED_EXTENSIONS \u003d ["},{"line_number":55,"context_line":"]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# The list of optional extensions."}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_05b4bbf0","line":54,"in_reply_to":"5f93b717_f7d2b6ff","updated":"2018-02-03 13:33:07.000000000","message":"Why we need this? Could you explain because I don\u0027t think we need anything here.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"4e50396f4ad509c1d4cb6d00990f854fcfbe2223","unresolved":false,"context_lines":[{"line_number":1823,"context_line":"                  page_reverse\u003dFalse):"},{"line_number":1824,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1825,"context_line":"            if \u0027security-group\u0027 in self.supported_extension_aliases:"},{"line_number":1826,"context_line":"                port_bindings \u003d super(Ml2Plugin, self).\\"},{"line_number":1827,"context_line":"                    _get_port_security_group_bindings("},{"line_number":1828,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1829,"context_line":"                                      filters[\u0027security_groups\u0027]})"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_f9261717","line":1826,"updated":"2017-12-28 10:58:38.000000000","message":"Can this backslash be avoided as Miguel mentioned in PS4 about the tests.","commit_id":"d56b78cc51c4e96940c99b079f3e0f3e96ea9f9a"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"c7f47e52b9e53c687e7ecbffd73d214ef4ef73b7","unresolved":false,"context_lines":[{"line_number":1823,"context_line":"                  page_reverse\u003dFalse):"},{"line_number":1824,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1825,"context_line":"            if \u0027security-group\u0027 in self.supported_extension_aliases:"},{"line_number":1826,"context_line":"                port_bindings \u003d super(Ml2Plugin, self).\\"},{"line_number":1827,"context_line":"                    _get_port_security_group_bindings("},{"line_number":1828,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1829,"context_line":"                                      filters[\u0027security_groups\u0027]})"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_346c8607","line":1826,"in_reply_to":"9f91af0f_f9261717","updated":"2017-12-28 12:51:36.000000000","message":"Done","commit_id":"d56b78cc51c4e96940c99b079f3e0f3e96ea9f9a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c5caf99f44628fbaa7cb7f9b5b065d8922209fce","unresolved":false,"context_lines":[{"line_number":1821,"context_line":"    def get_ports(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":1822,"context_line":"                  sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":1823,"context_line":"                  page_reverse\u003dFalse):"},{"line_number":1824,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1825,"context_line":"            if \u0027security-group\u0027 in self.supported_extension_aliases:"},{"line_number":1826,"context_line":"                port_bindings \u003d super("},{"line_number":1827,"context_line":"                    Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_447625db","line":1824,"updated":"2018-01-01 11:16:41.000000000","message":"why are we not doing this in the base plugin? then all drivers can benefit from this change","commit_id":"4b93961b668697544387986341c7131aa38fdaf5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3057d4f153ca69e54db51b80039608d54fc2d1be","unresolved":false,"context_lines":[{"line_number":1821,"context_line":"    def get_ports(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":1822,"context_line":"                  sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":1823,"context_line":"                  page_reverse\u003dFalse):"},{"line_number":1824,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1825,"context_line":"            if \u0027security-group\u0027 in self.supported_extension_aliases:"},{"line_number":1826,"context_line":"                port_bindings \u003d super("},{"line_number":1827,"context_line":"                    Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":6,"id":"5f93b717_d7f1bb96","line":1824,"in_reply_to":"9f91af0f_1fc2a434","updated":"2018-02-02 13:59:14.000000000","message":"I think it is nice to add some method in securitygroup_db.py SecurityGroupDbMixin. securitygroup_db.py is aware of both security groups and ports, and this achieves the need pointed by Gary.","commit_id":"4b93961b668697544387986341c7131aa38fdaf5"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"27497229771f7274bd9647cf52bad12403d09cf3","unresolved":false,"context_lines":[{"line_number":1821,"context_line":"    def get_ports(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":1822,"context_line":"                  sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":1823,"context_line":"                  page_reverse\u003dFalse):"},{"line_number":1824,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1825,"context_line":"            if \u0027security-group\u0027 in self.supported_extension_aliases:"},{"line_number":1826,"context_line":"                port_bindings \u003d super("},{"line_number":1827,"context_line":"                    Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_1fc2a434","line":1824,"in_reply_to":"9f91af0f_447625db","updated":"2018-01-01 14:43:51.000000000","message":"Please see Miguel Lavalle comments in the patch 4","commit_id":"4b93961b668697544387986341c7131aa38fdaf5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"75baf79bb78ed8a910fe6542718a86fcb60748f7","unresolved":false,"context_lines":[{"line_number":1818,"context_line":"            port_host \u003d db.get_port_binding_host(context, port_id)"},{"line_number":1819,"context_line":"            return port if (port_host \u003d\u003d host) else None"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"    def get_ports(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":1822,"context_line":"                  sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":1823,"context_line":"                  page_reverse\u003dFalse):"},{"line_number":1824,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_12d95c82","line":1821,"range":{"start_line":1821,"start_character":8,"end_line":1821,"end_character":18},"updated":"2018-01-10 18:19:04.000000000","message":"After looking at https://review.openstack.org/#/c/521683/19/neutron/plugins/ml2/plugin.py@1854, I think overriding _get_ports_query is a better approach","commit_id":"178db734e5602270b056436f6c96b3dd3c553518"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"501e92f9da1b283d6bcd31435a48d0fc7d15b0e9","unresolved":false,"context_lines":[{"line_number":1818,"context_line":"            port_host \u003d db.get_port_binding_host(context, port_id)"},{"line_number":1819,"context_line":"            return port if (port_host \u003d\u003d host) else None"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":"    def get_ports(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":1822,"context_line":"                  sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":1823,"context_line":"                  page_reverse\u003dFalse):"},{"line_number":1824,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_56d023f8","line":1821,"range":{"start_line":1821,"start_character":8,"end_line":1821,"end_character":18},"in_reply_to":"7f96bb07_12d95c82","updated":"2018-01-11 12:08:43.000000000","message":"Done","commit_id":"178db734e5602270b056436f6c96b3dd3c553518"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"d74b455009b7338a52c2daab6c6ccd5d0a5b330f","unresolved":false,"context_lines":[{"line_number":1840,"context_line":"                    Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1841,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1842,"context_line":"                                      filters[\u0027security_groups\u0027]})"},{"line_number":1843,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1844,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1845,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"},{"line_number":1846,"context_line":"                                                        *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f96bb07_53181f1c","line":1843,"range":{"start_line":1843,"start_character":16,"end_line":1843,"end_character":77},"updated":"2018-01-12 02:35:58.000000000","message":"What if \u0027id\u0027 already in filters?","commit_id":"048d931519b7e77e0183ea92d063fe9e9f041fdc"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"77765d09b8f76f7685e75f1aa0cb9becab15a020","unresolved":false,"context_lines":[{"line_number":1840,"context_line":"                    Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1841,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1842,"context_line":"                                      filters[\u0027security_groups\u0027]})"},{"line_number":1843,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1844,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1845,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"},{"line_number":1846,"context_line":"                                                        *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f96bb07_ca76a9d9","line":1843,"range":{"start_line":1843,"start_character":16,"end_line":1843,"end_character":77},"in_reply_to":"7f96bb07_53181f1c","updated":"2018-01-12 08:44:49.000000000","message":"This case can\u0027t be happened because the propose of this API to find the port that associated to specific security group/groups. If you provide the port id then there is no mean to filter the ports.","commit_id":"048d931519b7e77e0183ea92d063fe9e9f041fdc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e4a452326a275b9f913d8bd1ac92c707e4562b4a","unresolved":false,"context_lines":[{"line_number":1835,"context_line":""},{"line_number":1836,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1837,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1838,"context_line":"            if \u0027security-group\u0027 in self.supported_extension_aliases:"},{"line_number":1839,"context_line":"                port_bindings \u003d super("},{"line_number":1840,"context_line":"                    Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1841,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_05a56204","line":1838,"updated":"2018-01-12 08:55:46.000000000","message":"shouldn\u0027t You add Your new extension to list of supported_extension_aliases list in ML2 plugin?","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"06af0d4eeea80c486c7746678b2e4c99d229f5fd","unresolved":false,"context_lines":[{"line_number":1835,"context_line":""},{"line_number":1836,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1837,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1838,"context_line":"            if \u0027security-group\u0027 in self.supported_extension_aliases:"},{"line_number":1839,"context_line":"                port_bindings \u003d super("},{"line_number":1840,"context_line":"                    Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1841,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_5646bc7e","line":1838,"in_reply_to":"7f96bb07_05a56204","updated":"2018-01-12 15:13:36.000000000","message":"Done","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e4a452326a275b9f913d8bd1ac92c707e4562b4a","unresolved":false,"context_lines":[{"line_number":1840,"context_line":"                    Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1841,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1842,"context_line":"                                      filters[\u0027security_groups\u0027]})"},{"line_number":1843,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1844,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1845,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"},{"line_number":1846,"context_line":"                                                        *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_25d17e55","line":1843,"updated":"2018-01-12 08:55:46.000000000","message":"if port_bindings will be empty list then You will have something like\n\n    filters[\u0027id\u0027] \u003d []\n\nwhat will be then returned to user?","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"06af0d4eeea80c486c7746678b2e4c99d229f5fd","unresolved":false,"context_lines":[{"line_number":1840,"context_line":"                    Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1841,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1842,"context_line":"                                      filters[\u0027security_groups\u0027]})"},{"line_number":1843,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1844,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1845,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"},{"line_number":1846,"context_line":"                                                        *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_f917bb44","line":1843,"in_reply_to":"7f96bb07_25d17e55","updated":"2018-01-12 15:13:36.000000000","message":"it behavior like the behavior when you try to get port depending on none existing id. it will return [] and will show a empty line. It show identical output when try to get port depending on none existing id.","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e4a452326a275b9f913d8bd1ac92c707e4562b4a","unresolved":false,"context_lines":[{"line_number":1842,"context_line":"                                      filters[\u0027security_groups\u0027]})"},{"line_number":1843,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1844,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1845,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"},{"line_number":1846,"context_line":"                                                        *args, **kwargs)"},{"line_number":1847,"context_line":"        return query"},{"line_number":1848,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_e547161d","line":1845,"updated":"2018-01-12 08:55:46.000000000","message":"it would be enough to do\n\n    return super(Ml2Plugin, self)._get_ports_query.....","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"06af0d4eeea80c486c7746678b2e4c99d229f5fd","unresolved":false,"context_lines":[{"line_number":1842,"context_line":"                                      filters[\u0027security_groups\u0027]})"},{"line_number":1843,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1844,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1845,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"},{"line_number":1846,"context_line":"                                                        *args, **kwargs)"},{"line_number":1847,"context_line":"        return query"},{"line_number":1848,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_9928f786","line":1845,"in_reply_to":"7f96bb07_e547161d","updated":"2018-01-12 15:13:36.000000000","message":"Done","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"da55b276729686f579c37a61c0409b5299de491e","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                                    \"availability_zone\","},{"line_number":154,"context_line":"                                    \"network_availability_zone\","},{"line_number":155,"context_line":"                                    \"default-subnetpools\","},{"line_number":156,"context_line":"                                    \"subnet-service-types\"]"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    @property"},{"line_number":159,"context_line":"    def supported_extension_aliases(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f96bb07_1dba73dd","line":156,"updated":"2018-01-15 07:52:29.000000000","message":"I think that You should add Your new API extension here to list of supported extensions.\nCurrently it is not available on list of extensions in neutron but feature works so it is not discoverable still.","commit_id":"c4d05167948d085024c9f035cebe8524bb0565bc"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"38c2c31427cafea96bb7d9a86ac6a2a572cefeb9","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                                    \"availability_zone\","},{"line_number":154,"context_line":"                                    \"network_availability_zone\","},{"line_number":155,"context_line":"                                    \"default-subnetpools\","},{"line_number":156,"context_line":"                                    \"subnet-service-types\"]"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    @property"},{"line_number":159,"context_line":"    def supported_extension_aliases(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f96bb07_6f53593a","line":156,"in_reply_to":"7f96bb07_1dba73dd","updated":"2018-01-17 17:25:28.000000000","message":"Done","commit_id":"c4d05167948d085024c9f035cebe8524bb0565bc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"da55b276729686f579c37a61c0409b5299de491e","unresolved":false,"context_lines":[{"line_number":1835,"context_line":""},{"line_number":1836,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1837,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1838,"context_line":"            if \u0027security-group\u0027 in self.supported_extension_aliases:"},{"line_number":1839,"context_line":"                port_bindings \u003d super("},{"line_number":1840,"context_line":"                    Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1841,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f96bb07_1dafd394","line":1838,"updated":"2018-01-15 07:52:29.000000000","message":"can\u0027t You merge those two \"if\" conditions into one with \"and\"?","commit_id":"c4d05167948d085024c9f035cebe8524bb0565bc"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"38c2c31427cafea96bb7d9a86ac6a2a572cefeb9","unresolved":false,"context_lines":[{"line_number":1835,"context_line":""},{"line_number":1836,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1837,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1838,"context_line":"            if \u0027security-group\u0027 in self.supported_extension_aliases:"},{"line_number":1839,"context_line":"                port_bindings \u003d super("},{"line_number":1840,"context_line":"                    Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1841,"context_line":"                    context, filters\u003d{\u0027security_group_id\u0027:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f96bb07_0f3415fb","line":1838,"in_reply_to":"7f96bb07_1dafd394","updated":"2018-01-17 17:25:28.000000000","message":"Done","commit_id":"c4d05167948d085024c9f035cebe8524bb0565bc"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"d9829ed5868ab785f29fbb6e849619d678bf52ec","unresolved":false,"context_lines":[{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1856,"context_line":"        if filters and \u0027security_groups\u0027 in filters and ("},{"line_number":1857,"context_line":"                    \u0027security-group\u0027 in self.supported_extension_aliases):"},{"line_number":1858,"context_line":"            port_bindings \u003d super("},{"line_number":1859,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1860,"context_line":"                context, filters\u003d{\u0027security_group_id\u0027:"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_d05d6947","line":1857,"range":{"start_line":1857,"start_character":21,"end_line":1857,"end_character":73},"updated":"2018-01-17 21:00:06.000000000","message":"this check doesn\u0027t make sense anymore, since the extension is explicitly declared as enabled above L147","commit_id":"0313d1b6d2bc0cf51887e69d59493daa7aa71318"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"5a357080f1dc3f0c98266dc4eb3c44559c92b229","unresolved":false,"context_lines":[{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1856,"context_line":"        if filters and \u0027security_groups\u0027 in filters and ("},{"line_number":1857,"context_line":"                    \u0027security-group\u0027 in self.supported_extension_aliases):"},{"line_number":1858,"context_line":"            port_bindings \u003d super("},{"line_number":1859,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1860,"context_line":"                context, filters\u003d{\u0027security_group_id\u0027:"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_610b65d5","line":1857,"range":{"start_line":1857,"start_character":21,"end_line":1857,"end_character":73},"in_reply_to":"7f96bb07_d05d6947","updated":"2018-01-17 23:00:07.000000000","message":"Done","commit_id":"0313d1b6d2bc0cf51887e69d59493daa7aa71318"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ef7287d993b6b2d30b29d62283631644d9e99f21","unresolved":false,"context_lines":[{"line_number":1861,"context_line":"                                  filters[\u0027security_groups\u0027]})"},{"line_number":1862,"context_line":"            filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1863,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1864,"context_line":"            return super(Ml2Plugin, self)._get_ports_query(context, filters,"},{"line_number":1865,"context_line":"                                                           *args, **kwargs)"},{"line_number":1866,"context_line":"        filters \u003d filters or {}"},{"line_number":1867,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_509b9916","line":1864,"updated":"2018-01-17 20:55:27.000000000","message":"You can\u0027t return here. What if user will provide 2 filters: one for SG and second for ip_addr_substr? You will break matching by subset then","commit_id":"0313d1b6d2bc0cf51887e69d59493daa7aa71318"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"5a357080f1dc3f0c98266dc4eb3c44559c92b229","unresolved":false,"context_lines":[{"line_number":1861,"context_line":"                                  filters[\u0027security_groups\u0027]})"},{"line_number":1862,"context_line":"            filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1863,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1864,"context_line":"            return super(Ml2Plugin, self)._get_ports_query(context, filters,"},{"line_number":1865,"context_line":"                                                           *args, **kwargs)"},{"line_number":1866,"context_line":"        filters \u003d filters or {}"},{"line_number":1867,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f96bb07_010e21e4","line":1864,"in_reply_to":"7f96bb07_509b9916","updated":"2018-01-17 23:00:07.000000000","message":"Done","commit_id":"0313d1b6d2bc0cf51887e69d59493daa7aa71318"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"fdb08faed2c9fb0b421a99359cc00c08b8b59ffd","unresolved":false,"context_lines":[{"line_number":1858,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1859,"context_line":"                context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1860,"context_line":"                                  filters[\u0027security_groups\u0027]})"},{"line_number":1861,"context_line":"            filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1862,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1863,"context_line":"        filters \u003d filters or {}"},{"line_number":1864,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_d45b0bf3","line":1861,"updated":"2018-01-18 08:19:11.000000000","message":"sorry but I now see one more problem here. According to neutron API docs: https://developer.openstack.org/api-ref/network/v2/index.html if more filters are provided then \"AND\" should be used to join them. Here it will not work like that. If user will make call like:\n\n    neutron port-list --security_groups c35cee5c-fce5-4ede-a4e0-87d2656b0434 --id 0362f20b-62d2-42ba-afe9-d9d7601ca2fb\n\nhe should get only port with id 0362f20b-62d2-42ba-afe9-d9d7601ca2fb and with SG c35cee5c-fce5-4ede-a4e0-87d2656b0434 but Your logic here will override provided \"id\" filter and as a result there will be list of all ports which are using this SG.\n\nFor me it looks that You should provide some additional unit test cases to cover such situations where there are mixed Your filter (SG) and filters which You are also touching somehow (id and fixed_ips) to ensure that all works fine.","commit_id":"4ba3594d898855f06351bfa9c0cc1d1ff3dfe204"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"d84629842af327de8ea67d6007adf4b81e9721fc","unresolved":false,"context_lines":[{"line_number":1858,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1859,"context_line":"                context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1860,"context_line":"                                  filters[\u0027security_groups\u0027]})"},{"line_number":1861,"context_line":"            filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1862,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1863,"context_line":"        filters \u003d filters or {}"},{"line_number":1864,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_59016b37","line":1861,"in_reply_to":"7f96bb07_d45b0bf3","updated":"2018-01-18 14:01:39.000000000","message":"Done. I modified the code and add a unit test.","commit_id":"4ba3594d898855f06351bfa9c0cc1d1ff3dfe204"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"63cf0468b3049fae7dd7aa63a22f64a28e196028","unresolved":false,"context_lines":[{"line_number":1857,"context_line":"            port_bindings \u003d super("},{"line_number":1858,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1859,"context_line":"                context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1860,"context_line":"                                  filters[\u0027security_groups\u0027]})"},{"line_number":1861,"context_line":"            if \u0027id\u0027 in filters:"},{"line_number":1862,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for"},{"line_number":1863,"context_line":"                                 entry in port_bindings"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_2e2088f7","line":1860,"updated":"2018-01-22 08:16:13.000000000","message":"It looks that filtering ports based on SG already don\u0027t work (and is necessary) on OVO level: https://bugs.launchpad.net/neutron/+bug/1744447\nI don\u0027t want to block Your patch now so IMO it can be done like it\u0027s now but maybe You could add some TODO note that it should be changed when https://bugs.launchpad.net/neutron/+bug/1744447 will be fixed and filtering ports based on SG will work on OVO level","commit_id":"e12eb2e18ff0a0af207dab0e44af48a42969e448"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"f92b324bf6d754b6eae06e7298ae8181f19adc9e","unresolved":false,"context_lines":[{"line_number":1857,"context_line":"            port_bindings \u003d super("},{"line_number":1858,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1859,"context_line":"                context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1860,"context_line":"                                  filters[\u0027security_groups\u0027]})"},{"line_number":1861,"context_line":"            if \u0027id\u0027 in filters:"},{"line_number":1862,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for"},{"line_number":1863,"context_line":"                                 entry in port_bindings"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_56feca05","line":1860,"in_reply_to":"7f96bb07_2e2088f7","updated":"2018-01-22 09:38:50.000000000","message":"Done","commit_id":"e12eb2e18ff0a0af207dab0e44af48a42969e448"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"777650a750b96fcfd61dc42b66fd57fbdf439c83","unresolved":false,"context_lines":[{"line_number":1853,"context_line":"        return device"},{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be check after this"},{"line_number":1857,"context_line":"        # bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1859,"context_line":"            port_bindings \u003d super("}],"source_content_type":"text/x-python","patch_set":21,"id":"7f96bb07_163a82e6","line":1856,"range":{"start_line":1856,"start_character":57,"end_line":1856,"end_character":62},"updated":"2018-01-22 10:15:00.000000000","message":"checked","commit_id":"47355273ac765f0581b24ffb99f795b571f93b3e"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"ce811f6a09ac3eb200e277d0b942eb39377b71d4","unresolved":false,"context_lines":[{"line_number":1853,"context_line":"        return device"},{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be check after this"},{"line_number":1857,"context_line":"        # bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1859,"context_line":"            port_bindings \u003d super("}],"source_content_type":"text/x-python","patch_set":21,"id":"7f96bb07_79889970","line":1856,"range":{"start_line":1856,"start_character":57,"end_line":1856,"end_character":62},"in_reply_to":"7f96bb07_163a82e6","updated":"2018-01-22 10:22:59.000000000","message":"Done","commit_id":"47355273ac765f0581b24ffb99f795b571f93b3e"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"777650a750b96fcfd61dc42b66fd57fbdf439c83","unresolved":false,"context_lines":[{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be check after this"},{"line_number":1857,"context_line":"        # bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1859,"context_line":"            port_bindings \u003d super("},{"line_number":1860,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":21,"id":"7f96bb07_392691b9","line":1857,"updated":"2018-01-22 10:15:00.000000000","message":"why are we not basing this patch on the fix for the issue? why do we need  a TODO here?","commit_id":"47355273ac765f0581b24ffb99f795b571f93b3e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f12910b376c6ee0179538b0513732654f7f41e94","unresolved":false,"context_lines":[{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be check after this"},{"line_number":1857,"context_line":"        # bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1859,"context_line":"            port_bindings \u003d super("},{"line_number":1860,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":21,"id":"7f96bb07_aa69dd8b","line":1857,"in_reply_to":"7f96bb07_392691b9","updated":"2018-01-23 08:48:30.000000000","message":"@garyk: I was thinking that there is no need to block this patch now as it\u0027s close to merge IMHO.\nMy patch to fix this OVO level ports filtering wasn\u0027t even proposed when I was writing my last comment here :)","commit_id":"47355273ac765f0581b24ffb99f795b571f93b3e"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"ce811f6a09ac3eb200e277d0b942eb39377b71d4","unresolved":false,"context_lines":[{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be check after this"},{"line_number":1857,"context_line":"        # bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        if filters and \u0027security_groups\u0027 in filters:"},{"line_number":1859,"context_line":"            port_bindings \u003d super("},{"line_number":1860,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":21,"id":"7f96bb07_59e83d15","line":1857,"in_reply_to":"7f96bb07_392691b9","updated":"2018-01-22 10:22:59.000000000","message":"See Slawek last comment.","commit_id":"47355273ac765f0581b24ffb99f795b571f93b3e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"915240faf0cecf1f0510552ffa3207c3995850c1","unresolved":false,"context_lines":[{"line_number":1867,"context_line":"            else:"},{"line_number":1868,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1869,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1870,"context_line":"        filters \u003d filters or {}"},{"line_number":1871,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"},{"line_number":1872,"context_line":"        ip_addresses_s \u003d fixed_ips.get(\u0027ip_address_substr\u0027)"},{"line_number":1873,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_f27ca9ec","line":1870,"updated":"2018-01-26 20:47:52.000000000","message":"I have one more thing here. You can move this line above L1858 and do something like:\n\n    filters \u003d filters or {}\n    security_groups \u003d filters.pop(\"security_groups\", None)\n    if security_groups:\n        port_bindings \u003d super(......\n        ....\n\nthan this \"pop()\" call from L1869 would not be necessary","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a959b9ffa926e412538e35bb9e89e8befd314533","unresolved":false,"context_lines":[{"line_number":1867,"context_line":"            else:"},{"line_number":1868,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1869,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1870,"context_line":"        filters \u003d filters or {}"},{"line_number":1871,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"},{"line_number":1872,"context_line":"        ip_addresses_s \u003d fixed_ips.get(\u0027ip_address_substr\u0027)"},{"line_number":1873,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_e834b6fd","line":1870,"in_reply_to":"5f93b717_28a7fe51","updated":"2018-01-26 22:45:35.000000000","message":"that\u0027s why I wrote in example:\n\n    filters.pop(\"security_groups\", None)\n\nthen it should be fine even if security_groups is not in filters dict","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"45d61fe38a2a9ddf88cb9cec5412b128cae223bc","unresolved":false,"context_lines":[{"line_number":1867,"context_line":"            else:"},{"line_number":1868,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1869,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1870,"context_line":"        filters \u003d filters or {}"},{"line_number":1871,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"},{"line_number":1872,"context_line":"        ip_addresses_s \u003d fixed_ips.get(\u0027ip_address_substr\u0027)"},{"line_number":1873,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_285ffe0e","line":1870,"in_reply_to":"5f93b717_f27ca9ec","updated":"2018-01-26 21:51:23.000000000","message":"Done","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"d1c6765ebb33a5040cb4a22018acfde9f2a17068","unresolved":false,"context_lines":[{"line_number":1867,"context_line":"            else:"},{"line_number":1868,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1869,"context_line":"            filters.pop(\u0027security_groups\u0027)"},{"line_number":1870,"context_line":"        filters \u003d filters or {}"},{"line_number":1871,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"},{"line_number":1872,"context_line":"        ip_addresses_s \u003d fixed_ips.get(\u0027ip_address_substr\u0027)"},{"line_number":1873,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_28a7fe51","line":1870,"in_reply_to":"5f93b717_f27ca9ec","updated":"2018-01-26 22:41:04.000000000","message":"This is not right because in the cases that we filter ports depending on other attributes, it will not have a security groups and will not pop anything.","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3057d4f153ca69e54db51b80039608d54fc2d1be","unresolved":false,"context_lines":[{"line_number":1853,"context_line":"        return device"},{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be checked after"},{"line_number":1857,"context_line":"        # this bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        filters \u003d filters or {}"},{"line_number":1859,"context_line":"        security_groups \u003d filters.pop(\"security_groups\", None)"},{"line_number":1860,"context_line":"        if security_groups:"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_3767bfeb","line":1857,"range":{"start_line":1856,"start_character":8,"end_line":1857,"end_character":74},"updated":"2018-02-02 13:59:14.000000000","message":"Is it still a valid comment?","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"3a3b53df8bc9c355accb6c207fc39670470b49a6","unresolved":false,"context_lines":[{"line_number":1853,"context_line":"        return device"},{"line_number":1854,"context_line":""},{"line_number":1855,"context_line":"    def _get_ports_query(self, context, filters\u003dNone, *args, **kwargs):"},{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be checked after"},{"line_number":1857,"context_line":"        # this bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        filters \u003d filters or {}"},{"line_number":1859,"context_line":"        security_groups \u003d filters.pop(\"security_groups\", None)"},{"line_number":1860,"context_line":"        if security_groups:"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_8519ab22","line":1857,"range":{"start_line":1856,"start_character":8,"end_line":1857,"end_character":74},"in_reply_to":"5f93b717_3767bfeb","updated":"2018-02-03 13:33:07.000000000","message":"Done","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"362f3c671b2eba1f8a19abb39b6a64ddb1c7c489","unresolved":false,"context_lines":[{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be checked after"},{"line_number":1857,"context_line":"        # this bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        filters \u003d filters or {}"},{"line_number":1859,"context_line":"        security_groups \u003d filters.pop(\"security_groups\", None)"},{"line_number":1860,"context_line":"        if security_groups:"},{"line_number":1861,"context_line":"            port_bindings \u003d super("},{"line_number":1862,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_17f7228d","line":1859,"updated":"2018-02-02 14:35:04.000000000","message":"for the record, this is already supported by OVO Port object (that is not integrated in ml2 plugin just yet), so if we would switch to the object, the filter could work right away. (We may want to rename it into security_group_ids to match the filter name in OVO.)","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"cfc010fb833f4e45811632c2237aca1d5f67c258","unresolved":false,"context_lines":[{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be checked after"},{"line_number":1857,"context_line":"        # this bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        filters \u003d filters or {}"},{"line_number":1859,"context_line":"        security_groups \u003d filters.pop(\"security_groups\", None)"},{"line_number":1860,"context_line":"        if security_groups:"},{"line_number":1861,"context_line":"            port_bindings \u003d super("},{"line_number":1862,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_5a42af10","line":1859,"in_reply_to":"5f93b717_17f7228d","updated":"2018-02-02 14:59:31.000000000","message":"So the command will be like :\nneutron port-list --security_group_ids 98... ?","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"c768dc8aec2dd88f35016ef17ea4359169e2917e","unresolved":false,"context_lines":[{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be checked after"},{"line_number":1857,"context_line":"        # this bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        filters \u003d filters or {}"},{"line_number":1859,"context_line":"        security_groups \u003d filters.pop(\"security_groups\", None)"},{"line_number":1860,"context_line":"        if security_groups:"},{"line_number":1861,"context_line":"            port_bindings \u003d super("},{"line_number":1862,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_c08d60d4","line":1859,"in_reply_to":"5f93b717_40edd089","updated":"2018-02-03 22:10:00.000000000","message":"So it is okay to merge it ?","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a3125528655bc57d7cb37e70dd83ac27268e1e87","unresolved":false,"context_lines":[{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be checked after"},{"line_number":1857,"context_line":"        # this bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        filters \u003d filters or {}"},{"line_number":1859,"context_line":"        security_groups \u003d filters.pop(\"security_groups\", None)"},{"line_number":1860,"context_line":"        if security_groups:"},{"line_number":1861,"context_line":"            port_bindings \u003d super("},{"line_number":1862,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_20e8c47a","line":1859,"in_reply_to":"5f93b717_54335b14","updated":"2018-02-03 22:05:33.000000000","message":"From the API perspective, it should be \"security_groups\". In most cases, we use the same name corresponding to the attribute name of a resource. In this case, \u0027security_groups\u0027 is the field name of the port.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"3a3b53df8bc9c355accb6c207fc39670470b49a6","unresolved":false,"context_lines":[{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be checked after"},{"line_number":1857,"context_line":"        # this bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        filters \u003d filters or {}"},{"line_number":1859,"context_line":"        security_groups \u003d filters.pop(\"security_groups\", None)"},{"line_number":1860,"context_line":"        if security_groups:"},{"line_number":1861,"context_line":"            port_bindings \u003d super("},{"line_number":1862,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_c5e813e3","line":1859,"in_reply_to":"5f93b717_54335b14","updated":"2018-02-03 13:33:07.000000000","message":"It is suppurated in OVO, so there is no value for this patch? Could you explain.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"8b6cb4afb66ab2f40fb39487262a959b2eab6cc9","unresolved":false,"context_lines":[{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be checked after"},{"line_number":1857,"context_line":"        # this bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        filters \u003d filters or {}"},{"line_number":1859,"context_line":"        security_groups \u003d filters.pop(\"security_groups\", None)"},{"line_number":1860,"context_line":"        if security_groups:"},{"line_number":1861,"context_line":"            port_bindings \u003d super("},{"line_number":1862,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_54335b14","line":1859,"in_reply_to":"5f93b717_5a42af10","updated":"2018-02-03 02:13:11.000000000","message":"Yes but it would still probably require work on client side.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a3125528655bc57d7cb37e70dd83ac27268e1e87","unresolved":false,"context_lines":[{"line_number":1856,"context_line":"        # TODO(ZaidA): security group filtring should be checked after"},{"line_number":1857,"context_line":"        # this bug fixed : https://bugs.launchpad.net/neutron/+bug/1744447"},{"line_number":1858,"context_line":"        filters \u003d filters or {}"},{"line_number":1859,"context_line":"        security_groups \u003d filters.pop(\"security_groups\", None)"},{"line_number":1860,"context_line":"        if security_groups:"},{"line_number":1861,"context_line":"            port_bindings \u003d super("},{"line_number":1862,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_40edd089","line":1859,"in_reply_to":"5f93b717_c5e813e3","updated":"2018-02-03 22:05:33.000000000","message":"The code in ML2 plugin has not been migrated to OVO, so this patch has a meaning until OVO migration is completed.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3057d4f153ca69e54db51b80039608d54fc2d1be","unresolved":false,"context_lines":[{"line_number":1858,"context_line":"        filters \u003d filters or {}"},{"line_number":1859,"context_line":"        security_groups \u003d filters.pop(\"security_groups\", None)"},{"line_number":1860,"context_line":"        if security_groups:"},{"line_number":1861,"context_line":"            port_bindings \u003d super("},{"line_number":1862,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1863,"context_line":"                context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1864,"context_line":"                                  security_groups})"},{"line_number":1865,"context_line":"            if \u0027id\u0027 in filters:"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_37da5f77","line":1862,"range":{"start_line":1861,"start_character":28,"end_line":1862,"end_character":66},"updated":"2018-02-02 13:59:14.000000000","message":"Ml2Plugin inherits SecurityGroupDbMixin, so Why can\u0027t we  call the method directly?","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"3a3b53df8bc9c355accb6c207fc39670470b49a6","unresolved":false,"context_lines":[{"line_number":1858,"context_line":"        filters \u003d filters or {}"},{"line_number":1859,"context_line":"        security_groups \u003d filters.pop(\"security_groups\", None)"},{"line_number":1860,"context_line":"        if security_groups:"},{"line_number":1861,"context_line":"            port_bindings \u003d super("},{"line_number":1862,"context_line":"                Ml2Plugin, self)._get_port_security_group_bindings("},{"line_number":1863,"context_line":"                context, filters\u003d{\u0027security_group_id\u0027:"},{"line_number":1864,"context_line":"                                  security_groups})"},{"line_number":1865,"context_line":"            if \u0027id\u0027 in filters:"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_e5e3cf03","line":1862,"range":{"start_line":1861,"start_character":28,"end_line":1862,"end_character":66},"in_reply_to":"5f93b717_37da5f77","updated":"2018-02-03 13:33:07.000000000","message":"Done","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3057d4f153ca69e54db51b80039608d54fc2d1be","unresolved":false,"context_lines":[{"line_number":1867,"context_line":"                                 entry in port_bindings"},{"line_number":1868,"context_line":"                                 if entry[\u0027port_id\u0027] in filters[\u0027id\u0027]]"},{"line_number":1869,"context_line":"            else:"},{"line_number":1870,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1871,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"},{"line_number":1872,"context_line":"        ip_addresses_s \u003d fixed_ips.get(\u0027ip_address_substr\u0027)"},{"line_number":1873,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_d71f7bb4","line":1870,"updated":"2018-02-02 13:59:14.000000000","message":"Can we define most of the above logic as a method in SecurityGroupDbMixin? by doing so, other core plugins can leverage this patch.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a3125528655bc57d7cb37e70dd83ac27268e1e87","unresolved":false,"context_lines":[{"line_number":1867,"context_line":"                                 entry in port_bindings"},{"line_number":1868,"context_line":"                                 if entry[\u0027port_id\u0027] in filters[\u0027id\u0027]]"},{"line_number":1869,"context_line":"            else:"},{"line_number":1870,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1871,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"},{"line_number":1872,"context_line":"        ip_addresses_s \u003d fixed_ips.get(\u0027ip_address_substr\u0027)"},{"line_number":1873,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_209d240a","line":1870,"in_reply_to":"5f93b717_05127b62","updated":"2018-02-03 22:05:33.000000000","message":"My point is not about _get_ports_query. My point is to explore there is a chance to have a logic in more common place. You originally added the code to db_plugin and then moved it to here based on a review comment. However, this code will be gone once OVO is adopted,  so I am okay with as-is.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"4c6deaf7827cec44dd45cbe499bbd6998a747e49","unresolved":false,"context_lines":[{"line_number":1867,"context_line":"                                 entry in port_bindings"},{"line_number":1868,"context_line":"                                 if entry[\u0027port_id\u0027] in filters[\u0027id\u0027]]"},{"line_number":1869,"context_line":"            else:"},{"line_number":1870,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1871,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"},{"line_number":1872,"context_line":"        ip_addresses_s \u003d fixed_ips.get(\u0027ip_address_substr\u0027)"},{"line_number":1873,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_05127b62","line":1870,"in_reply_to":"5f93b717_6536df05","updated":"2018-02-03 15:35:31.000000000","message":"He said  \" I think overriding _get_ports_query is a better approach\" , so I add the code here. Beside that the Ip substring  also use the same approach in the next line in _get_ports_query","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"66277968a45865a680f82cc2f3fa50e1c80ef696","unresolved":false,"context_lines":[{"line_number":1867,"context_line":"                                 entry in port_bindings"},{"line_number":1868,"context_line":"                                 if entry[\u0027port_id\u0027] in filters[\u0027id\u0027]]"},{"line_number":1869,"context_line":"            else:"},{"line_number":1870,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1871,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"},{"line_number":1872,"context_line":"        ip_addresses_s \u003d fixed_ips.get(\u0027ip_address_substr\u0027)"},{"line_number":1873,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_6536df05","line":1870,"in_reply_to":"5f93b717_a5e947e3","updated":"2018-02-03 15:29:23.000000000","message":"I checked patch set 8 but there are only two comments which seems unrelated.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"3a3b53df8bc9c355accb6c207fc39670470b49a6","unresolved":false,"context_lines":[{"line_number":1867,"context_line":"                                 entry in port_bindings"},{"line_number":1868,"context_line":"                                 if entry[\u0027port_id\u0027] in filters[\u0027id\u0027]]"},{"line_number":1869,"context_line":"            else:"},{"line_number":1870,"context_line":"                filters[\u0027id\u0027] \u003d [entry[\u0027port_id\u0027] for entry in port_bindings]"},{"line_number":1871,"context_line":"        fixed_ips \u003d filters.get(\u0027fixed_ips\u0027, {})"},{"line_number":1872,"context_line":"        ip_addresses_s \u003d fixed_ips.get(\u0027ip_address_substr\u0027)"},{"line_number":1873,"context_line":"        query \u003d super(Ml2Plugin, self)._get_ports_query(context, filters,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f93b717_a5e947e3","line":1870,"in_reply_to":"5f93b717_d71f7bb4","updated":"2018-02-03 13:33:07.000000000","message":"Please see mlavalle in Patch 8.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"}],"neutron/tests/contrib/hooks/api_all_extensions":[{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"ad0ce1baf4507ea0fd067a98dbe11d77fb6da806","unresolved":false,"context_lines":[{"line_number":35,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",router\""},{"line_number":36,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",router_availability_zone\""},{"line_number":37,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",security-group\""},{"line_number":38,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",security-groups\""},{"line_number":39,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",segment\""},{"line_number":40,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",service-type\""},{"line_number":41,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",sorting\""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"9f91af0f_41be6eb4","line":38,"range":{"start_line":38,"start_character":26,"end_line":38,"end_character":41},"updated":"2018-01-10 01:14:47.000000000","message":"ditto","commit_id":"f571b0688037b3e10900d550a6d0326f534a274d"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"20b4245ad296f267e01888f34ec2f0f5ddbefa24","unresolved":false,"context_lines":[{"line_number":35,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",router\""},{"line_number":36,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",router_availability_zone\""},{"line_number":37,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",security-group\""},{"line_number":38,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",security-groups-filtering\""},{"line_number":39,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",segment\""},{"line_number":40,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",service-type\""},{"line_number":41,"context_line":"NETWORK_API_EXTENSIONS+\u003d\",sorting\""}],"source_content_type":"application/octet-stream","patch_set":13,"id":"7f96bb07_bf633adc","line":38,"range":{"start_line":38,"start_character":26,"end_line":38,"end_character":51},"updated":"2018-01-15 02:11:10.000000000","message":"This needs to be changed as the extension alias updated.","commit_id":"c4d05167948d085024c9f035cebe8524bb0565bc"}],"neutron/tests/unit/db/test_db_base_plugin_v2.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"041bc42281d18c698b680097f43d5fcc31ed9723","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"            self._test_list_resources(\u0027port\u0027, [port1],"},{"line_number":1158,"context_line":"                                      query_params\u003dquery_params)"},{"line_number":1159,"context_line":""},{"line_number":1160,"context_line":"    def test_list_ports_filtered_by_security_groups(self):"},{"line_number":1161,"context_line":"        # for this test we need to enable overlapping ips"},{"line_number":1162,"context_line":"        cfg.CONF.set_default(\u0027allow_overlapping_ips\u0027, True)"},{"line_number":1163,"context_line":"        res \u003d self._create_network(fmt\u003dself.fmt, name\u003d\u0027net\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_839f394f","line":1160,"updated":"2017-12-21 21:30:09.000000000","message":"You will need to move this test case to https://github.com/openstack/neutron/blob/master/neutron/tests/unit/plugins/ml2/test_plugin.py#L691. Since that class inherits from NeutronDbPluginV2TestCase, you can do the same things you can here","commit_id":"5879f8de8ec1d1457acab3a233e83c6973ff52a9"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"e8143ccc8d04334ad94f6f33817ad688122229c7","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"            self._test_list_resources(\u0027port\u0027, [port1],"},{"line_number":1158,"context_line":"                                      query_params\u003dquery_params)"},{"line_number":1159,"context_line":""},{"line_number":1160,"context_line":"    def test_list_ports_filtered_by_security_groups(self):"},{"line_number":1161,"context_line":"        # for this test we need to enable overlapping ips"},{"line_number":1162,"context_line":"        cfg.CONF.set_default(\u0027allow_overlapping_ips\u0027, True)"},{"line_number":1163,"context_line":"        res \u003d self._create_network(fmt\u003dself.fmt, name\u003d\u0027net\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_b962cfd7","line":1160,"in_reply_to":"bf8cb3f7_839f394f","updated":"2017-12-28 10:11:56.000000000","message":"Done","commit_id":"5879f8de8ec1d1457acab3a233e83c6973ff52a9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"041bc42281d18c698b680097f43d5fcc31ed9723","unresolved":false,"context_lines":[{"line_number":1160,"context_line":"    def test_list_ports_filtered_by_security_groups(self):"},{"line_number":1161,"context_line":"        # for this test we need to enable overlapping ips"},{"line_number":1162,"context_line":"        cfg.CONF.set_default(\u0027allow_overlapping_ips\u0027, True)"},{"line_number":1163,"context_line":"        res \u003d self._create_network(fmt\u003dself.fmt, name\u003d\u0027net\u0027,"},{"line_number":1164,"context_line":"                                   admin_state_up\u003dTrue)"},{"line_number":1165,"context_line":"        network \u003d self.deserialize(self.fmt, res)"},{"line_number":1166,"context_line":"        network_id \u003d network[\u0027network\u0027][\u0027id\u0027]"},{"line_number":1167,"context_line":"        # Create Port"},{"line_number":1168,"context_line":"        port1 \u003d self._create_port(self.fmt, network_id,"},{"line_number":1169,"context_line":"                                  device_owner\u003dconstants.DEVICE_OWNER_DHCP)"},{"line_number":1170,"context_line":"        port \u003d self.deserialize(self.fmt, port1)"},{"line_number":1171,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1172,"context_line":"        # Create Security Group"},{"line_number":1173,"context_line":"        sg \u003d test_sg.SecurityGroupDbMixinImpl().\\"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_633eb52a","line":1170,"range":{"start_line":1163,"start_character":0,"end_line":1170,"end_character":48},"updated":"2017-12-21 21:30:09.000000000","message":"Why not use the port context manager to create your port. Look at L1150 above? Why a DHCP port?","commit_id":"5879f8de8ec1d1457acab3a233e83c6973ff52a9"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"e8143ccc8d04334ad94f6f33817ad688122229c7","unresolved":false,"context_lines":[{"line_number":1160,"context_line":"    def test_list_ports_filtered_by_security_groups(self):"},{"line_number":1161,"context_line":"        # for this test we need to enable overlapping ips"},{"line_number":1162,"context_line":"        cfg.CONF.set_default(\u0027allow_overlapping_ips\u0027, True)"},{"line_number":1163,"context_line":"        res \u003d self._create_network(fmt\u003dself.fmt, name\u003d\u0027net\u0027,"},{"line_number":1164,"context_line":"                                   admin_state_up\u003dTrue)"},{"line_number":1165,"context_line":"        network \u003d self.deserialize(self.fmt, res)"},{"line_number":1166,"context_line":"        network_id \u003d network[\u0027network\u0027][\u0027id\u0027]"},{"line_number":1167,"context_line":"        # Create Port"},{"line_number":1168,"context_line":"        port1 \u003d self._create_port(self.fmt, network_id,"},{"line_number":1169,"context_line":"                                  device_owner\u003dconstants.DEVICE_OWNER_DHCP)"},{"line_number":1170,"context_line":"        port \u003d self.deserialize(self.fmt, port1)"},{"line_number":1171,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1172,"context_line":"        # Create Security Group"},{"line_number":1173,"context_line":"        sg \u003d test_sg.SecurityGroupDbMixinImpl().\\"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_d95f930c","line":1170,"range":{"start_line":1163,"start_character":0,"end_line":1170,"end_character":48},"in_reply_to":"bf8cb3f7_633eb52a","updated":"2017-12-28 10:11:56.000000000","message":"Done","commit_id":"5879f8de8ec1d1457acab3a233e83c6973ff52a9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"041bc42281d18c698b680097f43d5fcc31ed9723","unresolved":false,"context_lines":[{"line_number":1170,"context_line":"        port \u003d self.deserialize(self.fmt, port1)"},{"line_number":1171,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1172,"context_line":"        # Create Security Group"},{"line_number":1173,"context_line":"        sg \u003d test_sg.SecurityGroupDbMixinImpl().\\"},{"line_number":1174,"context_line":"            create_security_group(ctx, test_sg.FAKE_SECGROUP)"},{"line_number":1175,"context_line":"        # Bind security Group to port"},{"line_number":1176,"context_line":"        sg_db.SecurityGroupDbMixin()._create_port_security_group_binding("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_23218dfc","line":1173,"range":{"start_line":1173,"start_character":48,"end_line":1173,"end_character":49},"updated":"2017-12-21 21:30:09.000000000","message":"Try to avoid this backslashes . Please look at the second guideline here: https://docs.openstack.org/hacking/latest/user/hacking.html#general","commit_id":"5879f8de8ec1d1457acab3a233e83c6973ff52a9"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"e8143ccc8d04334ad94f6f33817ad688122229c7","unresolved":false,"context_lines":[{"line_number":1170,"context_line":"        port \u003d self.deserialize(self.fmt, port1)"},{"line_number":1171,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1172,"context_line":"        # Create Security Group"},{"line_number":1173,"context_line":"        sg \u003d test_sg.SecurityGroupDbMixinImpl().\\"},{"line_number":1174,"context_line":"            create_security_group(ctx, test_sg.FAKE_SECGROUP)"},{"line_number":1175,"context_line":"        # Bind security Group to port"},{"line_number":1176,"context_line":"        sg_db.SecurityGroupDbMixin()._create_port_security_group_binding("}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_799a07c6","line":1173,"range":{"start_line":1173,"start_character":48,"end_line":1173,"end_character":49},"in_reply_to":"bf8cb3f7_23218dfc","updated":"2017-12-28 10:11:56.000000000","message":"Done","commit_id":"5879f8de8ec1d1457acab3a233e83c6973ff52a9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"041bc42281d18c698b680097f43d5fcc31ed9723","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"        # Bind security Group to port"},{"line_number":1176,"context_line":"        sg_db.SecurityGroupDbMixin()._create_port_security_group_binding("},{"line_number":1177,"context_line":"            ctx, port[\"port\"][\u0027id\u0027], sg[\u0027id\u0027])"},{"line_number":1178,"context_line":"        sg_port_binding \u003d sg_db.SecurityGroupDbMixin().\\"},{"line_number":1179,"context_line":"            _get_port_security_group_bindings(ctx)"},{"line_number":1180,"context_line":"        pl \u003d directory.get_plugin()"},{"line_number":1181,"context_line":"        port_data \u003d pl.get_ports("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8cb3f7_a3827dc7","line":1178,"range":{"start_line":1178,"start_character":55,"end_line":1178,"end_character":56},"updated":"2017-12-21 21:30:09.000000000","message":"Ditto","commit_id":"5879f8de8ec1d1457acab3a233e83c6973ff52a9"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"e8143ccc8d04334ad94f6f33817ad688122229c7","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"        # Bind security Group to port"},{"line_number":1176,"context_line":"        sg_db.SecurityGroupDbMixin()._create_port_security_group_binding("},{"line_number":1177,"context_line":"            ctx, port[\"port\"][\u0027id\u0027], sg[\u0027id\u0027])"},{"line_number":1178,"context_line":"        sg_port_binding \u003d sg_db.SecurityGroupDbMixin().\\"},{"line_number":1179,"context_line":"            _get_port_security_group_bindings(ctx)"},{"line_number":1180,"context_line":"        pl \u003d directory.get_plugin()"},{"line_number":1181,"context_line":"        port_data \u003d pl.get_ports("}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_999fcbb3","line":1178,"range":{"start_line":1178,"start_character":55,"end_line":1178,"end_character":56},"in_reply_to":"bf8cb3f7_a3827dc7","updated":"2017-12-28 10:11:56.000000000","message":"Done","commit_id":"5879f8de8ec1d1457acab3a233e83c6973ff52a9"}],"neutron/tests/unit/plugins/ml2/test_plugin.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"75baf79bb78ed8a910fe6542718a86fcb60748f7","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"        cfg.CONF.set_default(\u0027allow_overlapping_ips\u0027, True)"},{"line_number":1222,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1223,"context_line":"        with self.port() as port:"},{"line_number":1224,"context_line":"            pl \u003d directory.get_plugin()"},{"line_number":1225,"context_line":"            port_data \u003d pl.get_ports("},{"line_number":1226,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1227,"context_line":"                              [port[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1228,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port[\"port\"][\u0027id\u0027])"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_b2c42842","line":1227,"range":{"start_line":1224,"start_character":1,"end_line":1227,"end_character":68},"updated":"2018-01-10 18:19:04.000000000","message":"Instead of calling the plugin directly, let\u0027s exercise the API. Here\u0027s an example of how to do it: https://review.openstack.org/#/c/414251/52/neutron/tests/unit/plugins/ml2/test_port_binding.py@545","commit_id":"178db734e5602270b056436f6c96b3dd3c553518"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"501e92f9da1b283d6bcd31435a48d0fc7d15b0e9","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"        cfg.CONF.set_default(\u0027allow_overlapping_ips\u0027, True)"},{"line_number":1222,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1223,"context_line":"        with self.port() as port:"},{"line_number":1224,"context_line":"            pl \u003d directory.get_plugin()"},{"line_number":1225,"context_line":"            port_data \u003d pl.get_ports("},{"line_number":1226,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1227,"context_line":"                              [port[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1228,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port[\"port\"][\u0027id\u0027])"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_16f37ba0","line":1227,"range":{"start_line":1224,"start_character":1,"end_line":1227,"end_character":68},"in_reply_to":"7f96bb07_b2c42842","updated":"2018-01-11 12:08:43.000000000","message":"The _show function don\u0027t filter the ports depending on the security groups. Beside that, many test in this file use the same approach to test.","commit_id":"178db734e5602270b056436f6c96b3dd3c553518"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e4a452326a275b9f913d8bd1ac92c707e4562b4a","unresolved":false,"context_lines":[{"line_number":1226,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1227,"context_line":"                              [port[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1228,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port[\"port\"][\u0027id\u0027])"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"class TestMl2PortsV2WithRevisionPlugin(Ml2PluginV2TestCase):"},{"line_number":1232,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_c521ba4f","line":1229,"updated":"2018-01-12 08:55:46.000000000","message":"You should add some additional test cases like:\n\n*  try to make call with not existing security groups and check that port is not returned,\n* add new test (or change this one) with two ports, both with different SG and try to get only ports with one of those groups. Then check if proper result is returned","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"06af0d4eeea80c486c7746678b2e4c99d229f5fd","unresolved":false,"context_lines":[{"line_number":1226,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1227,"context_line":"                              [port[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1228,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port[\"port\"][\u0027id\u0027])"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"class TestMl2PortsV2WithRevisionPlugin(Ml2PluginV2TestCase):"},{"line_number":1232,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_795acb2a","line":1229,"in_reply_to":"7f96bb07_c521ba4f","updated":"2018-01-12 15:13:36.000000000","message":"I added a new test with two ports with different SG and ensure that proper result returned.","commit_id":"651035ca38a7045e477065bdb183d45243fa22e3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"63cf0468b3049fae7dd7aa63a22f64a28e196028","unresolved":false,"context_lines":[{"line_number":1294,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1295,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]],"},{"line_number":1296,"context_line":"                              \u0027id\u0027: port1[\u0027port\u0027][\u0027id\u0027]})"},{"line_number":1297,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1298,"context_line":"            temp_sg \u003d {\u0027security_group\u0027: {\u0027tenant_id\u0027: \u0027some_tenant\u0027,"},{"line_number":1299,"context_line":"                                          \u0027name\u0027: \u0027\u0027, \u0027description\u0027: \u0027s\u0027}}"},{"line_number":1300,"context_line":"            sg_dbMixin \u003d sg_db.SecurityGroupDbMixin()"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_eec5c00b","line":1297,"updated":"2018-01-22 08:16:13.000000000","message":"please use pattern:\n\n    self.assertEqual(expected, actual)\n\nas it is used everywhere else","commit_id":"e12eb2e18ff0a0af207dab0e44af48a42969e448"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f12910b376c6ee0179538b0513732654f7f41e94","unresolved":false,"context_lines":[{"line_number":1294,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1295,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]],"},{"line_number":1296,"context_line":"                              \u0027id\u0027: port1[\u0027port\u0027][\u0027id\u0027]})"},{"line_number":1297,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1298,"context_line":"            temp_sg \u003d {\u0027security_group\u0027: {\u0027tenant_id\u0027: \u0027some_tenant\u0027,"},{"line_number":1299,"context_line":"                                          \u0027name\u0027: \u0027\u0027, \u0027description\u0027: \u0027s\u0027}}"},{"line_number":1300,"context_line":"            sg_dbMixin \u003d sg_db.SecurityGroupDbMixin()"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_2a5e2de6","line":1297,"in_reply_to":"7f96bb07_16084226","updated":"2018-01-23 08:48:30.000000000","message":"sorry, this is fine then","commit_id":"e12eb2e18ff0a0af207dab0e44af48a42969e448"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"f92b324bf6d754b6eae06e7298ae8181f19adc9e","unresolved":false,"context_lines":[{"line_number":1294,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1295,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]],"},{"line_number":1296,"context_line":"                              \u0027id\u0027: port1[\u0027port\u0027][\u0027id\u0027]})"},{"line_number":1297,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1298,"context_line":"            temp_sg \u003d {\u0027security_group\u0027: {\u0027tenant_id\u0027: \u0027some_tenant\u0027,"},{"line_number":1299,"context_line":"                                          \u0027name\u0027: \u0027\u0027, \u0027description\u0027: \u0027s\u0027}}"},{"line_number":1300,"context_line":"            sg_dbMixin \u003d sg_db.SecurityGroupDbMixin()"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_16084226","line":1297,"in_reply_to":"7f96bb07_eec5c00b","updated":"2018-01-22 09:38:50.000000000","message":"I use this pattern. The port data is the expected.","commit_id":"e12eb2e18ff0a0af207dab0e44af48a42969e448"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e05bc0d77bd0caaa8d86cbe59573008e606fa053","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1286,"context_line":"        with self.port() as port1, self.port() as port2:"},{"line_number":1287,"context_line":"            plugin \u003d directory.get_plugin()"},{"line_number":1288,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1289,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1290,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1291,"context_line":"            self.assertTrue(port1[\u0027port\u0027][\u0027id\u0027] and port2[\u0027port\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_abf44788","line":1288,"updated":"2018-01-23 23:18:58.000000000","message":"See comment to L1293","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"e29ffa98d8e0beafe18e5d314b2b86229a022364","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1286,"context_line":"        with self.port() as port1, self.port() as port2:"},{"line_number":1287,"context_line":"            plugin \u003d directory.get_plugin()"},{"line_number":1288,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1289,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1290,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1291,"context_line":"            self.assertTrue(port1[\u0027port\u0027][\u0027id\u0027] and port2[\u0027port\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f93b717_b5ccf489","line":1288,"in_reply_to":"7f96bb07_abf44788","updated":"2018-01-25 14:25:00.000000000","message":"Done","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e05bc0d77bd0caaa8d86cbe59573008e606fa053","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1289,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1290,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1291,"context_line":"            self.assertTrue(port1[\u0027port\u0027][\u0027id\u0027] and port2[\u0027port\u0027][\u0027id\u0027]"},{"line_number":1292,"context_line":"                            in [port[\u0027id\u0027] for port in port_data])"},{"line_number":1293,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1294,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_cb08b329","line":1291,"range":{"start_line":1291,"start_character":28,"end_line":1291,"end_character":71},"updated":"2018-01-23 23:18:58.000000000","message":"This expressions evaluates to port2[\u0027port\u0027][\u0027id\u0027]:\n\n(Pdb) port1[\u0027port\u0027][\u0027id\u0027]\nu\u002710f600ce-a215-4b39-b36d-5eebd3ccf44f\u0027\n(Pdb) port2[\u0027port\u0027][\u0027id\u0027]\nu\u0027b7219b6f-de48-47f6-aba1-42b311cdaa62\u0027\n(Pdb) port1[\u0027port\u0027][\u0027id\u0027] and port2[\u0027port\u0027][\u0027id\u0027]\nu\u0027b7219b6f-de48-47f6-aba1-42b311cdaa62\u0027\n\nSo the assertTrue is testing that the id of port2 is included in [port[\u0027id\u0027] for port in port_data], which succeeds. What you really want to test, though, is that the ids of both port1 and port 2 are included in [port[\u0027id\u0027] for port in port_data]. I would do the following:\n\nself.assertEqual(set([port1[\u0027port\u0027][\u0027id\u0027], port2[\u0027port\u0027][\u0027id\u0027]]), \n                 set([port[\u0027id\u0027] for port in port_data]))","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"e29ffa98d8e0beafe18e5d314b2b86229a022364","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1289,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1290,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1291,"context_line":"            self.assertTrue(port1[\u0027port\u0027][\u0027id\u0027] and port2[\u0027port\u0027][\u0027id\u0027]"},{"line_number":1292,"context_line":"                            in [port[\u0027id\u0027] for port in port_data])"},{"line_number":1293,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1294,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f93b717_55c9f075","line":1291,"range":{"start_line":1291,"start_character":28,"end_line":1291,"end_character":71},"in_reply_to":"7f96bb07_cb08b329","updated":"2018-01-25 14:25:00.000000000","message":"Done","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e05bc0d77bd0caaa8d86cbe59573008e606fa053","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1291,"context_line":"            self.assertTrue(port1[\u0027port\u0027][\u0027id\u0027] and port2[\u0027port\u0027][\u0027id\u0027]"},{"line_number":1292,"context_line":"                            in [port[\u0027id\u0027] for port in port_data])"},{"line_number":1293,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1294,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1295,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]],"},{"line_number":1296,"context_line":"                              \u0027id\u0027: port1[\u0027port\u0027][\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_4b9ee363","line":1293,"range":{"start_line":1293,"start_character":12,"end_line":1293,"end_character":40},"updated":"2018-01-23 23:18:58.000000000","message":"We are implementing an API change, So instead of calling the plugin directly, why not go through the API? Let\u0027s test the API. For an example, see L1271 above","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"e29ffa98d8e0beafe18e5d314b2b86229a022364","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1291,"context_line":"            self.assertTrue(port1[\u0027port\u0027][\u0027id\u0027] and port2[\u0027port\u0027][\u0027id\u0027]"},{"line_number":1292,"context_line":"                            in [port[\u0027id\u0027] for port in port_data])"},{"line_number":1293,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1294,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1295,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]],"},{"line_number":1296,"context_line":"                              \u0027id\u0027: port1[\u0027port\u0027][\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f93b717_15a128aa","line":1293,"range":{"start_line":1293,"start_character":12,"end_line":1293,"end_character":40},"in_reply_to":"7f96bb07_4b9ee363","updated":"2018-01-25 14:25:00.000000000","message":"Done","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e05bc0d77bd0caaa8d86cbe59573008e606fa053","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            sg_dbMixin._create_port_security_group_binding("},{"line_number":1305,"context_line":"                ctx, port2[\u0027port\u0027][\u0027id\u0027], sg[\u0027id\u0027])"},{"line_number":1306,"context_line":"            port2[\u0027port\u0027][\u0027security_groups\u0027][0] \u003d sg[\u0027id\u0027]"},{"line_number":1307,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1308,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1309,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1310,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port1[\u0027port\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_cb83d303","line":1307,"updated":"2018-01-23 23:18:58.000000000","message":"See comment to L1293","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"e29ffa98d8e0beafe18e5d314b2b86229a022364","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            sg_dbMixin._create_port_security_group_binding("},{"line_number":1305,"context_line":"                ctx, port2[\u0027port\u0027][\u0027id\u0027], sg[\u0027id\u0027])"},{"line_number":1306,"context_line":"            port2[\u0027port\u0027][\u0027security_groups\u0027][0] \u003d sg[\u0027id\u0027]"},{"line_number":1307,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1308,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1309,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1310,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port1[\u0027port\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f93b717_35a6a4c3","line":1307,"in_reply_to":"7f96bb07_cb83d303","updated":"2018-01-25 14:25:00.000000000","message":"Done","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e05bc0d77bd0caaa8d86cbe59573008e606fa053","unresolved":false,"context_lines":[{"line_number":1307,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1308,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1309,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1310,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1311,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1312,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1313,"context_line":"                              [port2[\u0027port\u0027][\u0027security_groups\u0027][0]]})"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_6beb9fdb","line":1310,"updated":"2018-01-23 23:18:58.000000000","message":"Please follow the format (expected, actual). Since you want to make sure you got only one port, I would also add a line:\n\nself.assertEqual(1, len(port_data))","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"e29ffa98d8e0beafe18e5d314b2b86229a022364","unresolved":false,"context_lines":[{"line_number":1307,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1308,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1309,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1310,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1311,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1312,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1313,"context_line":"                              [port2[\u0027port\u0027][\u0027security_groups\u0027][0]]})"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f93b717_d5aae083","line":1310,"in_reply_to":"7f96bb07_6beb9fdb","updated":"2018-01-25 14:25:00.000000000","message":"Done","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e05bc0d77bd0caaa8d86cbe59573008e606fa053","unresolved":false,"context_lines":[{"line_number":1308,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1309,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1310,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1311,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1312,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1313,"context_line":"                              [port2[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1314,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port2[\u0027port\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_8b7dcb1d","line":1311,"updated":"2018-01-23 23:18:58.000000000","message":"See comment to L1293","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"e29ffa98d8e0beafe18e5d314b2b86229a022364","unresolved":false,"context_lines":[{"line_number":1308,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1309,"context_line":"                              [port1[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1310,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1311,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1312,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1313,"context_line":"                              [port2[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1314,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port2[\u0027port\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f93b717_f5afdc91","line":1311,"in_reply_to":"7f96bb07_8b7dcb1d","updated":"2018-01-25 14:25:00.000000000","message":"Done","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e05bc0d77bd0caaa8d86cbe59573008e606fa053","unresolved":false,"context_lines":[{"line_number":1311,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1312,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1313,"context_line":"                              [port2[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1314,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1315,"context_line":""},{"line_number":1316,"context_line":""},{"line_number":1317,"context_line":"class TestMl2PortsV2WithRevisionPlugin(Ml2PluginV2TestCase):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_2bbfd7d0","line":1314,"updated":"2018-01-23 23:18:58.000000000","message":"Please follow the format (expected, actual). Since you want to make sure you got only one port, I would also add a line:\n\nself.assertEqual(1, len(port_data))","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"e29ffa98d8e0beafe18e5d314b2b86229a022364","unresolved":false,"context_lines":[{"line_number":1311,"context_line":"            port_data \u003d plugin.get_ports("},{"line_number":1312,"context_line":"                ctx, filters\u003d{\u0027security_groups\u0027:"},{"line_number":1313,"context_line":"                              [port2[\u0027port\u0027][\u0027security_groups\u0027][0]]})"},{"line_number":1314,"context_line":"            self.assertEqual(port_data[0][\u0027id\u0027], port2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1315,"context_line":""},{"line_number":1316,"context_line":""},{"line_number":1317,"context_line":"class TestMl2PortsV2WithRevisionPlugin(Ml2PluginV2TestCase):"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f93b717_95945846","line":1314,"in_reply_to":"7f96bb07_2bbfd7d0","updated":"2018-01-25 14:25:00.000000000","message":"Done","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"915240faf0cecf1f0510552ffa3207c3995850c1","unresolved":false,"context_lines":[{"line_number":1284,"context_line":"        cfg.CONF.set_default(\u0027allow_overlapping_ips\u0027, True)"},{"line_number":1285,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1286,"context_line":"        with self.port() as port1, self.port() as port2:"},{"line_number":1287,"context_line":"            query_params \u003d \"security_groups\u003d%s\" % \\"},{"line_number":1288,"context_line":"                           port1[\u0027port\u0027][\u0027security_groups\u0027][0]"},{"line_number":1289,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"},{"line_number":1290,"context_line":"            self.assertEqual(set([port1[\u0027port\u0027][\u0027id\u0027], port2[\u0027port\u0027][\u0027id\u0027]]),"},{"line_number":1291,"context_line":"                             set([port[\u0027id\u0027] for port in port_data[\u0027ports\u0027]]))"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_b2a2a14a","line":1288,"range":{"start_line":1287,"start_character":27,"end_line":1288,"end_character":62},"updated":"2018-01-26 20:47:52.000000000","message":"I think that some time ago there was some discussion about that and that we should avoid using \"\\\" and use brackets instead.","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"45d61fe38a2a9ddf88cb9cec5412b128cae223bc","unresolved":false,"context_lines":[{"line_number":1284,"context_line":"        cfg.CONF.set_default(\u0027allow_overlapping_ips\u0027, True)"},{"line_number":1285,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":1286,"context_line":"        with self.port() as port1, self.port() as port2:"},{"line_number":1287,"context_line":"            query_params \u003d \"security_groups\u003d%s\" % \\"},{"line_number":1288,"context_line":"                           port1[\u0027port\u0027][\u0027security_groups\u0027][0]"},{"line_number":1289,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"},{"line_number":1290,"context_line":"            self.assertEqual(set([port1[\u0027port\u0027][\u0027id\u0027], port2[\u0027port\u0027][\u0027id\u0027]]),"},{"line_number":1291,"context_line":"                             set([port[\u0027id\u0027] for port in port_data[\u0027ports\u0027]]))"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_88a5f206","line":1288,"range":{"start_line":1287,"start_character":27,"end_line":1288,"end_character":62},"in_reply_to":"5f93b717_b2a2a14a","updated":"2018-01-26 21:51:23.000000000","message":"Done","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"915240faf0cecf1f0510552ffa3207c3995850c1","unresolved":false,"context_lines":[{"line_number":1286,"context_line":"        with self.port() as port1, self.port() as port2:"},{"line_number":1287,"context_line":"            query_params \u003d \"security_groups\u003d%s\" % \\"},{"line_number":1288,"context_line":"                           port1[\u0027port\u0027][\u0027security_groups\u0027][0]"},{"line_number":1289,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"},{"line_number":1290,"context_line":"            self.assertEqual(set([port1[\u0027port\u0027][\u0027id\u0027], port2[\u0027port\u0027][\u0027id\u0027]]),"},{"line_number":1291,"context_line":"                             set([port[\u0027id\u0027] for port in port_data[\u0027ports\u0027]]))"},{"line_number":1292,"context_line":"            self.assertEqual(2, len(port_data[\u0027ports\u0027]))"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_b2bb8170","line":1289,"range":{"start_line":1289,"start_character":12,"end_line":1289,"end_character":21},"updated":"2018-01-26 20:47:52.000000000","message":"isn\u0027t it \"ports_data\" in fact?","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"45d61fe38a2a9ddf88cb9cec5412b128cae223bc","unresolved":false,"context_lines":[{"line_number":1286,"context_line":"        with self.port() as port1, self.port() as port2:"},{"line_number":1287,"context_line":"            query_params \u003d \"security_groups\u003d%s\" % \\"},{"line_number":1288,"context_line":"                           port1[\u0027port\u0027][\u0027security_groups\u0027][0]"},{"line_number":1289,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"},{"line_number":1290,"context_line":"            self.assertEqual(set([port1[\u0027port\u0027][\u0027id\u0027], port2[\u0027port\u0027][\u0027id\u0027]]),"},{"line_number":1291,"context_line":"                             set([port[\u0027id\u0027] for port in port_data[\u0027ports\u0027]]))"},{"line_number":1292,"context_line":"            self.assertEqual(2, len(port_data[\u0027ports\u0027]))"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_a8a8eeda","line":1289,"range":{"start_line":1289,"start_character":12,"end_line":1289,"end_character":21},"in_reply_to":"5f93b717_b2bb8170","updated":"2018-01-26 21:51:23.000000000","message":"Done","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"915240faf0cecf1f0510552ffa3207c3995850c1","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"            self.assertEqual(set([port1[\u0027port\u0027][\u0027id\u0027], port2[\u0027port\u0027][\u0027id\u0027]]),"},{"line_number":1291,"context_line":"                             set([port[\u0027id\u0027] for port in port_data[\u0027ports\u0027]]))"},{"line_number":1292,"context_line":"            self.assertEqual(2, len(port_data[\u0027ports\u0027]))"},{"line_number":1293,"context_line":"            query_params \u003d \"security_groups\u003d%s\u0026id\u003d%s\" % \\"},{"line_number":1294,"context_line":"                           (port1[\u0027port\u0027][\u0027security_groups\u0027][0],"},{"line_number":1295,"context_line":"                            port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1296,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_f266e929","line":1293,"range":{"start_line":1293,"start_character":27,"end_line":1293,"end_character":57},"updated":"2018-01-26 20:47:52.000000000","message":"please use brackets instead of \"\\\"","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"45d61fe38a2a9ddf88cb9cec5412b128cae223bc","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"            self.assertEqual(set([port1[\u0027port\u0027][\u0027id\u0027], port2[\u0027port\u0027][\u0027id\u0027]]),"},{"line_number":1291,"context_line":"                             set([port[\u0027id\u0027] for port in port_data[\u0027ports\u0027]]))"},{"line_number":1292,"context_line":"            self.assertEqual(2, len(port_data[\u0027ports\u0027]))"},{"line_number":1293,"context_line":"            query_params \u003d \"security_groups\u003d%s\u0026id\u003d%s\" % \\"},{"line_number":1294,"context_line":"                           (port1[\u0027port\u0027][\u0027security_groups\u0027][0],"},{"line_number":1295,"context_line":"                            port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1296,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_48afeae2","line":1293,"range":{"start_line":1293,"start_character":27,"end_line":1293,"end_character":57},"in_reply_to":"5f93b717_f266e929","updated":"2018-01-26 21:51:23.000000000","message":"Done","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"915240faf0cecf1f0510552ffa3207c3995850c1","unresolved":false,"context_lines":[{"line_number":1293,"context_line":"            query_params \u003d \"security_groups\u003d%s\u0026id\u003d%s\" % \\"},{"line_number":1294,"context_line":"                           (port1[\u0027port\u0027][\u0027security_groups\u0027][0],"},{"line_number":1295,"context_line":"                            port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1296,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"},{"line_number":1297,"context_line":"            self.assertEqual(port1[\u0027port\u0027][\u0027id\u0027], port_data[\u0027ports\u0027][0][\u0027id\u0027])"},{"line_number":1298,"context_line":"            self.assertEqual(1, len(port_data[\u0027ports\u0027]))"},{"line_number":1299,"context_line":"            temp_sg \u003d {\u0027security_group\u0027: {\u0027tenant_id\u0027: \u0027some_tenant\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_926d2506","line":1296,"range":{"start_line":1296,"start_character":12,"end_line":1296,"end_character":21},"updated":"2018-01-26 20:47:52.000000000","message":"ports_data?","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"45d61fe38a2a9ddf88cb9cec5412b128cae223bc","unresolved":false,"context_lines":[{"line_number":1293,"context_line":"            query_params \u003d \"security_groups\u003d%s\u0026id\u003d%s\" % \\"},{"line_number":1294,"context_line":"                           (port1[\u0027port\u0027][\u0027security_groups\u0027][0],"},{"line_number":1295,"context_line":"                            port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1296,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"},{"line_number":1297,"context_line":"            self.assertEqual(port1[\u0027port\u0027][\u0027id\u0027], port_data[\u0027ports\u0027][0][\u0027id\u0027])"},{"line_number":1298,"context_line":"            self.assertEqual(1, len(port_data[\u0027ports\u0027]))"},{"line_number":1299,"context_line":"            temp_sg \u003d {\u0027security_group\u0027: {\u0027tenant_id\u0027: \u0027some_tenant\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_68aae6d2","line":1296,"range":{"start_line":1296,"start_character":12,"end_line":1296,"end_character":21},"in_reply_to":"5f93b717_926d2506","updated":"2018-01-26 21:51:23.000000000","message":"Done","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"915240faf0cecf1f0510552ffa3207c3995850c1","unresolved":false,"context_lines":[{"line_number":1305,"context_line":"            sg_dbMixin._create_port_security_group_binding("},{"line_number":1306,"context_line":"                ctx, port2[\u0027port\u0027][\u0027id\u0027], sg[\u0027id\u0027])"},{"line_number":1307,"context_line":"            port2[\u0027port\u0027][\u0027security_groups\u0027][0] \u003d sg[\u0027id\u0027]"},{"line_number":1308,"context_line":"            query_params \u003d \"security_groups\u003d%s\u0026id\u003d%s\" % \\"},{"line_number":1309,"context_line":"                           (port1[\u0027port\u0027][\u0027security_groups\u0027][0],"},{"line_number":1310,"context_line":"                            port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1311,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_d24c0da0","line":1308,"updated":"2018-01-26 20:47:52.000000000","message":"please use brackets instead of \"\\\"","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"45d61fe38a2a9ddf88cb9cec5412b128cae223bc","unresolved":false,"context_lines":[{"line_number":1305,"context_line":"            sg_dbMixin._create_port_security_group_binding("},{"line_number":1306,"context_line":"                ctx, port2[\u0027port\u0027][\u0027id\u0027], sg[\u0027id\u0027])"},{"line_number":1307,"context_line":"            port2[\u0027port\u0027][\u0027security_groups\u0027][0] \u003d sg[\u0027id\u0027]"},{"line_number":1308,"context_line":"            query_params \u003d \"security_groups\u003d%s\u0026id\u003d%s\" % \\"},{"line_number":1309,"context_line":"                           (port1[\u0027port\u0027][\u0027security_groups\u0027][0],"},{"line_number":1310,"context_line":"                            port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1311,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_08b9e22c","line":1308,"in_reply_to":"5f93b717_d24c0da0","updated":"2018-01-26 21:51:23.000000000","message":"Done","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"915240faf0cecf1f0510552ffa3207c3995850c1","unresolved":false,"context_lines":[{"line_number":1308,"context_line":"            query_params \u003d \"security_groups\u003d%s\u0026id\u003d%s\" % \\"},{"line_number":1309,"context_line":"                           (port1[\u0027port\u0027][\u0027security_groups\u0027][0],"},{"line_number":1310,"context_line":"                            port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1311,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"},{"line_number":1312,"context_line":"            self.assertEqual(port1[\u0027port\u0027][\u0027id\u0027], port_data[\u0027ports\u0027][0][\u0027id\u0027])"},{"line_number":1313,"context_line":"            self.assertEqual(1, len(port_data[\u0027ports\u0027]))"},{"line_number":1314,"context_line":"            query_params \u003d \"security_groups\u003d%s\u0026id\u003d%s\" % \\"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_f24fc98f","line":1311,"range":{"start_line":1311,"start_character":12,"end_line":1311,"end_character":21},"updated":"2018-01-26 20:47:52.000000000","message":"ports_data?","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"915240faf0cecf1f0510552ffa3207c3995850c1","unresolved":false,"context_lines":[{"line_number":1311,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"},{"line_number":1312,"context_line":"            self.assertEqual(port1[\u0027port\u0027][\u0027id\u0027], port_data[\u0027ports\u0027][0][\u0027id\u0027])"},{"line_number":1313,"context_line":"            self.assertEqual(1, len(port_data[\u0027ports\u0027]))"},{"line_number":1314,"context_line":"            query_params \u003d \"security_groups\u003d%s\u0026id\u003d%s\" % \\"},{"line_number":1315,"context_line":"                           (port2[\u0027port\u0027][\u0027security_groups\u0027][0],"},{"line_number":1316,"context_line":"                            port2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1317,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_b249418c","line":1314,"range":{"start_line":1314,"start_character":27,"end_line":1314,"end_character":57},"updated":"2018-01-26 20:47:52.000000000","message":"please use brackets instead of \"\\\"","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"45d61fe38a2a9ddf88cb9cec5412b128cae223bc","unresolved":false,"context_lines":[{"line_number":1311,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"},{"line_number":1312,"context_line":"            self.assertEqual(port1[\u0027port\u0027][\u0027id\u0027], port_data[\u0027ports\u0027][0][\u0027id\u0027])"},{"line_number":1313,"context_line":"            self.assertEqual(1, len(port_data[\u0027ports\u0027]))"},{"line_number":1314,"context_line":"            query_params \u003d \"security_groups\u003d%s\u0026id\u003d%s\" % \\"},{"line_number":1315,"context_line":"                           (port2[\u0027port\u0027][\u0027security_groups\u0027][0],"},{"line_number":1316,"context_line":"                            port2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1317,"context_line":"            port_data \u003d self._list(\u0027ports\u0027, query_params\u003dquery_params)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f93b717_28b4de34","line":1314,"range":{"start_line":1314,"start_character":27,"end_line":1314,"end_character":57},"in_reply_to":"5f93b717_b249418c","updated":"2018-01-26 21:51:23.000000000","message":"Done","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"}],"releasenotes/notes/security-groups-port-filtering-69d36ac7db90c9e0.yaml":[{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"d74b455009b7338a52c2daab6c6ccd5d0a5b330f","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support filtering ports by security groups."},{"line_number":5,"context_line":"    "}],"source_content_type":"text/x-yaml","patch_set":9,"id":"7f96bb07_93e30706","line":5,"range":{"start_line":5,"start_character":0,"end_line":5,"end_character":4},"updated":"2018-01-12 02:35:58.000000000","message":"extra blanks here","commit_id":"048d931519b7e77e0183ea92d063fe9e9f041fdc"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"77765d09b8f76f7685e75f1aa0cb9becab15a020","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support filtering ports by security groups."},{"line_number":5,"context_line":"    "}],"source_content_type":"text/x-yaml","patch_set":9,"id":"7f96bb07_ca0d493f","line":5,"range":{"start_line":5,"start_character":0,"end_line":5,"end_character":4},"in_reply_to":"7f96bb07_93e30706","updated":"2018-01-12 08:44:49.000000000","message":"Done","commit_id":"048d931519b7e77e0183ea92d063fe9e9f041fdc"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e05bc0d77bd0caaa8d86cbe59573008e606fa053","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support filtering ports by security groups."},{"line_number":5,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7f96bb07_8bcb8b51","line":4,"range":{"start_line":4,"start_character":40,"end_line":4,"end_character":46},"updated":"2018-01-23 23:18:58.000000000","message":"groups IDs","commit_id":"c8d567224099594a5594e2896e6b22bb5e431f34"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"915240faf0cecf1f0510552ffa3207c3995850c1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support filtering ports by security groups ID."},{"line_number":5,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":24,"id":"5f93b717_725bb953","line":4,"range":{"start_line":4,"start_character":47,"end_line":4,"end_character":49},"updated":"2018-01-26 20:47:52.000000000","message":"shouldn\u0027t be \"IDs\"?","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"45d61fe38a2a9ddf88cb9cec5412b128cae223bc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support filtering ports by security groups ID."},{"line_number":5,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":24,"id":"5f93b717_887e5269","line":4,"range":{"start_line":4,"start_character":47,"end_line":4,"end_character":49},"in_reply_to":"5f93b717_725bb953","updated":"2018-01-26 21:51:23.000000000","message":"Done","commit_id":"da8682049e58f424497c423041d43b5f2fd8501d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3057d4f153ca69e54db51b80039608d54fc2d1be","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support filtering ports by security groups IDs."},{"line_number":5,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":27,"id":"5f93b717_f7a5d79f","line":5,"updated":"2018-02-02 13:59:14.000000000","message":"it is better to mention the extension name so that users can know how this feature is available.","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":27288,"name":"Ahmed Zaid","email":"ahmed.zaid.ext@nokia.com","username":"ZaidA"},"change_message_id":"3a3b53df8bc9c355accb6c207fc39670470b49a6","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support filtering ports by security groups IDs."},{"line_number":5,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":27,"id":"5f93b717_45be43d5","line":5,"in_reply_to":"5f93b717_f7a5d79f","updated":"2018-02-03 13:33:07.000000000","message":"Done","commit_id":"594ae0a5357c954c1db31a424f580463a02292f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c5b11ecd562b05c684420e0bf3da843555c53cd1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support port filtering on security group IDs."},{"line_number":5,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":29,"id":"3fa0c359_1194cf36","line":4,"updated":"2018-02-06 09:42:48.000000000","message":"Could you add how API users can know this feature is available? it is worth mentioning \"port-security-groups-filtering\" extension here.","commit_id":"03e514247999bc59936183a51f121e4c59c10a03"}]}
