)]}'
{".gitignore":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9ae1d8802100ed3cea7e172ed4d1f8ea4a719896","unresolved":false,"context_lines":[{"line_number":16,"context_line":"run_tests.err.log"},{"line_number":17,"context_line":"run_tests.log"},{"line_number":18,"context_line":".autogenerated"},{"line_number":19,"context_line":"\\.*"},{"line_number":20,"context_line":".testrepository/"},{"line_number":21,"context_line":".tox/"},{"line_number":22,"context_line":".venv/"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"3ac371cc_d268358a","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":3},"updated":"2016-08-19 09:54:21.000000000","message":"I\u0027d like to have explicit entries. It catches too broad.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":16,"context_line":"run_tests.err.log"},{"line_number":17,"context_line":"run_tests.log"},{"line_number":18,"context_line":".autogenerated"},{"line_number":19,"context_line":"\\.*"},{"line_number":20,"context_line":".testrepository/"},{"line_number":21,"context_line":".tox/"},{"line_number":22,"context_line":".venv/"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"fa7ab95a_46a282fe","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":3},"in_reply_to":"3ac371cc_d268358a","updated":"2016-08-30 15:25:47.000000000","message":"I see.  The purpose is to ignore .cover/* files.  Therefore, I\u0027ll change it to .cover/","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ba77f3b2348be665ef0ab0d12daa7a36e6622615","unresolved":false,"context_lines":[{"line_number":16,"context_line":"run_tests.err.log"},{"line_number":17,"context_line":"run_tests.log"},{"line_number":18,"context_line":".autogenerated"},{"line_number":19,"context_line":".cover/"},{"line_number":20,"context_line":".testrepository/"},{"line_number":21,"context_line":".tox/"},{"line_number":22,"context_line":".venv/"}],"source_content_type":"application/octet-stream","patch_set":12,"id":"fa7ab95a_fcceed81","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":7},"updated":"2016-09-01 09:40:00.000000000","message":"If required, this should be changed in a separate patch.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"bfd1abbe1bb28a7e90c210503b5ce9517bcc6ef1","unresolved":false,"context_lines":[{"line_number":16,"context_line":"run_tests.err.log"},{"line_number":17,"context_line":"run_tests.log"},{"line_number":18,"context_line":".autogenerated"},{"line_number":19,"context_line":".cover/"},{"line_number":20,"context_line":".testrepository/"},{"line_number":21,"context_line":".tox/"},{"line_number":22,"context_line":".venv/"}],"source_content_type":"application/octet-stream","patch_set":12,"id":"fa7ab95a_fd91849b","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":7},"in_reply_to":"fa7ab95a_fcceed81","updated":"2016-09-01 13:16:01.000000000","message":"I agree with you. I\u0027ll remove this change.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"}],"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9ae1d8802100ed3cea7e172ed4d1f8ea4a719896","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit supports FWaaS v2 CLI [1]."},{"line_number":10,"context_line":"[1] http://specs.openstack.org/openstack/neutron-specs/specs/newton/fwaas-api-2.0.html"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint fwaas-api-2.0"},{"line_number":13,"context_line":"Change-Id: I57504f97ac39b5b7d301fd5cc88228a121f0677e"},{"line_number":14,"context_line":"Closes-Bug: #1609686"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3ac371cc_a54a9525","line":11,"updated":"2016-08-19 09:54:21.000000000","message":"Could you add Depends-On flag? By Depend-On flag, reviewers can know when this patch can be merged.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit supports FWaaS v2 CLI [1]."},{"line_number":10,"context_line":"[1] http://specs.openstack.org/openstack/neutron-specs/specs/newton/fwaas-api-2.0.html"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint fwaas-api-2.0"},{"line_number":13,"context_line":"Change-Id: I57504f97ac39b5b7d301fd5cc88228a121f0677e"},{"line_number":14,"context_line":"Closes-Bug: #1609686"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"fa7ab95a_e632b6f1","line":11,"in_reply_to":"3ac371cc_a54a9525","updated":"2016-08-30 15:25:47.000000000","message":"Sure. I\u0027ll add it.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"2492e36260f13108a1b113bf6b319cab8bf3e1e9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"[1] http://specs.openstack.org/openstack/neutron-specs/specs/newton/fwaas-api-2.0.html"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint fwaas-api-2.0"},{"line_number":13,"context_line":"Depends-On: I9380343c09d28eec67077c9e6d77c33a195e516b"},{"line_number":14,"context_line":"Change-Id: I57504f97ac39b5b7d301fd5cc88228a121f0677e"},{"line_number":15,"context_line":"Closes-Bug: #1609686"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"5a74a57a_d8109bae","line":13,"updated":"2016-11-30 01:49:44.000000000","message":"this should be depends-on: I7b4108772e8370e8f51971caf40ecd23e9f977e9","commit_id":"9cdf575994076110584998de2dd4b174dc85690d"}],"neutronclient/neutron/v2_0/fw/v2/firewallgroup.py":[{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":21,"context_line":"def add_common_args(parser):"},{"line_number":22,"context_line":"    parser.add_argument("},{"line_number":23,"context_line":"        \u0027--name\u0027,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Name for the firewall_group.\u0027))"},{"line_number":25,"context_line":"    parser.add_argument("},{"line_number":26,"context_line":"        \u0027--description\u0027,"},{"line_number":27,"context_line":"        help\u003d_(\u0027Description for the firewall_group.\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_ac330013","line":24,"range":{"start_line":24,"start_character":29,"end_line":24,"end_character":43},"updated":"2016-08-11 15:30:36.000000000","message":"I think we don\u0027t want the underscore (here and in the other usage statements and comments).","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"def add_common_args(parser):"},{"line_number":22,"context_line":"    parser.add_argument("},{"line_number":23,"context_line":"        \u0027--name\u0027,"},{"line_number":24,"context_line":"        help\u003d_(\u0027Name for the firewall_group.\u0027))"},{"line_number":25,"context_line":"    parser.add_argument("},{"line_number":26,"context_line":"        \u0027--description\u0027,"},{"line_number":27,"context_line":"        help\u003d_(\u0027Description for the firewall_group.\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_9cf27299","line":24,"range":{"start_line":24,"start_character":29,"end_line":24,"end_character":43},"in_reply_to":"bacf61ea_ac330013","updated":"2016-08-17 16:33:30.000000000","message":"Done","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class ShowFirewallGroup(neutronv20.ShowCommand):"},{"line_number":60,"context_line":"    \"\"\"Show information of a given firewall_group.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    resource \u003d \u0027firewall_group\u0027"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_4e588356","line":60,"range":{"start_line":60,"start_character":24,"end_line":60,"end_character":26},"updated":"2016-08-11 15:30:36.000000000","message":"\"for\" :)","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class ShowFirewallGroup(neutronv20.ShowCommand):"},{"line_number":60,"context_line":"    \"\"\"Show information of a given firewall_group.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    resource \u003d \u0027firewall_group\u0027"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_dc2a2ae7","line":60,"range":{"start_line":60,"start_character":24,"end_line":60,"end_character":26},"in_reply_to":"9ad45d7e_4e588356","updated":"2016-08-17 16:33:30.000000000","message":"Done","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def add_known_arguments(self, parser):"},{"line_number":71,"context_line":"        add_common_args(parser)"},{"line_number":72,"context_line":"        parser.add_argument("},{"line_number":73,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":74,"context_line":"            dest\u003d\u0027admin_state_up\u0027, action\u003d\u0027store_false\u0027,"},{"line_number":75,"context_line":"            help\u003d_(\u0027Set admin state up to false.\u0027))"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_8581acfd","line":73,"range":{"start_line":73,"start_character":13,"end_line":73,"end_character":31},"updated":"2016-08-11 15:30:36.000000000","message":"If this is kept a boolean, then I believe it should be a parser.add_boolean_argument and I would suggest noting what is the default in the description.  But perhaps this shouldn\u0027t be a boolean but a required argument that needs a value \n\n  --admin-state \u003cup/down\u003e","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def add_known_arguments(self, parser):"},{"line_number":71,"context_line":"        add_common_args(parser)"},{"line_number":72,"context_line":"        parser.add_argument("},{"line_number":73,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":74,"context_line":"            dest\u003d\u0027admin_state_up\u0027, action\u003d\u0027store_false\u0027,"},{"line_number":75,"context_line":"            help\u003d_(\u0027Set admin state up to false.\u0027))"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_5c6d9a31","line":73,"range":{"start_line":73,"start_character":13,"end_line":73,"end_character":31},"in_reply_to":"9ad45d7e_8581acfd","updated":"2016-08-17 16:33:30.000000000","message":"Thanks for your comment.  I\u0027ll add the information about default value.  BTW, this value is not boolean but just specify it.\n\n* ex. neutron fwaas-firewall-group-create my-fw --admin-state-down","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        add_common_args(parser)"},{"line_number":91,"context_line":"        utils.add_boolean_argument("},{"line_number":92,"context_line":"            parser, \u0027--admin-state-up\u0027, dest\u003d\u0027admin_state_up\u0027,"},{"line_number":93,"context_line":"            help\u003d_(\u0027Update the admin state for the firewall_group\u0027"},{"line_number":94,"context_line":"                   \u0027(True means UP)\u0027))"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def args2body(self, parsed_args):"},{"line_number":97,"context_line":"        body \u003d parse_common_args(self.get_client(), parsed_args)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_c5d444ed","line":94,"range":{"start_line":93,"start_character":17,"end_line":94,"end_character":35},"updated":"2016-08-11 15:30:36.000000000","message":"Similar comments to the one about the --admin-state-down argument for CreateFirewallGroup.  But also suggest if --admin-state-down is kept for CreateFirewallGroup, it should also be --admin-state-down here.","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        add_common_args(parser)"},{"line_number":91,"context_line":"        utils.add_boolean_argument("},{"line_number":92,"context_line":"            parser, \u0027--admin-state-up\u0027, dest\u003d\u0027admin_state_up\u0027,"},{"line_number":93,"context_line":"            help\u003d_(\u0027Update the admin state for the firewall_group\u0027"},{"line_number":94,"context_line":"                   \u0027(True means UP)\u0027))"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def args2body(self, parsed_args):"},{"line_number":97,"context_line":"        body \u003d parse_common_args(self.get_client(), parsed_args)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_9c771202","line":94,"range":{"start_line":93,"start_character":17,"end_line":94,"end_character":35},"in_reply_to":"9ad45d7e_c5d444ed","updated":"2016-08-17 16:33:30.000000000","message":"Done","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"EGRESS_FWP_ID \u003d \u0027egress_firewall_policy_id\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def add_common_args(parser):"},{"line_number":28,"context_line":"    parser.add_argument("},{"line_number":29,"context_line":"        \u0027--description\u0027,"},{"line_number":30,"context_line":"        help\u003d_(\u0027Description for the firewallgroup.\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_20989e1b","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":18},"updated":"2016-08-18 11:00:16.000000000","message":"Do you want this method to be private to this module?","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"EGRESS_FWP_ID \u003d \u0027egress_firewall_policy_id\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def add_common_args(parser):"},{"line_number":28,"context_line":"    parser.add_argument("},{"line_number":29,"context_line":"        \u0027--description\u0027,"},{"line_number":30,"context_line":"        help\u003d_(\u0027Description for the firewallgroup.\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_54eab874","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":18},"in_reply_to":"3ac371cc_20989e1b","updated":"2016-08-18 14:30:30.000000000","message":"Yes.  I\u0027ll change it as a private method(add \u0027_\u0027 as a prefix)","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"def add_common_args(parser):"},{"line_number":28,"context_line":"    parser.add_argument("},{"line_number":29,"context_line":"        \u0027--description\u0027,"},{"line_number":30,"context_line":"        help\u003d_(\u0027Description for the firewallgroup.\u0027))"},{"line_number":31,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":32,"context_line":"    ingress_group.add_argument("},{"line_number":33,"context_line":"        \u0027--ingress-policy\u0027, metavar\u003d\u0027INGRESS_POLICY\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_e564fbb9","line":30,"range":{"start_line":30,"start_character":36,"end_line":30,"end_character":49},"updated":"2016-08-18 11:00:16.000000000","message":"I think it should be \"firewall group\" (two words) here and throughout.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"def add_common_args(parser):"},{"line_number":28,"context_line":"    parser.add_argument("},{"line_number":29,"context_line":"        \u0027--description\u0027,"},{"line_number":30,"context_line":"        help\u003d_(\u0027Description for the firewallgroup.\u0027))"},{"line_number":31,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":32,"context_line":"    ingress_group.add_argument("},{"line_number":33,"context_line":"        \u0027--ingress-policy\u0027, metavar\u003d\u0027INGRESS_POLICY\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_14668050","line":30,"range":{"start_line":30,"start_character":36,"end_line":30,"end_character":49},"in_reply_to":"3ac371cc_e564fbb9","updated":"2016-08-18 14:30:30.000000000","message":"Thank you.  I\u0027ll fix it at PS4.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        parser.add_argument("},{"line_number":100,"context_line":"            \u0027--public\u0027,"},{"line_number":101,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":102,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":103,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":104,"context_line":"        parser.add_argument("},{"line_number":105,"context_line":"            \u0027--admin-state-down\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_a0fe71ab","line":102,"range":{"start_line":102,"start_character":20,"end_line":102,"end_character":50},"updated":"2016-08-18 11:00:16.000000000","message":"Suggested rewording: \u0027Make the firewall group public, which allows it to be used in all projects (as opposed to the default, which is to restrict its use to the current project).\u0027","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        parser.add_argument("},{"line_number":100,"context_line":"            \u0027--public\u0027,"},{"line_number":101,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":102,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":103,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":104,"context_line":"        parser.add_argument("},{"line_number":105,"context_line":"            \u0027--admin-state-down\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_b48cccda","line":102,"range":{"start_line":102,"start_character":20,"end_line":102,"end_character":50},"in_reply_to":"3ac371cc_a0fe71ab","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            \u0027--public\u0027,"},{"line_number":101,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":102,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":103,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":104,"context_line":"        parser.add_argument("},{"line_number":105,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":106,"context_line":"            dest\u003d\u0027admin_state\u0027, action\u003d\u0027store_false\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_e0efc91b","line":103,"range":{"start_line":103,"start_character":20,"end_line":103,"end_character":58},"updated":"2016-08-18 11:00:16.000000000","message":"I think this second part is implementation information that the user doesn\u0027t need to know.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            \u0027--public\u0027,"},{"line_number":101,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":102,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":103,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":104,"context_line":"        parser.add_argument("},{"line_number":105,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":106,"context_line":"            dest\u003d\u0027admin_state\u0027, action\u003d\u0027store_false\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_0fd94d57","line":103,"range":{"start_line":103,"start_character":20,"end_line":103,"end_character":58},"in_reply_to":"3ac371cc_e0efc91b","updated":"2016-08-18 14:30:30.000000000","message":"OK, I\u0027ll remove it.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        parser.add_argument("},{"line_number":105,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":106,"context_line":"            dest\u003d\u0027admin_state\u0027, action\u003d\u0027store_false\u0027,"},{"line_number":107,"context_line":"            help\u003d_(\u0027Set the administrative state up to false \u0027"},{"line_number":108,"context_line":"                   \u0027(default is True)\u0027))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def args2body(self, parsed_args):"},{"line_number":111,"context_line":"        body \u003d parse_common_args(self.get_client(), parsed_args)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_bcdcd946","line":108,"range":{"start_line":107,"start_character":19,"end_line":108,"end_character":38},"updated":"2016-08-18 11:00:16.000000000","message":"Suggested rewording: \u0027Set admin state down (default is up)","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        parser.add_argument("},{"line_number":105,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":106,"context_line":"            dest\u003d\u0027admin_state\u0027, action\u003d\u0027store_false\u0027,"},{"line_number":107,"context_line":"            help\u003d_(\u0027Set the administrative state up to false \u0027"},{"line_number":108,"context_line":"                   \u0027(default is True)\u0027))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def args2body(self, parsed_args):"},{"line_number":111,"context_line":"        body \u003d parse_common_args(self.get_client(), parsed_args)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_ef767104","line":108,"range":{"start_line":107,"start_character":19,"end_line":108,"end_character":38},"in_reply_to":"3ac371cc_bcdcd946","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        public_group.add_argument("},{"line_number":132,"context_line":"            \u0027--public\u0027,"},{"line_number":133,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":134,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":135,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":136,"context_line":"        public_group.add_argument("},{"line_number":137,"context_line":"            \u0027--no-public\u0027,"},{"line_number":138,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_244ef5c0","line":135,"range":{"start_line":134,"start_character":19,"end_line":135,"end_character":58},"updated":"2016-08-18 11:00:16.000000000","message":"Suggested rewording: \u0027Make firewall group public, which allows it to be used in all projects.\u0027\n\nSimilar to my comment at @144, I think that in general the default should not be specified for an update action.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        public_group.add_argument("},{"line_number":132,"context_line":"            \u0027--public\u0027,"},{"line_number":133,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":134,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":135,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":136,"context_line":"        public_group.add_argument("},{"line_number":137,"context_line":"            \u0027--no-public\u0027,"},{"line_number":138,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_cfdf35d4","line":135,"range":{"start_line":134,"start_character":19,"end_line":135,"end_character":58},"in_reply_to":"3ac371cc_244ef5c0","updated":"2016-08-18 14:30:30.000000000","message":"You\u0027re right. I\u0027ll remove it.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        public_group.add_argument("},{"line_number":137,"context_line":"            \u0027--no-public\u0027,"},{"line_number":138,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":139,"context_line":"            help\u003d_(\u0027Not accessible by other tenants. \u0027"},{"line_number":140,"context_line":"                   \u0027Set public to False (default is False).\u0027))"},{"line_number":141,"context_line":"        utils.add_boolean_argument("},{"line_number":142,"context_line":"            parser, \u0027--admin-state-up\u0027,"},{"line_number":143,"context_line":"            help\u003d_(\u0027Update the administrative state of the firewallgroup \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_5f081ada","line":140,"range":{"start_line":139,"start_character":19,"end_line":140,"end_character":60},"updated":"2016-08-18 11:00:16.000000000","message":"Suggested rewording: \u0027Restrict use of the firewall group to the current project.\u0027\n\nBut if you do keep the information about the default, the default for --no-public is True! :)","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        public_group.add_argument("},{"line_number":137,"context_line":"            \u0027--no-public\u0027,"},{"line_number":138,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":139,"context_line":"            help\u003d_(\u0027Not accessible by other tenants. \u0027"},{"line_number":140,"context_line":"                   \u0027Set public to False (default is False).\u0027))"},{"line_number":141,"context_line":"        utils.add_boolean_argument("},{"line_number":142,"context_line":"            parser, \u0027--admin-state-up\u0027,"},{"line_number":143,"context_line":"            help\u003d_(\u0027Update the administrative state of the firewallgroup \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_5a7021a4","line":140,"range":{"start_line":139,"start_character":19,"end_line":140,"end_character":60},"in_reply_to":"3ac371cc_5f081ada","updated":"2016-08-18 14:30:30.000000000","message":"Thanks and that is very complicated :)\nI\u0027ll remove it.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        utils.add_boolean_argument("},{"line_number":142,"context_line":"            parser, \u0027--admin-state-up\u0027,"},{"line_number":143,"context_line":"            help\u003d_(\u0027Update the administrative state of the firewallgroup \u0027"},{"line_number":144,"context_line":"                   \u0027(True meaning \"Up\" and default is True).\u0027))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def args2body(self, parsed_args):"},{"line_number":147,"context_line":"        body \u003d parse_common_args(self.get_client(), parsed_args)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_7c2ee1fb","line":144,"range":{"start_line":144,"start_character":20,"end_line":144,"end_character":59},"updated":"2016-08-18 11:00:16.000000000","message":"Suggested rewording: \u0027Set the admin state of the firewall group (True meaning admin state up, and False meaning admin state down).\n\n(Contrary to my earlier comment in PS1, I don\u0027t think the default should be specified for the update action, just the create.  And that\u0027s because the current state of the FG might be admin state down.  I\u0027m sorry for this vacillation.)","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        utils.add_boolean_argument("},{"line_number":142,"context_line":"            parser, \u0027--admin-state-up\u0027,"},{"line_number":143,"context_line":"            help\u003d_(\u0027Update the administrative state of the firewallgroup \u0027"},{"line_number":144,"context_line":"                   \u0027(True meaning \"Up\" and default is True).\u0027))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def args2body(self, parsed_args):"},{"line_number":147,"context_line":"        body \u003d parse_common_args(self.get_client(), parsed_args)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_3a3a8599","line":144,"range":{"start_line":144,"start_character":20,"end_line":144,"end_character":59},"in_reply_to":"3ac371cc_7c2ee1fb","updated":"2016-08-18 14:30:30.000000000","message":"I\u0027ll fix it.  No warries.  I feel so helpful your comment.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"52cfecf010114059d554e4a7a04ed66170c85af1","unresolved":false,"context_lines":[{"line_number":27,"context_line":"def add_common_args(parser):"},{"line_number":28,"context_line":"    parser.add_argument("},{"line_number":29,"context_line":"        \u0027--description\u0027,"},{"line_number":30,"context_line":"        help\u003d_(\u0027Description for the firewallgroup.\u0027))"},{"line_number":31,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":32,"context_line":"    ingress_group.add_argument("},{"line_number":33,"context_line":"        \u0027--ingress-policy\u0027, metavar\u003d\u0027INGRESS_POLICY\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_2f1b6982","line":30,"range":{"start_line":30,"start_character":28,"end_line":30,"end_character":31},"updated":"2016-08-18 11:39:42.000000000","message":"of","commit_id":"012c5ca4b005a1751a2a4af4272f2e97919bb31b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"0332d5637ab66a6b20442bd1f9724d42d2bbb434","unresolved":false,"context_lines":[{"line_number":27,"context_line":"def add_common_args(parser):"},{"line_number":28,"context_line":"    parser.add_argument("},{"line_number":29,"context_line":"        \u0027--description\u0027,"},{"line_number":30,"context_line":"        help\u003d_(\u0027Description for the firewallgroup.\u0027))"},{"line_number":31,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":32,"context_line":"    ingress_group.add_argument("},{"line_number":33,"context_line":"        \u0027--ingress-policy\u0027, metavar\u003d\u0027INGRESS_POLICY\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_7aafdd7c","line":30,"range":{"start_line":30,"start_character":28,"end_line":30,"end_character":31},"in_reply_to":"3ac371cc_2f1b6982","updated":"2016-08-30 15:26:15.000000000","message":"Done","commit_id":"012c5ca4b005a1751a2a4af4272f2e97919bb31b"}],"neutronclient/neutron/v2_0/fw/v2/firewallpolicy.py":[{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":35,"context_line":"def add_common_args(parser):"},{"line_number":36,"context_line":"    parser.add_argument("},{"line_number":37,"context_line":"        \u0027--description\u0027,"},{"line_number":38,"context_line":"        help\u003d_(\u0027Description for the firewall policy.\u0027))"},{"line_number":39,"context_line":"    parser.add_argument("},{"line_number":40,"context_line":"        \u0027--firewall-rules\u0027, type\u003dlambda x: x.split(),"},{"line_number":41,"context_line":"        help\u003d_(\u0027Ordered list of whitespace-delimited firewall rule \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_a86132ab","line":38,"range":{"start_line":38,"start_character":28,"end_line":38,"end_character":31},"updated":"2016-08-11 15:30:36.000000000","message":"of :)","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":35,"context_line":"def add_common_args(parser):"},{"line_number":36,"context_line":"    parser.add_argument("},{"line_number":37,"context_line":"        \u0027--description\u0027,"},{"line_number":38,"context_line":"        help\u003d_(\u0027Description for the firewall policy.\u0027))"},{"line_number":39,"context_line":"    parser.add_argument("},{"line_number":40,"context_line":"        \u0027--firewall-rules\u0027, type\u003dlambda x: x.split(),"},{"line_number":41,"context_line":"        help\u003d_(\u0027Ordered list of whitespace-delimited firewall rule \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_dcbb4a74","line":38,"range":{"start_line":38,"start_character":28,"end_line":38,"end_character":31},"in_reply_to":"9ad45d7e_a86132ab","updated":"2016-08-17 16:33:30.000000000","message":"Done","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class ShowFirewallPolicy(neutronv20.ShowCommand):"},{"line_number":73,"context_line":"    \"\"\"Show information of a given firewall policy.\"\"\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    resource \u003d \u0027firewall_policy\u0027"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_e8dcca47","line":73,"range":{"start_line":73,"start_character":24,"end_line":73,"end_character":26},"updated":"2016-08-11 15:30:36.000000000","message":"for :)","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class ShowFirewallPolicy(neutronv20.ShowCommand):"},{"line_number":73,"context_line":"    \"\"\"Show information of a given firewall policy.\"\"\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    resource \u003d \u0027firewall_policy\u0027"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_1cb6828a","line":73,"range":{"start_line":73,"start_character":24,"end_line":73,"end_character":26},"in_reply_to":"9ad45d7e_e8dcca47","updated":"2016-08-17 16:33:30.000000000","message":"Done","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        parser.add_argument("},{"line_number":85,"context_line":"            \u0027name\u0027,"},{"line_number":86,"context_line":"            metavar\u003d\u0027NAME\u0027,"},{"line_number":87,"context_line":"            help\u003d_(\u0027Name for the firewall policy.\u0027))"},{"line_number":88,"context_line":"        parser.add_argument("},{"line_number":89,"context_line":"            \u0027--public\u0027,"},{"line_number":90,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_c8b626f8","line":87,"range":{"start_line":87,"start_character":25,"end_line":87,"end_character":28},"updated":"2016-08-11 15:30:36.000000000","message":"of","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        parser.add_argument("},{"line_number":85,"context_line":"            \u0027name\u0027,"},{"line_number":86,"context_line":"            metavar\u003d\u0027NAME\u0027,"},{"line_number":87,"context_line":"            help\u003d_(\u0027Name for the firewall policy.\u0027))"},{"line_number":88,"context_line":"        parser.add_argument("},{"line_number":89,"context_line":"            \u0027--public\u0027,"},{"line_number":90,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_fcba866d","line":87,"range":{"start_line":87,"start_character":25,"end_line":87,"end_character":28},"in_reply_to":"9ad45d7e_c8b626f8","updated":"2016-08-17 16:33:30.000000000","message":"Done","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            metavar\u003d\u0027NAME\u0027,"},{"line_number":87,"context_line":"            help\u003d_(\u0027Name for the firewall policy.\u0027))"},{"line_number":88,"context_line":"        parser.add_argument("},{"line_number":89,"context_line":"            \u0027--public\u0027,"},{"line_number":90,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":91,"context_line":"            help\u003d_(\u0027Create a public policy.\u0027),"},{"line_number":92,"context_line":"            default\u003dargparse.SUPPRESS)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_c529e4e7","line":89,"range":{"start_line":89,"start_character":14,"end_line":89,"end_character":23},"updated":"2016-08-11 15:30:36.000000000","message":"Similar comment as elsewhere: so this means that by default a firewall policy is not public.","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            metavar\u003d\u0027NAME\u0027,"},{"line_number":87,"context_line":"            help\u003d_(\u0027Name for the firewall policy.\u0027))"},{"line_number":88,"context_line":"        parser.add_argument("},{"line_number":89,"context_line":"            \u0027--public\u0027,"},{"line_number":90,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":91,"context_line":"            help\u003d_(\u0027Create a public policy.\u0027),"},{"line_number":92,"context_line":"            default\u003dargparse.SUPPRESS)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_dc622a16","line":89,"range":{"start_line":89,"start_character":14,"end_line":89,"end_character":23},"in_reply_to":"9ad45d7e_c529e4e7","updated":"2016-08-17 16:33:30.000000000","message":"I think we should align the behavior with other resources.  Therefore, it should be \u0027not public\u0027 by default.  In other words, firewall resources should be created in each project by default.  Would you tell me your opinion, please?","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        parser.add_argument("},{"line_number":168,"context_line":"            \u0027--insert-before\u0027,"},{"line_number":169,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"},{"line_number":170,"context_line":"            help\u003d_(\u0027Insert before this rule.\u0027))"},{"line_number":171,"context_line":"        parser.add_argument("},{"line_number":172,"context_line":"            \u0027--insert-after\u0027,"},{"line_number":173,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_2569e0f9","line":170,"range":{"start_line":170,"start_character":20,"end_line":170,"end_character":44},"updated":"2016-08-11 15:30:36.000000000","message":"Suggest specifying what form the supplied rule should take (presumably ID or name?).  \n\nSame comment for next argument.","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        parser.add_argument("},{"line_number":168,"context_line":"            \u0027--insert-before\u0027,"},{"line_number":169,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"},{"line_number":170,"context_line":"            help\u003d_(\u0027Insert before this rule.\u0027))"},{"line_number":171,"context_line":"        parser.add_argument("},{"line_number":172,"context_line":"            \u0027--insert-after\u0027,"},{"line_number":173,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_5c5e3a46","line":170,"range":{"start_line":170,"start_character":20,"end_line":170,"end_character":44},"in_reply_to":"9ad45d7e_2569e0f9","updated":"2016-08-17 16:33:30.000000000","message":"Thank you.  I\u0027ll put additional information.  Please check it :)","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"def _format_firewall_rules(firewall_policy):"},{"line_number":31,"context_line":"    try:"},{"line_number":32,"context_line":"        output \u003d \u0027[\u0027 + \u0027,\\n \u0027.join([rule for rule in"},{"line_number":33,"context_line":"                                    firewall_policy[\u0027firewall_rules\u0027]]) + \u0027]\u0027"},{"line_number":34,"context_line":"        return output"},{"line_number":35,"context_line":"    except (TypeError, KeyError):"},{"line_number":36,"context_line":"        return \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_001e426f","line":33,"range":{"start_line":33,"start_character":36,"end_line":33,"end_character":70},"updated":"2016-08-18 11:00:16.000000000","message":"Does firewall_policy[\u0027firewall_rules\u0027] contain rule names?I don\u0027t think so but wasn\u0027t really sure how to figure out https://review.openstack.org/#/c/311159/41/neutron_fwaas/db/firewall/v2/firewall_db_v2.py@117.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"def _format_firewall_rules(firewall_policy):"},{"line_number":31,"context_line":"    try:"},{"line_number":32,"context_line":"        output \u003d \u0027[\u0027 + \u0027,\\n \u0027.join([rule for rule in"},{"line_number":33,"context_line":"                                    firewall_policy[\u0027firewall_rules\u0027]]) + \u0027]\u0027"},{"line_number":34,"context_line":"        return output"},{"line_number":35,"context_line":"    except (TypeError, KeyError):"},{"line_number":36,"context_line":"        return \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_3be6fde7","line":33,"range":{"start_line":33,"start_character":36,"end_line":33,"end_character":70},"in_reply_to":"3ac371cc_001e426f","updated":"2016-08-18 14:30:30.000000000","message":"I believe we can access like fwaas v1.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        return \u0027\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def add_common_args(parser):"},{"line_number":40,"context_line":"    parser.add_argument("},{"line_number":41,"context_line":"        \u0027--description\u0027,"},{"line_number":42,"context_line":"        help\u003d_(\u0027Description of the firewall policy.\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_e0fb2645","line":39,"range":{"start_line":39,"start_character":4,"end_line":39,"end_character":18},"updated":"2016-08-18 11:00:16.000000000","message":"Do you want this method to be private to this module?","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        return \u0027\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def add_common_args(parser):"},{"line_number":40,"context_line":"    parser.add_argument("},{"line_number":41,"context_line":"        \u0027--description\u0027,"},{"line_number":42,"context_line":"        help\u003d_(\u0027Description of the firewall policy.\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_8ad1a825","line":39,"range":{"start_line":39,"start_character":4,"end_line":39,"end_character":18},"in_reply_to":"3ac371cc_e0fb2645","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                            \u0027description\u0027,"},{"line_number":62,"context_line":"                            \u0027public\u0027,"},{"line_number":63,"context_line":"                            \u0027audited\u0027,"},{"line_number":64,"context_line":"                            \u0027tenant_id\u0027])"},{"line_number":65,"context_line":"    return {FWP: body}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_7c7c21ec","line":64,"range":{"start_line":64,"start_character":29,"end_line":64,"end_character":38},"updated":"2016-08-18 11:00:16.000000000","message":"\"project\" (?)\n\n(Here and throughout.)","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                            \u0027description\u0027,"},{"line_number":62,"context_line":"                            \u0027public\u0027,"},{"line_number":63,"context_line":"                            \u0027audited\u0027,"},{"line_number":64,"context_line":"                            \u0027tenant_id\u0027])"},{"line_number":65,"context_line":"    return {FWP: body}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_ea8dbc31","line":64,"range":{"start_line":64,"start_character":29,"end_line":64,"end_character":38},"in_reply_to":"3ac371cc_7c7c21ec","updated":"2016-08-18 14:30:30.000000000","message":"Currently, we just decided to revert \u0027tenant_id\u0027","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        parser.add_argument("},{"line_number":98,"context_line":"            \u0027--public\u0027,"},{"line_number":99,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":100,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":101,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":102,"context_line":"        parser.add_argument("},{"line_number":103,"context_line":"            \u0027--audited\u0027,"},{"line_number":104,"context_line":"            dest\u003d\u0027audited\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_3c774903","line":101,"range":{"start_line":100,"start_character":20,"end_line":101,"end_character":60},"updated":"2016-08-18 11:00:16.000000000","message":"Same suggested rewording as on create firewall group.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        parser.add_argument("},{"line_number":98,"context_line":"            \u0027--public\u0027,"},{"line_number":99,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":100,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":101,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":102,"context_line":"        parser.add_argument("},{"line_number":103,"context_line":"            \u0027--audited\u0027,"},{"line_number":104,"context_line":"            dest\u003d\u0027audited\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_2a84f408","line":101,"range":{"start_line":100,"start_character":20,"end_line":101,"end_character":60},"in_reply_to":"3ac371cc_3c774903","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            \u0027--audited\u0027,"},{"line_number":104,"context_line":"            dest\u003d\u0027audited\u0027,"},{"line_number":105,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":106,"context_line":"            help\u003d_(\u0027Sets audited to True (default is False).\u0027),"},{"line_number":107,"context_line":"            default\u003dargparse.SUPPRESS)"},{"line_number":108,"context_line":"        add_common_args(parser)"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_bc43396b","line":106,"range":{"start_line":106,"start_character":19,"end_line":106,"end_character":60},"updated":"2016-08-18 11:00:16.000000000","message":"Suggested rewording: \u0027Enable auditing (default is disabled). When auditing is enabled ( ...??? ).\u0027\n\nDo you what it means to have auditing enabled on a firewall policy?  I looked around code and couldn\u0027t figure it out.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            \u0027--audited\u0027,"},{"line_number":104,"context_line":"            dest\u003d\u0027audited\u0027,"},{"line_number":105,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":106,"context_line":"            help\u003d_(\u0027Sets audited to True (default is False).\u0027),"},{"line_number":107,"context_line":"            default\u003dargparse.SUPPRESS)"},{"line_number":108,"context_line":"        add_common_args(parser)"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_2a8514ce","line":106,"range":{"start_line":106,"start_character":19,"end_line":106,"end_character":60},"in_reply_to":"3ac371cc_bc43396b","updated":"2016-08-18 14:30:30.000000000","message":"Thanks and I don\u0027t know about it deeply.  According to v2 SPEC,  following description is described:\n\n* When set to True by the policy owner indicates that the firewall policy has been audited. Each time the firewall policy or the associated firewall rules are changed, this attribute will be set to False and will have to be explicitly set to True through an update operation.\n\nPlease check it and I hope you\u0027ll give me some reply :)","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        public_group.add_argument("},{"line_number":131,"context_line":"            \u0027--public\u0027,"},{"line_number":132,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":133,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":134,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":135,"context_line":"        public_group.add_argument("},{"line_number":136,"context_line":"            \u0027--no-public\u0027,"},{"line_number":137,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_9ad0e0ca","line":134,"range":{"start_line":133,"start_character":19,"end_line":134,"end_character":59},"updated":"2016-08-18 11:00:16.000000000","message":"Same suggested wording as on update firewall group.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        public_group.add_argument("},{"line_number":131,"context_line":"            \u0027--public\u0027,"},{"line_number":132,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":133,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":134,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":135,"context_line":"        public_group.add_argument("},{"line_number":136,"context_line":"            \u0027--no-public\u0027,"},{"line_number":137,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_ea1dbc73","line":134,"range":{"start_line":133,"start_character":19,"end_line":134,"end_character":59},"in_reply_to":"3ac371cc_9ad0e0ca","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        parser.add_argument("},{"line_number":189,"context_line":"            \u0027--insert-before\u0027,"},{"line_number":190,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"},{"line_number":191,"context_line":"            help\u003d_(\u0027Insert before this rule(name or ID).\u0027))"},{"line_number":192,"context_line":"        parser.add_argument("},{"line_number":193,"context_line":"            \u0027--insert-after\u0027,"},{"line_number":194,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_1a587055","line":191,"range":{"start_line":191,"start_character":19,"end_line":191,"end_character":57},"updated":"2016-08-18 11:00:16.000000000","message":"Suggested rewording: \u0027Insert the new rule before this existing rule, specified either by name or by ID.\u0027\n\n(If you keep the original wording, add a space between \u0027rule\u0027 and \u0027(\u0027.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        parser.add_argument("},{"line_number":189,"context_line":"            \u0027--insert-before\u0027,"},{"line_number":190,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"},{"line_number":191,"context_line":"            help\u003d_(\u0027Insert before this rule(name or ID).\u0027))"},{"line_number":192,"context_line":"        parser.add_argument("},{"line_number":193,"context_line":"            \u0027--insert-after\u0027,"},{"line_number":194,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_bbf6745a","line":191,"range":{"start_line":191,"start_character":19,"end_line":191,"end_character":57},"in_reply_to":"3ac371cc_1a587055","updated":"2016-08-18 14:30:30.000000000","message":"I follow you :)","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        parser.add_argument("},{"line_number":193,"context_line":"            \u0027--insert-after\u0027,"},{"line_number":194,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"},{"line_number":195,"context_line":"            help\u003d_(\u0027Insert after this rule(name or ID).\u0027))"},{"line_number":196,"context_line":"        parser.add_argument("},{"line_number":197,"context_line":"            \u0027firewall_rule_id\u0027,"},{"line_number":198,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_400b1a24","line":195,"range":{"start_line":195,"start_character":20,"end_line":195,"end_character":56},"updated":"2016-08-18 11:00:16.000000000","message":"Same comments as on @191.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        parser.add_argument("},{"line_number":193,"context_line":"            \u0027--insert-after\u0027,"},{"line_number":194,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"},{"line_number":195,"context_line":"            help\u003d_(\u0027Insert after this rule(name or ID).\u0027))"},{"line_number":196,"context_line":"        parser.add_argument("},{"line_number":197,"context_line":"            \u0027firewall_rule_id\u0027,"},{"line_number":198,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_3bd3a4d6","line":195,"range":{"start_line":195,"start_character":20,"end_line":195,"end_character":56},"in_reply_to":"3ac371cc_400b1a24","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        parser.add_argument("},{"line_number":197,"context_line":"            \u0027firewall_rule_id\u0027,"},{"line_number":198,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"},{"line_number":199,"context_line":"            help\u003d_(\u0027New rule to insert.\u0027))"},{"line_number":200,"context_line":"        self.add_known_arguments(parser)"},{"line_number":201,"context_line":"        return parser"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_20d37e61","line":199,"range":{"start_line":199,"start_character":19,"end_line":199,"end_character":40},"updated":"2016-08-18 11:00:16.000000000","message":"Should this be: \u0027Name of the rule to be inserted.\u0027 (?)","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        parser.add_argument("},{"line_number":197,"context_line":"            \u0027firewall_rule_id\u0027,"},{"line_number":198,"context_line":"            metavar\u003d\u0027FIREWALL_RULE\u0027,"},{"line_number":199,"context_line":"            help\u003d_(\u0027New rule to insert.\u0027))"},{"line_number":200,"context_line":"        self.add_known_arguments(parser)"},{"line_number":201,"context_line":"        return parser"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_5bd020c9","line":199,"range":{"start_line":199,"start_character":19,"end_line":199,"end_character":40},"in_reply_to":"3ac371cc_20d37e61","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                                                       self.resource,"},{"line_number":208,"context_line":"                                                       parsed_args.id)"},{"line_number":209,"context_line":"        self.call_api(neutron_client, _id, body)"},{"line_number":210,"context_line":"        print((_(\u0027Inserted firewall rule in firewall policy %(id)s\u0027) %"},{"line_number":211,"context_line":"               {\u0027id\u0027: parsed_args.id}), file\u003dself.app.stdout)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"class FirewallPolicyRemoveRule(neutronv20.UpdateCommand):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_607bb67b","line":211,"range":{"start_line":210,"start_character":17,"end_line":211,"end_character":60},"updated":"2016-08-18 11:00:16.000000000","message":"Should the rule name (and/or ID) be included in the message?","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                                                       self.resource,"},{"line_number":208,"context_line":"                                                       parsed_args.id)"},{"line_number":209,"context_line":"        self.call_api(neutron_client, _id, body)"},{"line_number":210,"context_line":"        print((_(\u0027Inserted firewall rule in firewall policy %(id)s\u0027) %"},{"line_number":211,"context_line":"               {\u0027id\u0027: parsed_args.id}), file\u003dself.app.stdout)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"class FirewallPolicyRemoveRule(neutronv20.UpdateCommand):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_1bbd08d8","line":211,"range":{"start_line":210,"start_character":17,"end_line":211,"end_character":60},"in_reply_to":"3ac371cc_607bb67b","updated":"2016-08-18 14:30:30.000000000","message":"Yes, I should.  I\u0027ll insert rule name from body.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"}],"neutronclient/neutron/v2_0/fw/v2/firewallrule.py":[{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        help\u003d_(\u0027Destination IP address or subnet.\u0027))"},{"line_number":42,"context_line":"    parser.add_argument("},{"line_number":43,"context_line":"        \u0027--source-port\u0027,"},{"line_number":44,"context_line":"        help\u003d_(\u0027Source port (integer in [1, 65535] or range in a:b).\u0027))"},{"line_number":45,"context_line":"    parser.add_argument("},{"line_number":46,"context_line":"        \u0027--destination-port\u0027,"},{"line_number":47,"context_line":"        help\u003d_(\u0027Destination port (integer in [1, 65535] or range in \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_f975bfca","line":44,"range":{"start_line":44,"start_character":16,"end_line":44,"end_character":22},"updated":"2016-08-11 15:30:36.000000000","message":"Would it make sense, for this and the next argument, to give an example?","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        help\u003d_(\u0027Destination IP address or subnet.\u0027))"},{"line_number":42,"context_line":"    parser.add_argument("},{"line_number":43,"context_line":"        \u0027--source-port\u0027,"},{"line_number":44,"context_line":"        help\u003d_(\u0027Source port (integer in [1, 65535] or range in a:b).\u0027))"},{"line_number":45,"context_line":"    parser.add_argument("},{"line_number":46,"context_line":"        \u0027--destination-port\u0027,"},{"line_number":47,"context_line":"        help\u003d_(\u0027Destination port (integer in [1, 65535] or range in \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_fc3f26d4","line":44,"range":{"start_line":44,"start_character":16,"end_line":44,"end_character":22},"in_reply_to":"9ad45d7e_f975bfca","updated":"2016-08-17 16:33:30.000000000","message":"Done","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        help\u003d_(\u0027Destination port (integer in [1, 65535] or range in \u0027"},{"line_number":48,"context_line":"               \u0027a:b).\u0027))"},{"line_number":49,"context_line":"    utils.add_boolean_argument("},{"line_number":50,"context_line":"        parser, \u0027--enabled\u0027, dest\u003d\u0027enabled\u0027,"},{"line_number":51,"context_line":"        help\u003d_(\u0027Whether to enable or disable this rule.\u0027))"},{"line_number":52,"context_line":"    parser.add_argument("},{"line_number":53,"context_line":"        \u0027--protocol\u0027, choices\u003d[\u0027tcp\u0027, \u0027udp\u0027, \u0027icmp\u0027, \u0027any\u0027],"},{"line_number":54,"context_line":"        required\u003dis_create,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_59496bcf","line":51,"range":{"start_line":50,"start_character":8,"end_line":51,"end_character":22},"updated":"2016-08-11 15:30:36.000000000","message":"This suggests that the default is disabled. Is that correct?  \n\nFor clarity, I think the help should be something like:\n\nEnables the rule (default is disabled).","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        help\u003d_(\u0027Destination port (integer in [1, 65535] or range in \u0027"},{"line_number":48,"context_line":"               \u0027a:b).\u0027))"},{"line_number":49,"context_line":"    utils.add_boolean_argument("},{"line_number":50,"context_line":"        parser, \u0027--enabled\u0027, dest\u003d\u0027enabled\u0027,"},{"line_number":51,"context_line":"        help\u003d_(\u0027Whether to enable or disable this rule.\u0027))"},{"line_number":52,"context_line":"    parser.add_argument("},{"line_number":53,"context_line":"        \u0027--protocol\u0027, choices\u003d[\u0027tcp\u0027, \u0027udp\u0027, \u0027icmp\u0027, \u0027any\u0027],"},{"line_number":54,"context_line":"        required\u003dis_create,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_b703070d","line":51,"range":{"start_line":50,"start_character":8,"end_line":51,"end_character":22},"in_reply_to":"9ad45d7e_59496bcf","updated":"2016-08-17 16:33:30.000000000","message":"Default value is \u0027True\u0027. Therefore, I\u0027ll add a message like you.  Please refer following DB model:\n\n* https://github.com/openstack/neutron-specs/blob/master/specs/newton/fwaas-api-2.0.rst#firewall-rules","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1c54fbab4c516343ad2a7da5ee4a9d7b72c3d0dc","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                src \u003d \u0027source: \u0027 + str(d[\u0027source_ip_address\u0027]).lower()"},{"line_number":114,"context_line":"                src \u003d src + \u0027(\u0027 + str(d[\u0027source_port\u0027]).lower() + \u0027)\u0027"},{"line_number":115,"context_line":"            else:"},{"line_number":116,"context_line":"                src \u003d \u0027source: none specified\u0027"},{"line_number":117,"context_line":"            val.append(src)"},{"line_number":118,"context_line":"            if \u0027destination_ip_address\u0027 in d and \u0027destination_port\u0027 in d:"},{"line_number":119,"context_line":"                dst \u003d \u0027dest: \u0027 + str(d[\u0027destination_ip_address\u0027]).lower()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_0895de85","line":116,"range":{"start_line":116,"start_character":21,"end_line":116,"end_character":22},"updated":"2016-08-11 15:30:36.000000000","message":"Both ip address/subnet and port are required? (Same question for dst, below.)","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a418cdfa81a8e4204fa05a635f71ce272ec9e3c3","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                src \u003d \u0027source: \u0027 + str(d[\u0027source_ip_address\u0027]).lower()"},{"line_number":114,"context_line":"                src \u003d src + \u0027(\u0027 + str(d[\u0027source_port\u0027]).lower() + \u0027)\u0027"},{"line_number":115,"context_line":"            else:"},{"line_number":116,"context_line":"                src \u003d \u0027source: none specified\u0027"},{"line_number":117,"context_line":"            val.append(src)"},{"line_number":118,"context_line":"            if \u0027destination_ip_address\u0027 in d and \u0027destination_port\u0027 in d:"},{"line_number":119,"context_line":"                dst \u003d \u0027dest: \u0027 + str(d[\u0027destination_ip_address\u0027]).lower()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac969e8_77486f5c","line":116,"range":{"start_line":116,"start_character":21,"end_line":116,"end_character":22},"in_reply_to":"9ad45d7e_0895de85","updated":"2016-08-17 16:33:30.000000000","message":"It\u0027s not necessary(source, destination).","commit_id":"8ef1c8bc459eec1afd7126849367d46a4de7f684"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"FWAAS_FWR \u003d \u0027fwaas_firewall_rule\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def add_common_args(parser, is_create\u003dTrue):"},{"line_number":27,"context_line":"    \"\"\"If is_create is True, protocol and action become mandatory arguments."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    CreateCommand \u003d is_create : True"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_c35c341b","line":26,"range":{"start_line":26,"start_character":4,"end_line":26,"end_character":19},"updated":"2016-08-18 11:00:16.000000000","message":"Do you want this method to be private to this module?","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"FWAAS_FWR \u003d \u0027fwaas_firewall_rule\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def add_common_args(parser, is_create\u003dTrue):"},{"line_number":27,"context_line":"    \"\"\"If is_create is True, protocol and action become mandatory arguments."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    CreateCommand \u003d is_create : True"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_bba4b44a","line":26,"range":{"start_line":26,"start_character":4,"end_line":26,"end_character":19},"in_reply_to":"3ac371cc_c35c341b","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        parser, \u0027--enabled\u0027, dest\u003d\u0027enabled\u0027,"},{"line_number":54,"context_line":"        help\u003d_(\u0027Whether to enable or disable this rule(default is enabled).\u0027))"},{"line_number":55,"context_line":"    parser.add_argument("},{"line_number":56,"context_line":"        \u0027--protocol\u0027, choices\u003d[\u0027tcp\u0027, \u0027udp\u0027, \u0027icmp\u0027, \u0027any\u0027],"},{"line_number":57,"context_line":"        required\u003dis_create,"},{"line_number":58,"context_line":"        type\u003dutils.convert_to_lowercase,"},{"line_number":59,"context_line":"        help\u003d_(\u0027Protocol for the firewall rule.\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_23638843","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":60},"updated":"2016-08-18 11:00:16.000000000","message":"Can you use neutron_lib.constants.IP_PROTOCOL_MAP.values() ?","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"a171e9f73c410769ee72fcb157c59b9946c108db","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        parser, \u0027--enabled\u0027, dest\u003d\u0027enabled\u0027,"},{"line_number":54,"context_line":"        help\u003d_(\u0027Whether to enable or disable this rule(default is enabled).\u0027))"},{"line_number":55,"context_line":"    parser.add_argument("},{"line_number":56,"context_line":"        \u0027--protocol\u0027, choices\u003d[\u0027tcp\u0027, \u0027udp\u0027, \u0027icmp\u0027, \u0027any\u0027],"},{"line_number":57,"context_line":"        required\u003dis_create,"},{"line_number":58,"context_line":"        type\u003dutils.convert_to_lowercase,"},{"line_number":59,"context_line":"        help\u003d_(\u0027Protocol for the firewall rule.\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_bb2e6da2","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":60},"in_reply_to":"3ac371cc_23638843","updated":"2016-08-18 14:35:46.000000000","message":"python-neutronclient doesn\u0027t require neutron_lib.  Therefore I think it cannot.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        help\u003d_(\u0027Source firewallgroup name or ID.\u0027))"},{"line_number":69,"context_line":"    parser.add_argument("},{"line_number":70,"context_line":"        \u0027--destination-firewall-group\u0027, metavar\u003d\u0027DESTINATION_FIREWALL_GROUP\u0027,"},{"line_number":71,"context_line":"        help\u003d_(\u0027Destination firewallgroup name or ID.\u0027))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def common_args2body(parsed_args):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_c3df14d4","line":71,"range":{"start_line":71,"start_character":28,"end_line":71,"end_character":41},"updated":"2016-08-18 11:00:16.000000000","message":"firewall group","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        help\u003d_(\u0027Source firewallgroup name or ID.\u0027))"},{"line_number":69,"context_line":"    parser.add_argument("},{"line_number":70,"context_line":"        \u0027--destination-firewall-group\u0027, metavar\u003d\u0027DESTINATION_FIREWALL_GROUP\u0027,"},{"line_number":71,"context_line":"        help\u003d_(\u0027Destination firewallgroup name or ID.\u0027))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def common_args2body(parsed_args):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_360bb925","line":71,"range":{"start_line":71,"start_character":28,"end_line":71,"end_character":41},"in_reply_to":"3ac371cc_c3df14d4","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            else:"},{"line_number":113,"context_line":"                protocol \u003d \u0027no-protocol\u0027"},{"line_number":114,"context_line":"            val.append(protocol)"},{"line_number":115,"context_line":"            if \u0027source_ip_address\u0027 in d and \u0027source_port\u0027 in d:"},{"line_number":116,"context_line":"                src \u003d \u0027source: \u0027 + str(d[\u0027source_ip_address\u0027]).lower()"},{"line_number":117,"context_line":"                src \u003d src + \u0027(\u0027 + str(d[\u0027source_port\u0027]).lower() + \u0027)\u0027"},{"line_number":118,"context_line":"            else:"},{"line_number":119,"context_line":"                src \u003d \u0027source: none specified\u0027"},{"line_number":120,"context_line":"            val.append(src)"},{"line_number":121,"context_line":"            if \u0027destination_ip_address\u0027 in d and \u0027destination_port\u0027 in d:"},{"line_number":122,"context_line":"                dst \u003d \u0027dest: \u0027 + str(d[\u0027destination_ip_address\u0027]).lower()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_6640ee07","line":119,"range":{"start_line":115,"start_character":12,"end_line":119,"end_character":46},"updated":"2016-08-18 11:00:16.000000000","message":"I guess I\u0027m still confused, because you don\u0027t allow for the following cases:\n\n   \u0027source_ip_address\u0027 in d and \u0027source_port\u0027 not in d\n   \n   \u0027source_ip_address\u0027 not in d and \u0027source_port\u0027 in d\n\nSorry if I\u0027m not understanding something here.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            else:"},{"line_number":113,"context_line":"                protocol \u003d \u0027no-protocol\u0027"},{"line_number":114,"context_line":"            val.append(protocol)"},{"line_number":115,"context_line":"            if \u0027source_ip_address\u0027 in d and \u0027source_port\u0027 in d:"},{"line_number":116,"context_line":"                src \u003d \u0027source: \u0027 + str(d[\u0027source_ip_address\u0027]).lower()"},{"line_number":117,"context_line":"                src \u003d src + \u0027(\u0027 + str(d[\u0027source_port\u0027]).lower() + \u0027)\u0027"},{"line_number":118,"context_line":"            else:"},{"line_number":119,"context_line":"                src \u003d \u0027source: none specified\u0027"},{"line_number":120,"context_line":"            val.append(src)"},{"line_number":121,"context_line":"            if \u0027destination_ip_address\u0027 in d and \u0027destination_port\u0027 in d:"},{"line_number":122,"context_line":"                dst \u003d \u0027dest: \u0027 + str(d[\u0027destination_ip_address\u0027]).lower()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_7166dbed","line":119,"range":{"start_line":115,"start_character":12,"end_line":119,"end_character":46},"in_reply_to":"3ac371cc_6640ee07","updated":"2016-08-18 14:30:30.000000000","message":"I don\u0027t change the logic from FWaaS v1.  I checked again and understand.  Your case is definitely missed in this logic.\nI\u0027ll fix it.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        parser.add_argument("},{"line_number":151,"context_line":"            \u0027--public\u0027,"},{"line_number":152,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":153,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":154,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":155,"context_line":"        parser.add_argument("},{"line_number":156,"context_line":"            \u0027--ip-version\u0027,"},{"line_number":157,"context_line":"            type\u003dint, choices\u003d[4, 6], default\u003d4,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_a6230655","line":154,"range":{"start_line":153,"start_character":19,"end_line":154,"end_character":60},"updated":"2016-08-18 11:00:16.000000000","message":"Same suggested wording as on create firewall group.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        parser.add_argument("},{"line_number":151,"context_line":"            \u0027--public\u0027,"},{"line_number":152,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":153,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":154,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":155,"context_line":"        parser.add_argument("},{"line_number":156,"context_line":"            \u0027--ip-version\u0027,"},{"line_number":157,"context_line":"            type\u003dint, choices\u003d[4, 6], default\u003d4,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_f11dab73","line":154,"range":{"start_line":153,"start_character":19,"end_line":154,"end_character":60},"in_reply_to":"3ac371cc_a6230655","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        public_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":173,"context_line":"        public_group.add_argument("},{"line_number":174,"context_line":"            \u0027--public\u0027,"},{"line_number":175,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":176,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":177,"context_line":"        public_group.add_argument("},{"line_number":178,"context_line":"            \u0027--no-public\u0027,"},{"line_number":179,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_86cc0a8a","line":176,"range":{"start_line":175,"start_character":19,"end_line":176,"end_character":58},"updated":"2016-08-18 11:00:16.000000000","message":"Same suggested wording, here and for --no-public, as on firewall group.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        public_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":173,"context_line":"        public_group.add_argument("},{"line_number":174,"context_line":"            \u0027--public\u0027,"},{"line_number":175,"context_line":"            help\u003d_(\u0027Accessible by other tenants. \u0027"},{"line_number":176,"context_line":"                   \u0027Set public to True (default is False).\u0027))"},{"line_number":177,"context_line":"        public_group.add_argument("},{"line_number":178,"context_line":"            \u0027--no-public\u0027,"},{"line_number":179,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_d1050f14","line":176,"range":{"start_line":175,"start_character":19,"end_line":176,"end_character":58},"in_reply_to":"3ac371cc_86cc0a8a","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        return {self.resource: common_args2body(parsed_args)}"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class DeleteFirewallRule(neutronv20.DeleteCommand):"},{"line_number":192,"context_line":"    \"\"\"Delete a given firewall rule.\"\"\""},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    resource \u003d FWR"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_66e62ee9","line":191,"range":{"start_line":191,"start_character":9,"end_line":191,"end_character":22},"updated":"2016-08-18 11:00:16.000000000","message":"Are there arguments (policy name or ID, and rule name or ID)?  Suggest making it clear to the user that this is this deleting a rule from a policy, as opposed to deleting the rule from all policies.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        return {self.resource: common_args2body(parsed_args)}"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class DeleteFirewallRule(neutronv20.DeleteCommand):"},{"line_number":192,"context_line":"    \"\"\"Delete a given firewall rule.\"\"\""},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    resource \u003d FWR"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_72b25a4d","line":191,"range":{"start_line":191,"start_character":9,"end_line":191,"end_character":22},"in_reply_to":"3ac371cc_66e62ee9","updated":"2016-08-18 14:30:30.000000000","message":"Hmm, there is also a firewall_rule which is not associated with any firewall_policy.  I think that for user point of view, this method just deletes a given firewall_rule.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"52cfecf010114059d554e4a7a04ed66170c85af1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    parser.add_argument("},{"line_number":33,"context_line":"        \u0027--name\u0027,"},{"line_number":34,"context_line":"        help\u003d_(\u0027Name for the firewall rule.\u0027))"},{"line_number":35,"context_line":"    parser.add_argument("},{"line_number":36,"context_line":"        \u0027--description\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Description for the firewall rule.\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_4fcce5ba","line":34,"range":{"start_line":34,"start_character":21,"end_line":34,"end_character":24},"updated":"2016-08-18 11:39:42.000000000","message":"of","commit_id":"012c5ca4b005a1751a2a4af4272f2e97919bb31b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"0332d5637ab66a6b20442bd1f9724d42d2bbb434","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    parser.add_argument("},{"line_number":33,"context_line":"        \u0027--name\u0027,"},{"line_number":34,"context_line":"        help\u003d_(\u0027Name for the firewall rule.\u0027))"},{"line_number":35,"context_line":"    parser.add_argument("},{"line_number":36,"context_line":"        \u0027--description\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Description for the firewall rule.\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_9b7a98bb","line":34,"range":{"start_line":34,"start_character":21,"end_line":34,"end_character":24},"in_reply_to":"3ac371cc_4fcce5ba","updated":"2016-08-30 15:26:15.000000000","message":"Done","commit_id":"012c5ca4b005a1751a2a4af4272f2e97919bb31b"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"52cfecf010114059d554e4a7a04ed66170c85af1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        help\u003d_(\u0027Name for the firewall rule.\u0027))"},{"line_number":35,"context_line":"    parser.add_argument("},{"line_number":36,"context_line":"        \u0027--description\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Description for the firewall rule.\u0027))"},{"line_number":38,"context_line":"    parser.add_argument("},{"line_number":39,"context_line":"        \u0027--source-ip-address\u0027,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Source IP address or subnet.\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_6f6c4108","line":37,"range":{"start_line":37,"start_character":28,"end_line":37,"end_character":31},"updated":"2016-08-18 11:39:42.000000000","message":"of","commit_id":"012c5ca4b005a1751a2a4af4272f2e97919bb31b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"0332d5637ab66a6b20442bd1f9724d42d2bbb434","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        help\u003d_(\u0027Name for the firewall rule.\u0027))"},{"line_number":35,"context_line":"    parser.add_argument("},{"line_number":36,"context_line":"        \u0027--description\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Description for the firewall rule.\u0027))"},{"line_number":38,"context_line":"    parser.add_argument("},{"line_number":39,"context_line":"        \u0027--source-ip-address\u0027,"},{"line_number":40,"context_line":"        help\u003d_(\u0027Source IP address or subnet.\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_db80908d","line":37,"range":{"start_line":37,"start_character":28,"end_line":37,"end_character":31},"in_reply_to":"3ac371cc_6f6c4108","updated":"2016-08-30 15:26:15.000000000","message":"Done","commit_id":"012c5ca4b005a1751a2a4af4272f2e97919bb31b"}],"neutronclient/osc/v2/fwaas/common.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"587b23d9c167f7c322aa587394a5a6a525287462","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def get_id(client, res, id_or_name):"},{"line_number":21,"context_line":"    return client.find_resource("},{"line_number":22,"context_line":"        res, id_or_name, cmd_resource\u003dconst.CMD_RESOURCE_MAP.get(res))[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a89bdaa_b96d6a9a","line":20,"updated":"2016-09-06 04:30:37.000000000","message":"Honestly I don\u0027t see too many common.py in many places.\nIn this case, this method just adds fwaas_ prefix and retrieve \u0027id\u0027.\nI think you can directly call client.find_resource in each command as the number of callers is not so many.","commit_id":"1ef483d9148900f8fe5e5d76c1446dc0c1bba35f"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea2ceb1526b9b67628605013f229b8904186d287","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def get_id(client, res, id_or_name):"},{"line_number":21,"context_line":"    return client.find_resource("},{"line_number":22,"context_line":"        res, id_or_name, cmd_resource\u003dconst.CMD_RESOURCE_MAP.get(res))[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a89bdaa_cf15fb9b","line":20,"in_reply_to":"9a89bdaa_b96d6a9a","updated":"2016-09-06 08:31:13.000000000","message":"I surely think there are many \u0027common.py\u0027.  OK. I will call this method directory.","commit_id":"1ef483d9148900f8fe5e5d76c1446dc0c1bba35f"}],"neutronclient/osc/v2/fwaas/constants.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"587b23d9c167f7c322aa587394a5a6a525287462","unresolved":false,"context_lines":[{"line_number":22,"context_line":"FWRS \u003d \u0027firewall_rules\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"CMD_RESOURCE_MAP \u003d dict("},{"line_number":25,"context_line":"    (res, \u0027fwaas_\u0027 + res) for res in [FWG, FWGS, FWP, FWPS, FWR, FWRS]"},{"line_number":26,"context_line":")"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a89bdaa_36e96981","line":25,"range":{"start_line":25,"start_character":10,"end_line":25,"end_character":25},"updated":"2016-09-06 04:30:37.000000000","message":"This just appends \u0027fwaas_\u0027 prefix. Do we really need this map?","commit_id":"1ef483d9148900f8fe5e5d76c1446dc0c1bba35f"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea2ceb1526b9b67628605013f229b8904186d287","unresolved":false,"context_lines":[{"line_number":22,"context_line":"FWRS \u003d \u0027firewall_rules\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"CMD_RESOURCE_MAP \u003d dict("},{"line_number":25,"context_line":"    (res, \u0027fwaas_\u0027 + res) for res in [FWG, FWGS, FWP, FWPS, FWR, FWRS]"},{"line_number":26,"context_line":")"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a89bdaa_af9517e5","line":25,"range":{"start_line":25,"start_character":10,"end_line":25,"end_character":25},"in_reply_to":"9a89bdaa_36e96981","updated":"2016-09-06 08:31:13.000000000","message":"It overdoes for this prefix addition.  I\u0027ll remove it.","commit_id":"1ef483d9148900f8fe5e5d76c1446dc0c1bba35f"}],"neutronclient/osc/v2/fwaas/firewallgroup.py":[{"author":{"_account_id":20686,"name":"Sarath Chandra Mekala","username":"SarathMekala","inactive":true},"change_message_id":"c27d56838642fd347db9067bc106893df28e3472","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"FWG \u003d \u0027firewall_group\u0027"},{"line_number":22,"context_line":"FWAAS_FWG \u003d \u0027fwaas_firewall_group\u0027"},{"line_number":23,"context_line":"INGRESS_FWP_ID \u003d \u0027ingress_firewall_policy_id\u0027"},{"line_number":24,"context_line":"EGRESS_FWP_ID \u003d \u0027egress_firewall_policy_id\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_dd3e8b28","line":23,"updated":"2016-08-26 11:06:47.000000000","message":"NIT: Can you rename these variables to\nINGRESS_FW_PID\nand\nEGRESS_FW_PID","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"FWG \u003d \u0027firewall_group\u0027"},{"line_number":22,"context_line":"FWAAS_FWG \u003d \u0027fwaas_firewall_group\u0027"},{"line_number":23,"context_line":"INGRESS_FWP_ID \u003d \u0027ingress_firewall_policy_id\u0027"},{"line_number":24,"context_line":"EGRESS_FWP_ID \u003d \u0027egress_firewall_policy_id\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_86a80add","line":23,"in_reply_to":"3ac371cc_dd3e8b28","updated":"2016-08-30 15:25:47.000000000","message":"FW_PID seems \u0027policy id of firewall\u0027 and confuses \u0027PID(Process ID)\u0027.  In fact, this is \u0027ID of firewall policy\u0027.  Therefore, I\u0027ll keep it.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"9c038bdfd952920ee669e9cbe3f138a5f34000b5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"def _add_common_args(parser):"},{"line_number":28,"context_line":"    parser.add_argument("},{"line_number":29,"context_line":"        \u0027--description\u0027,"},{"line_number":30,"context_line":"        help\u003d_(\u0027Description of the firewall group.\u0027))"},{"line_number":31,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":32,"context_line":"    ingress_group.add_argument("},{"line_number":33,"context_line":"        \u0027--ingress-policy\u0027, metavar\u003d\u0027INGRESS_POLICY\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ac06dbe_d35f9b0c","line":30,"range":{"start_line":30,"start_character":49,"end_line":30,"end_character":50},"updated":"2016-08-19 21:14:26.000000000","message":"General comment: No periods in help text","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":27,"context_line":"def _add_common_args(parser):"},{"line_number":28,"context_line":"    parser.add_argument("},{"line_number":29,"context_line":"        \u0027--description\u0027,"},{"line_number":30,"context_line":"        help\u003d_(\u0027Description of the firewall group.\u0027))"},{"line_number":31,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":32,"context_line":"    ingress_group.add_argument("},{"line_number":33,"context_line":"        \u0027--ingress-policy\u0027, metavar\u003d\u0027INGRESS_POLICY\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_e6b71638","line":30,"in_reply_to":"1ac06dbe_d35f9b0c","updated":"2016-08-30 15:25:47.000000000","message":"Thanks.  I\u0027ll check all files.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":5109,"name":"chandanc","email":"chandan.dutta.chowdhury@gmail.com","username":"chandanc"},"change_message_id":"a630b392eed645fdec06c345936e7804b2afb052","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \u0027--ingress-policy\u0027, metavar\u003d\u0027INGRESS_POLICY\u0027,"},{"line_number":34,"context_line":"        dest\u003d\u0027ingress_firewall_policy\u0027,"},{"line_number":35,"context_line":"        help\u003d_(\u0027Ingress firewall policy name or ID.\u0027))"},{"line_number":36,"context_line":"    ingress_group.add_argument("},{"line_number":37,"context_line":"        \u0027--no-ingress-policy\u0027,"},{"line_number":38,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":39,"context_line":"        help\u003d_(\u0027Detach ingress firewall policy from the firewall group.\u0027))"},{"line_number":40,"context_line":"    egress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":41,"context_line":"    egress_group.add_argument("},{"line_number":42,"context_line":"        \u0027--egress-policy\u0027, metavar\u003d\u0027EGRESS_POLICY\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ac06dbe_a01f43b6","line":39,"range":{"start_line":36,"start_character":0,"end_line":39,"end_character":74},"updated":"2016-08-24 14:51:05.000000000","message":"I think the should move to the set command. This should be default for create","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":6995,"name":"Sridar Kandaswamy","email":"skandasw@yahoo.com","username":"skandasw"},"change_message_id":"03b857dedbaedad9f3bd637bc3f464721be9fc89","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \u0027--ingress-policy\u0027, metavar\u003d\u0027INGRESS_POLICY\u0027,"},{"line_number":34,"context_line":"        dest\u003d\u0027ingress_firewall_policy\u0027,"},{"line_number":35,"context_line":"        help\u003d_(\u0027Ingress firewall policy name or ID.\u0027))"},{"line_number":36,"context_line":"    ingress_group.add_argument("},{"line_number":37,"context_line":"        \u0027--no-ingress-policy\u0027,"},{"line_number":38,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":39,"context_line":"        help\u003d_(\u0027Detach ingress firewall policy from the firewall group.\u0027))"},{"line_number":40,"context_line":"    egress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":41,"context_line":"    egress_group.add_argument("},{"line_number":42,"context_line":"        \u0027--egress-policy\u0027, metavar\u003d\u0027EGRESS_POLICY\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_6489b0ca","line":39,"range":{"start_line":36,"start_character":0,"end_line":39,"end_character":74},"in_reply_to":"1ac06dbe_a01f43b6","updated":"2016-08-26 06:50:18.000000000","message":"On CR:\n\nwe could specify --ingress-policy \u003cpolicy-id\u003e\nor we may just leave this option out.\n\n--no-ingress-policy should be applicable only for the update case - if i understand correctly. If this option can be provided on CR, we will need to update the help string.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":5109,"name":"chandanc","email":"chandan.dutta.chowdhury@gmail.com","username":"chandanc"},"change_message_id":"ddf8acd53741f8f4788c9eb77dc7c5036453be32","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \u0027--ingress-policy\u0027, metavar\u003d\u0027INGRESS_POLICY\u0027,"},{"line_number":34,"context_line":"        dest\u003d\u0027ingress_firewall_policy\u0027,"},{"line_number":35,"context_line":"        help\u003d_(\u0027Ingress firewall policy name or ID.\u0027))"},{"line_number":36,"context_line":"    ingress_group.add_argument("},{"line_number":37,"context_line":"        \u0027--no-ingress-policy\u0027,"},{"line_number":38,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":39,"context_line":"        help\u003d_(\u0027Detach ingress firewall policy from the firewall group.\u0027))"},{"line_number":40,"context_line":"    egress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":41,"context_line":"    egress_group.add_argument("},{"line_number":42,"context_line":"        \u0027--egress-policy\u0027, metavar\u003d\u0027EGRESS_POLICY\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_6f3b0839","line":39,"range":{"start_line":36,"start_character":0,"end_line":39,"end_character":74},"in_reply_to":"fa7ab95a_6489b0ca","updated":"2016-08-27 07:44:08.000000000","message":"Yes thats what I meant. It should make the create command simpler","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    ingress_group.add_argument("},{"line_number":37,"context_line":"        \u0027--no-ingress-policy\u0027,"},{"line_number":38,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":39,"context_line":"        help\u003d_(\u0027Detach ingress firewall policy from the firewall group.\u0027))"},{"line_number":40,"context_line":"    egress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":41,"context_line":"    egress_group.add_argument("},{"line_number":42,"context_line":"        \u0027--egress-policy\u0027, metavar\u003d\u0027EGRESS_POLICY\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_2639fea4","line":39,"in_reply_to":"fa7ab95a_6f3b0839","updated":"2016-08-30 15:25:47.000000000","message":"Sridar and chancanc,\n\nThanks for your comment.  I\u0027ll update as follows:\n\n* --ingress-policy  and --egress-policy\n\nStay common(Create and Set)\n\n* --no-ingress-policy and --no-egress-policy\n\nMove to \u0027Set\u0027","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":5109,"name":"chandanc","email":"chandan.dutta.chowdhury@gmail.com","username":"chandanc"},"change_message_id":"a630b392eed645fdec06c345936e7804b2afb052","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \u0027--egress-policy\u0027, metavar\u003d\u0027EGRESS_POLICY\u0027,"},{"line_number":43,"context_line":"        dest\u003d\u0027egress_firewall_policy\u0027,"},{"line_number":44,"context_line":"        help\u003d_(\u0027Egress firewall policy name or ID.\u0027))"},{"line_number":45,"context_line":"    egress_group.add_argument("},{"line_number":46,"context_line":"        \u0027--no-egress-policy\u0027,"},{"line_number":47,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":48,"context_line":"        help\u003d_(\u0027Detach egress firewall policy from the firewall group.\u0027))"},{"line_number":49,"context_line":"    public_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":50,"context_line":"    public_group.add_argument("},{"line_number":51,"context_line":"        \u0027--public\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ac06dbe_c0635f40","line":48,"range":{"start_line":45,"start_character":0,"end_line":48,"end_character":73},"updated":"2016-08-24 14:51:05.000000000","message":"Same as above","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    egress_group.add_argument("},{"line_number":46,"context_line":"        \u0027--no-egress-policy\u0027,"},{"line_number":47,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":48,"context_line":"        help\u003d_(\u0027Detach egress firewall policy from the firewall group.\u0027))"},{"line_number":49,"context_line":"    public_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":50,"context_line":"    public_group.add_argument("},{"line_number":51,"context_line":"        \u0027--public\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_86448a1b","line":48,"in_reply_to":"1ac06dbe_c0635f40","updated":"2016-08-30 15:25:47.000000000","message":"I\u0027ll fix it.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":20686,"name":"Sarath Chandra Mekala","username":"SarathMekala","inactive":true},"change_message_id":"c27d56838642fd347db9067bc106893df28e3472","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":48,"context_line":"        help\u003d_(\u0027Detach egress firewall policy from the firewall group.\u0027))"},{"line_number":49,"context_line":"    public_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":50,"context_line":"    public_group.add_argument("},{"line_number":51,"context_line":"        \u0027--public\u0027,"},{"line_number":52,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":53,"context_line":"        help\u003d_(\u0027Make the firewall group public, which allows it to be \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_c55eb111","line":50,"updated":"2016-08-26 11:06:47.000000000","message":"please make public a boolean parameter","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":48,"context_line":"        help\u003d_(\u0027Detach egress firewall policy from the firewall group.\u0027))"},{"line_number":49,"context_line":"    public_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":50,"context_line":"    public_group.add_argument("},{"line_number":51,"context_line":"        \u0027--public\u0027,"},{"line_number":52,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":53,"context_line":"        help\u003d_(\u0027Make the firewall group public, which allows it to be \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_6624e65f","line":50,"in_reply_to":"3ac371cc_c55eb111","updated":"2016-08-30 15:25:47.000000000","message":"I think we should align the behavior to other resources.  Therefore, I\u0027d like to keep it.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9ae1d8802100ed3cea7e172ed4d1f8ea4a719896","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               \u0027used in all projects (as opposed to the default, \u0027"},{"line_number":55,"context_line":"               \u0027which is to restrict its use to the current project).\u0027))"},{"line_number":56,"context_line":"    public_group.add_argument("},{"line_number":57,"context_line":"        \u0027--no-public\u0027,"},{"line_number":58,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":59,"context_line":"        help\u003d_(\u0027Restrict use of the firewall group to the current project.\u0027))"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_4572c1ae","line":57,"range":{"start_line":57,"start_character":9,"end_line":57,"end_character":20},"updated":"2016-08-19 09:54:21.000000000","message":"Does --private make more sense?\nOSC command line guidelines suggests to use meaningful name rather than \u0027no\u0027 if there is such name.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               \u0027used in all projects (as opposed to the default, \u0027"},{"line_number":55,"context_line":"               \u0027which is to restrict its use to the current project).\u0027))"},{"line_number":56,"context_line":"    public_group.add_argument("},{"line_number":57,"context_line":"        \u0027--no-public\u0027,"},{"line_number":58,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":59,"context_line":"        help\u003d_(\u0027Restrict use of the firewall group to the current project.\u0027))"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_66db0650","line":57,"in_reply_to":"3ac371cc_4572c1ae","updated":"2016-08-30 15:25:47.000000000","message":"I agree with you.  I think it\u0027s  more easy to understand for customers.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":6995,"name":"Sridar Kandaswamy","email":"skandasw@yahoo.com","username":"skandasw"},"change_message_id":"03b857dedbaedad9f3bd637bc3f464721be9fc89","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \u0027--no-public\u0027,"},{"line_number":58,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":59,"context_line":"        help\u003d_(\u0027Restrict use of the firewall group to the current project.\u0027))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def parse_common_args(client, parsed_args):"},{"line_number":63,"context_line":"    body \u003d {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_1fa59103","line":60,"updated":"2016-08-26 06:50:18.000000000","message":"Yushiro, may be i am missing something - we will need ports too for the port association correct ?","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \u0027--no-public\u0027,"},{"line_number":58,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":59,"context_line":"        help\u003d_(\u0027Restrict use of the firewall group to the current project.\u0027))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def parse_common_args(client, parsed_args):"},{"line_number":63,"context_line":"    body \u003d {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_a6d0ae20","line":60,"in_reply_to":"fa7ab95a_1fa59103","updated":"2016-08-30 15:25:47.000000000","message":"You\u0027re right!  I forgot to add \u0027--ports\u0027 option.  I\u0027ll add it.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9ae1d8802100ed3cea7e172ed4d1f8ea4a719896","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    return body"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class ListFirewallGroup(neutronv20.ListCommand):"},{"line_number":86,"context_line":"    \"\"\"List firewall groups that belong to a given tenant.\"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    resource \u003d FWG"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_e5e64d43","line":85,"range":{"start_line":85,"start_character":24,"end_line":85,"end_character":46},"updated":"2016-08-19 09:54:21.000000000","message":"You should not inherit neutronV20 command. You should inherit osc_lib command classe.\n\nneutronv20.ListCommand is for neutron CLI.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    return body"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class ListFirewallGroup(neutronv20.ListCommand):"},{"line_number":86,"context_line":"    \"\"\"List firewall groups that belong to a given tenant.\"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    resource \u003d FWG"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_e69d5667","line":85,"in_reply_to":"1ac06dbe_f3e7373e","updated":"2016-08-30 15:25:47.000000000","message":"Thanks for your comments.  I misunderstood it.  I\u0027ll use command.Lister and command.ShowOne.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"9c038bdfd952920ee669e9cbe3f138a5f34000b5","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    return body"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class ListFirewallGroup(neutronv20.ListCommand):"},{"line_number":86,"context_line":"    \"\"\"List firewall groups that belong to a given tenant.\"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    resource \u003d FWG"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ac06dbe_f3e7373e","line":85,"range":{"start_line":85,"start_character":24,"end_line":85,"end_character":46},"in_reply_to":"3ac371cc_e5e64d43","updated":"2016-08-19 21:14:26.000000000","message":"+1 \n\nUse command.Lister from osc_lib\nSimilarly for all other classes use command.Command or command.ShowOne wherever applicable","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"9c038bdfd952920ee669e9cbe3f138a5f34000b5","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class ListFirewallGroup(neutronv20.ListCommand):"},{"line_number":86,"context_line":"    \"\"\"List firewall groups that belong to a given tenant.\"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    resource \u003d FWG"},{"line_number":89,"context_line":"    shadow_resource \u003d FWAAS_FWG"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ac06dbe_13d5b342","line":86,"range":{"start_line":86,"start_character":57,"end_line":86,"end_character":58},"updated":"2016-08-19 21:14:26.000000000","message":"General comment: Drop the period here","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class ListFirewallGroup(neutronv20.ListCommand):"},{"line_number":86,"context_line":"    \"\"\"List firewall groups that belong to a given tenant.\"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    resource \u003d FWG"},{"line_number":89,"context_line":"    shadow_resource \u003d FWAAS_FWG"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_268ade1b","line":86,"in_reply_to":"1ac06dbe_13d5b342","updated":"2016-08-30 15:25:47.000000000","message":"I\u0027ll check all files.  Thanks.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":20686,"name":"Sarath Chandra Mekala","username":"SarathMekala","inactive":true},"change_message_id":"c27d56838642fd347db9067bc106893df28e3472","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        parser.add_argument("},{"line_number":115,"context_line":"            \u0027name\u0027,"},{"line_number":116,"context_line":"            help\u003d_(\u0027Name for the firewall group.\u0027))"},{"line_number":117,"context_line":"        parser.add_argument("},{"line_number":118,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":119,"context_line":"            dest\u003d\u0027admin_state\u0027, action\u003d\u0027store_false\u0027,"},{"line_number":120,"context_line":"            help\u003d_(\u0027Set admin state down (default is up)\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_85cdd95f","line":117,"updated":"2016-08-26 11:06:47.000000000","message":"make this a boolean and rename it to admin_state_up : {true/false}\n\nIt should be similar to how its handled in SetFirewallGroup method","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        parser.add_argument("},{"line_number":115,"context_line":"            \u0027name\u0027,"},{"line_number":116,"context_line":"            help\u003d_(\u0027Name for the firewall group.\u0027))"},{"line_number":117,"context_line":"        parser.add_argument("},{"line_number":118,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":119,"context_line":"            dest\u003d\u0027admin_state\u0027, action\u003d\u0027store_false\u0027,"},{"line_number":120,"context_line":"            help\u003d_(\u0027Set admin state down (default is up)\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_86864ad9","line":117,"in_reply_to":"3ac371cc_85cdd95f","updated":"2016-08-30 15:25:47.000000000","message":"I think so too but I\u0027m still confusing the compatibility b/w OSC plugin and python-neutronclient.  I found that other OSC plugin implements as follows instead of \u0027--admin-state-down\u0027 or \u0027--admin-state-up\u0027\n\n* enable (equal to --admin-state-up)\n* disable (equal to --admin-state-down)\n\nPlease let me change for above at once.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"9c038bdfd952920ee669e9cbe3f138a5f34000b5","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            \u0027name\u0027,"},{"line_number":116,"context_line":"            help\u003d_(\u0027Name for the firewall group.\u0027))"},{"line_number":117,"context_line":"        parser.add_argument("},{"line_number":118,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":119,"context_line":"            dest\u003d\u0027admin_state\u0027, action\u003d\u0027store_false\u0027,"},{"line_number":120,"context_line":"            help\u003d_(\u0027Set admin state down (default is up)\u0027))"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ac06dbe_7326a769","line":118,"range":{"start_line":118,"start_character":13,"end_line":118,"end_character":31},"updated":"2016-08-19 21:14:26.000000000","message":"use \u0027enable\u0027 as argument for admin_state_up","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            \u0027name\u0027,"},{"line_number":116,"context_line":"            help\u003d_(\u0027Name for the firewall group.\u0027))"},{"line_number":117,"context_line":"        parser.add_argument("},{"line_number":118,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":119,"context_line":"            dest\u003d\u0027admin_state\u0027, action\u003d\u0027store_false\u0027,"},{"line_number":120,"context_line":"            help\u003d_(\u0027Set admin state down (default is up)\u0027))"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_a66fce29","line":118,"in_reply_to":"1ac06dbe_7326a769","updated":"2016-08-30 15:25:47.000000000","message":"I\u0027ll fix it.","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"b394b5e9f3e18e9ffffe36791cca4291b1da9e2b","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        port_group.add_argument("},{"line_number":219,"context_line":"            \u0027--ports\u0027,"},{"line_number":220,"context_line":"            default\u003d[], type\u003dlambda x: x.split(),"},{"line_number":221,"context_line":"            help\u003d_(\u0027Ordered list of whitespace-delimited ports \u0027"},{"line_number":222,"context_line":"                   \u0027names or IDs; e.g., --ports \\\"port1 port2\\\"\u0027))"},{"line_number":223,"context_line":"        port_group.add_argument("},{"line_number":224,"context_line":"            \u0027--no-ports\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa7ab95a_a0c83256","line":221,"range":{"start_line":221,"start_character":57,"end_line":221,"end_character":62},"updated":"2016-08-30 15:42:56.000000000","message":"port (singular)","commit_id":"6e5a58d4c7b4535f907ede45b6fb9f408169519f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ba77f3b2348be665ef0ab0d12daa7a36e6622615","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":22,"context_line":"from neutronclient.osc.v2 import utils as v2_utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from osc_lib.command import command"},{"line_number":25,"context_line":"from osc_lib import exceptions"},{"line_number":26,"context_line":"from osc_lib import utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_9c2ec1f8","line":26,"range":{"start_line":24,"start_character":0,"end_line":26,"end_character":25},"updated":"2016-09-01 09:40:00.000000000","message":"The recommended order of import grouping is standard, third-party and project. osc_lib should be moved before neutronclient.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"bfd1abbe1bb28a7e90c210503b5ce9517bcc6ef1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":22,"context_line":"from neutronclient.osc.v2 import utils as v2_utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from osc_lib.command import command"},{"line_number":25,"context_line":"from osc_lib import exceptions"},{"line_number":26,"context_line":"from osc_lib import utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_bdf61cf7","line":26,"range":{"start_line":24,"start_character":0,"end_line":26,"end_character":25},"in_reply_to":"fa7ab95a_9c2ec1f8","updated":"2016-09-01 13:16:01.000000000","message":"I\u0027ll fix it.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"36ef2163cd08d672b6879172fe413bc07a26cea3","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class CreateFirewallGroup(command.ShowOne):"},{"line_number":115,"context_line":"    \"\"\"Create a firewall group\"\"\""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def get_parser(self, prog_name):"},{"line_number":118,"context_line":"        parser \u003d super(CreateFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_13ae1785","line":115,"range":{"start_line":115,"start_character":4,"end_line":115,"end_character":33},"updated":"2016-09-01 11:30:31.000000000","message":"You need to follow the OSC convention.\n\n Create a new firewall group","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"7fc1e5924027ff4f135729979cd0bf515a572300","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class CreateFirewallGroup(command.ShowOne):"},{"line_number":115,"context_line":"    \"\"\"Create a firewall group\"\"\""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def get_parser(self, prog_name):"},{"line_number":118,"context_line":"        parser \u003d super(CreateFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a89bdaa_5d41dc0a","line":115,"range":{"start_line":115,"start_character":4,"end_line":115,"end_character":33},"in_reply_to":"fa7ab95a_13ae1785","updated":"2016-09-05 16:08:16.000000000","message":"Done","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ba77f3b2348be665ef0ab0d12daa7a36e6622615","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        parser.add_argument("},{"line_number":120,"context_line":"            \u0027name\u0027,"},{"line_number":121,"context_line":"            help\u003d_(\u0027Name for the firewall group\u0027))"},{"line_number":122,"context_line":"        parser.add_argument("},{"line_number":123,"context_line":"            \u0027--ports\u0027,"},{"line_number":124,"context_line":"            default\u003d[], type\u003dlambda x: x.split(),"},{"line_number":125,"context_line":"            help\u003d_(\u0027The list of port name or ID to apply firewall group\u0027))"},{"line_number":126,"context_line":"        parser.add_argument("},{"line_number":127,"context_line":"            \u0027--ingress-policy\u0027, metavar\u003d\u0027INGRESS_POLICY\u0027,"},{"line_number":128,"context_line":"            dest\u003d\u0027ingress_firewall_policy\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_dc7049df","line":125,"range":{"start_line":122,"start_character":8,"end_line":125,"end_character":74},"updated":"2016-09-01 09:40:00.000000000","message":"It is the way used in FWaaSv1 comand, but could you check how OSC implements an argument to specify a list? If there is no special reason, it is suggested to follow the general convention.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"7fc1e5924027ff4f135729979cd0bf515a572300","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        parser.add_argument("},{"line_number":120,"context_line":"            \u0027name\u0027,"},{"line_number":121,"context_line":"            help\u003d_(\u0027Name for the firewall group\u0027))"},{"line_number":122,"context_line":"        parser.add_argument("},{"line_number":123,"context_line":"            \u0027--ports\u0027,"},{"line_number":124,"context_line":"            default\u003d[], type\u003dlambda x: x.split(),"},{"line_number":125,"context_line":"            help\u003d_(\u0027The list of port name or ID to apply firewall group\u0027))"},{"line_number":126,"context_line":"        parser.add_argument("},{"line_number":127,"context_line":"            \u0027--ingress-policy\u0027, metavar\u003d\u0027INGRESS_POLICY\u0027,"},{"line_number":128,"context_line":"            dest\u003d\u0027ingress_firewall_policy\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a89bdaa_7d46a024","line":125,"range":{"start_line":122,"start_character":8,"end_line":125,"end_character":74},"in_reply_to":"fa7ab95a_dc7049df","updated":"2016-09-05 16:08:16.000000000","message":"No, it doesn\u0027t.  I referred router docs for OSC, and I\u0027ll change to use \u0027--port\u0027","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ba77f3b2348be665ef0ab0d12daa7a36e6622615","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            dest\u003d\u0027egress_firewall_policy\u0027,"},{"line_number":133,"context_line":"            help\u003d_(\u0027Egress firewall policy name or ID\u0027))"},{"line_number":134,"context_line":"        parser.add_argument("},{"line_number":135,"context_line":"            \u0027--disable\u0027,"},{"line_number":136,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":137,"context_line":"            help\u003d_(\u0027Disable firewall group\u0027))"},{"line_number":138,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_bc3b85ea","line":135,"updated":"2016-09-01 09:40:00.000000000","message":"no --enable option?\n\nIf you check existing OSC command, you will see --enable too.\nIn OSC we prepare an opiton even thought it is default.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"bfd1abbe1bb28a7e90c210503b5ce9517bcc6ef1","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            dest\u003d\u0027egress_firewall_policy\u0027,"},{"line_number":133,"context_line":"            help\u003d_(\u0027Egress firewall policy name or ID\u0027))"},{"line_number":134,"context_line":"        parser.add_argument("},{"line_number":135,"context_line":"            \u0027--disable\u0027,"},{"line_number":136,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":137,"context_line":"            help\u003d_(\u0027Disable firewall group\u0027))"},{"line_number":138,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_0cfef437","line":135,"in_reply_to":"fa7ab95a_bc3b85ea","updated":"2016-09-01 13:16:01.000000000","message":"Ah, thanks.  I confused python-neutronclient policy. OK, I\u0027ll add. It is more easy to implement.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ba77f3b2348be665ef0ab0d12daa7a36e6622615","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":137,"context_line":"            help\u003d_(\u0027Disable firewall group\u0027))"},{"line_number":138,"context_line":"        parser.add_argument("},{"line_number":139,"context_line":"            \u0027--public\u0027,"},{"line_number":140,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":141,"context_line":"            help\u003d_(\u0027Make the firewall group public, which allows it to be \u0027"},{"line_number":142,"context_line":"                   \u0027used in all projects (as opposed to the default, \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_9c1b2180","line":139,"updated":"2016-09-01 09:40:00.000000000","message":"--private option too?","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"bfd1abbe1bb28a7e90c210503b5ce9517bcc6ef1","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":137,"context_line":"            help\u003d_(\u0027Disable firewall group\u0027))"},{"line_number":138,"context_line":"        parser.add_argument("},{"line_number":139,"context_line":"            \u0027--public\u0027,"},{"line_number":140,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":141,"context_line":"            help\u003d_(\u0027Make the firewall group public, which allows it to be \u0027"},{"line_number":142,"context_line":"                   \u0027used in all projects (as opposed to the default, \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_0c8514ac","line":139,"in_reply_to":"fa7ab95a_9c1b2180","updated":"2016-09-01 13:16:01.000000000","message":"Yes. I\u0027ll add.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"36ef2163cd08d672b6879172fe413bc07a26cea3","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"class DeleteFirewallGroup(command.ShowOne):"},{"line_number":157,"context_line":"    \"\"\"Delete a given firewall group\"\"\""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def get_parser(self, prog_name):"},{"line_number":160,"context_line":"        parser \u003d super(DeleteFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_b3856b08","line":157,"range":{"start_line":157,"start_character":4,"end_line":157,"end_character":39},"updated":"2016-09-01 11:30:31.000000000","message":"You need to follow the OSC convention.\n\n Delete firewall group(s)","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"7fc1e5924027ff4f135729979cd0bf515a572300","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"class DeleteFirewallGroup(command.ShowOne):"},{"line_number":157,"context_line":"    \"\"\"Delete a given firewall group\"\"\""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def get_parser(self, prog_name):"},{"line_number":160,"context_line":"        parser \u003d super(DeleteFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a89bdaa_9d4b642b","line":157,"range":{"start_line":157,"start_character":4,"end_line":157,"end_character":39},"in_reply_to":"fa7ab95a_b3856b08","updated":"2016-09-05 16:08:16.000000000","message":"Thanks. I followed network_trunk command\u0027s docs.  I\u0027ll change it.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"36ef2163cd08d672b6879172fe413bc07a26cea3","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class ListFirewallGroup(command.Lister):"},{"line_number":189,"context_line":"    \"\"\"List firewall groups that belong to a given tenant\"\"\""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def get_parser(self, prog_name):"},{"line_number":192,"context_line":"        parser \u003d super(ListFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_53a17fa8","line":189,"range":{"start_line":189,"start_character":4,"end_line":189,"end_character":60},"updated":"2016-09-01 11:30:31.000000000","message":"You need to follow the OSC convention.\n\n List firewall groups","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"7fc1e5924027ff4f135729979cd0bf515a572300","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class ListFirewallGroup(command.Lister):"},{"line_number":189,"context_line":"    \"\"\"List firewall groups that belong to a given tenant\"\"\""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def get_parser(self, prog_name):"},{"line_number":192,"context_line":"        parser \u003d super(ListFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a89bdaa_bd48282f","line":189,"range":{"start_line":189,"start_character":4,"end_line":189,"end_character":60},"in_reply_to":"fa7ab95a_53a17fa8","updated":"2016-09-05 16:08:16.000000000","message":"Done","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"36ef2163cd08d672b6879172fe413bc07a26cea3","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"class SetFirewallGroup(command.ShowOne):"},{"line_number":212,"context_line":"    \"\"\"Set(update) a given firewall group\"\"\""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def get_parser(self, prog_name):"},{"line_number":215,"context_line":"        parser \u003d super(SetFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f3e29300","line":212,"range":{"start_line":212,"start_character":4,"end_line":212,"end_character":44},"updated":"2016-09-01 11:30:31.000000000","message":"You need to follow the convention of OSC command.\n\n- \"(update)\" is unnecessary.\n\n Set firewall group properties","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"7fc1e5924027ff4f135729979cd0bf515a572300","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"class SetFirewallGroup(command.ShowOne):"},{"line_number":212,"context_line":"    \"\"\"Set(update) a given firewall group\"\"\""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def get_parser(self, prog_name):"},{"line_number":215,"context_line":"        parser \u003d super(SetFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a89bdaa_dd55ecc6","line":212,"range":{"start_line":212,"start_character":4,"end_line":212,"end_character":44},"in_reply_to":"fa7ab95a_f3e29300","updated":"2016-09-05 16:08:16.000000000","message":"Done","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ba77f3b2348be665ef0ab0d12daa7a36e6622615","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            help\u003d_(\u0027Ordered list of whitespace-delimited ports \u0027"},{"line_number":224,"context_line":"                   \u0027names or IDs; e.g., --ports \\\"port1 port2\\\"\u0027))"},{"line_number":225,"context_line":"        port_group.add_argument("},{"line_number":226,"context_line":"            \u0027--no-ports\u0027,"},{"line_number":227,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":228,"context_line":"            help\u003d_(\u0027Detach all ports from the firewall group\u0027))"},{"line_number":229,"context_line":"        ingress_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_ffddff70","line":226,"range":{"start_line":226,"start_character":12,"end_line":226,"end_character":25},"updated":"2016-09-01 09:40:00.000000000","message":"--no-port (singular)\n\nSee --no-route option for router set command: http://docs.openstack.org/developer/python-openstackclient/command-objects/router.html#router-set","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"bfd1abbe1bb28a7e90c210503b5ce9517bcc6ef1","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            help\u003d_(\u0027Ordered list of whitespace-delimited ports \u0027"},{"line_number":224,"context_line":"                   \u0027names or IDs; e.g., --ports \\\"port1 port2\\\"\u0027))"},{"line_number":225,"context_line":"        port_group.add_argument("},{"line_number":226,"context_line":"            \u0027--no-ports\u0027,"},{"line_number":227,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":228,"context_line":"            help\u003d_(\u0027Detach all ports from the firewall group\u0027))"},{"line_number":229,"context_line":"        ingress_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_6c4a2085","line":226,"range":{"start_line":226,"start_character":12,"end_line":226,"end_character":25},"in_reply_to":"fa7ab95a_ffddff70","updated":"2016-09-01 13:16:01.000000000","message":"Thanks.  I\u0027ll refer this page and reflect all of \u0027metavar\u0027.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"36ef2163cd08d672b6879172fe413bc07a26cea3","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"class ShowFirewallGroup(command.ShowOne):"},{"line_number":283,"context_line":"    \"\"\"Show information for a given firewall group\"\"\""},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def get_parser(self, prog_name):"},{"line_number":286,"context_line":"        parser \u003d super(ShowFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f3cc5363","line":283,"range":{"start_line":283,"start_character":4,"end_line":283,"end_character":53},"updated":"2016-09-01 11:30:31.000000000","message":"You need to follow the OSC convention.\n\n Display firewall group details","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"7fc1e5924027ff4f135729979cd0bf515a572300","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"class ShowFirewallGroup(command.ShowOne):"},{"line_number":283,"context_line":"    \"\"\"Show information for a given firewall group\"\"\""},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def get_parser(self, prog_name):"},{"line_number":286,"context_line":"        parser \u003d super(ShowFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a89bdaa_7d5dc0e8","line":283,"range":{"start_line":283,"start_character":4,"end_line":283,"end_character":53},"in_reply_to":"fa7ab95a_f3cc5363","updated":"2016-09-05 16:08:16.000000000","message":"Done","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"FWG \u003d \u0027firewall_group\u0027"},{"line_number":33,"context_line":"FWGS \u003d \u0027firewall_groups\u0027"},{"line_number":34,"context_line":"FWP \u003d \u0027firewall_policy\u0027"},{"line_number":35,"context_line":"FWAAS_FWG \u003d \u0027fwaas_firewall_group\u0027"},{"line_number":36,"context_line":"INGRESS_FWP_ID \u003d \u0027ingress_firewall_policy_id\u0027"},{"line_number":37,"context_line":"EGRESS_FWP_ID \u003d \u0027egress_firewall_policy_id\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_41050c0f","line":34,"range":{"start_line":32,"start_character":0,"end_line":34,"end_character":23},"updated":"2016-09-01 17:50:07.000000000","message":"they are defined in fwaas.constants. unnecessary.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"FWG \u003d \u0027firewall_group\u0027"},{"line_number":33,"context_line":"FWGS \u003d \u0027firewall_groups\u0027"},{"line_number":34,"context_line":"FWP \u003d \u0027firewall_policy\u0027"},{"line_number":35,"context_line":"FWAAS_FWG \u003d \u0027fwaas_firewall_group\u0027"},{"line_number":36,"context_line":"INGRESS_FWP_ID \u003d \u0027ingress_firewall_policy_id\u0027"},{"line_number":37,"context_line":"EGRESS_FWP_ID \u003d \u0027egress_firewall_policy_id\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_5dcabca2","line":34,"range":{"start_line":32,"start_character":0,"end_line":34,"end_character":23},"in_reply_to":"fa7ab95a_41050c0f","updated":"2016-09-05 16:06:09.000000000","message":"removes them.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":32,"context_line":"FWG \u003d \u0027firewall_group\u0027"},{"line_number":33,"context_line":"FWGS \u003d \u0027firewall_groups\u0027"},{"line_number":34,"context_line":"FWP \u003d \u0027firewall_policy\u0027"},{"line_number":35,"context_line":"FWAAS_FWG \u003d \u0027fwaas_firewall_group\u0027"},{"line_number":36,"context_line":"INGRESS_FWP_ID \u003d \u0027ingress_firewall_policy_id\u0027"},{"line_number":37,"context_line":"EGRESS_FWP_ID \u003d \u0027egress_firewall_policy_id\u0027"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_06015a06","line":35,"updated":"2016-09-01 17:50:07.000000000","message":"Is it used?","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":32,"context_line":"FWG \u003d \u0027firewall_group\u0027"},{"line_number":33,"context_line":"FWGS \u003d \u0027firewall_groups\u0027"},{"line_number":34,"context_line":"FWP \u003d \u0027firewall_policy\u0027"},{"line_number":35,"context_line":"FWAAS_FWG \u003d \u0027fwaas_firewall_group\u0027"},{"line_number":36,"context_line":"INGRESS_FWP_ID \u003d \u0027ingress_firewall_policy_id\u0027"},{"line_number":37,"context_line":"EGRESS_FWP_ID \u003d \u0027egress_firewall_policy_id\u0027"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_3dd5f842","line":35,"in_reply_to":"fa7ab95a_06015a06","updated":"2016-09-05 16:06:09.000000000","message":"Not used so remove this line.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":55,"context_line":"))"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def _format_admin_state(item):"},{"line_number":59,"context_line":"    return \u0027UP\u0027 if item else \u0027DOWN\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def _get_id(client, resource, id_or_name):"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_810b9423","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":35},"updated":"2016-09-01 17:50:07.000000000","message":"unnecessary","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":55,"context_line":"))"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def _format_admin_state(item):"},{"line_number":59,"context_line":"    return \u0027UP\u0027 if item else \u0027DOWN\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def _get_id(client, resource, id_or_name):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_fde4703c","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":35},"in_reply_to":"fa7ab95a_810b9423","updated":"2016-09-05 16:06:09.000000000","message":"Done","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def _get_id(client, resource, id_or_name):"},{"line_number":63,"context_line":"    if resource in constants.CMD_RESOURCE_MAP:"},{"line_number":64,"context_line":"        cmd_resource \u003d constants.CMD_RESOURCE_MAP[resource]"},{"line_number":65,"context_line":"    else:"},{"line_number":66,"context_line":"        cmd_resource \u003d None"},{"line_number":67,"context_line":"    return client.find_resource("},{"line_number":68,"context_line":"        resource, id_or_name, cmd_resource\u003dcmd_resource)[\u0027id\u0027]"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_412c2c99","line":66,"range":{"start_line":63,"start_character":4,"end_line":66,"end_character":27},"updated":"2016-09-01 17:50:07.000000000","message":"cmd_resource \u003d constants.CMD_RESOURCE_MAP.get(resource)","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def _get_id(client, resource, id_or_name):"},{"line_number":63,"context_line":"    if resource in constants.CMD_RESOURCE_MAP:"},{"line_number":64,"context_line":"        cmd_resource \u003d constants.CMD_RESOURCE_MAP[resource]"},{"line_number":65,"context_line":"    else:"},{"line_number":66,"context_line":"        cmd_resource \u003d None"},{"line_number":67,"context_line":"    return client.find_resource("},{"line_number":68,"context_line":"        resource, id_or_name, cmd_resource\u003dcmd_resource)[\u0027id\u0027]"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_7dcf80b0","line":66,"range":{"start_line":63,"start_character":4,"end_line":66,"end_character":27},"in_reply_to":"fa7ab95a_412c2c99","updated":"2016-09-05 16:06:09.000000000","message":"Done","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                parsed_args.project_domain,"},{"line_number":143,"context_line":"            ).id"},{"line_number":144,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d project_id"},{"line_number":145,"context_line":"    else:"},{"line_number":146,"context_line":"        if parsed_args.no_port:"},{"line_number":147,"context_line":"            attrs[\u0027ports\u0027] \u003d []"},{"line_number":148,"context_line":"        if parsed_args.no_ingress_firewall_policy:"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_c1c2fc84","line":145,"range":{"start_line":145,"start_character":4,"end_line":145,"end_character":9},"updated":"2016-09-01 17:50:07.000000000","message":"These options are defined for \u0027create\u0027 too. \u0027else\u0027 looks unnecessary.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                parsed_args.project_domain,"},{"line_number":143,"context_line":"            ).id"},{"line_number":144,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d project_id"},{"line_number":145,"context_line":"    else:"},{"line_number":146,"context_line":"        if parsed_args.no_port:"},{"line_number":147,"context_line":"            attrs[\u0027ports\u0027] \u003d []"},{"line_number":148,"context_line":"        if parsed_args.no_ingress_firewall_policy:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_9dc44493","line":145,"range":{"start_line":145,"start_character":4,"end_line":145,"end_character":9},"in_reply_to":"fa7ab95a_c1c2fc84","updated":"2016-09-05 16:06:09.000000000","message":"Done","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"class CreateFirewallGroup(command.ShowOne):"},{"line_number":179,"context_line":"    \"\"\"Create a firewall group\"\"\""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def get_parser(self, prog_name):"},{"line_number":182,"context_line":"        parser \u003d super(CreateFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_215f28e6","line":179,"updated":"2016-09-01 17:50:07.000000000","message":"hmm... all command help are not updated.\nThis applies to all resources.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"class CreateFirewallGroup(command.ShowOne):"},{"line_number":179,"context_line":"    \"\"\"Create a firewall group\"\"\""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def get_parser(self, prog_name):"},{"line_number":182,"context_line":"        parser \u003d super(CreateFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_f672b8e4","line":179,"in_reply_to":"fa7ab95a_215f28e6","updated":"2016-09-05 16:06:09.000000000","message":"Oh... I\u0027m sorry I was missed your comment from PS12.  I\u0027ll fix them.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                client.delete_fwaas_firewall_group(fwg_id)"},{"line_number":218,"context_line":"            except Exception as e:"},{"line_number":219,"context_line":"                result +\u003d 1"},{"line_number":220,"context_line":"                LOG.error(_LE(\"Failed to delete Firewall group with \""},{"line_number":221,"context_line":"                          \"name or ID \u0027%(firewall_group)s\u0027: %(e)s\")"},{"line_number":222,"context_line":"                          % {\u0027firewall_group\u0027: fwg, \u0027e\u0027: e})"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_41d98c56","line":220,"range":{"start_line":220,"start_character":26,"end_line":220,"end_character":29},"updated":"2016-09-01 17:50:07.000000000","message":"_LE is not used in the client code. See my comment in patch set 12.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                client.delete_fwaas_firewall_group(fwg_id)"},{"line_number":218,"context_line":"            except Exception as e:"},{"line_number":219,"context_line":"                result +\u003d 1"},{"line_number":220,"context_line":"                LOG.error(_LE(\"Failed to delete Firewall group with \""},{"line_number":221,"context_line":"                          \"name or ID \u0027%(firewall_group)s\u0027: %(e)s\")"},{"line_number":222,"context_line":"                          % {\u0027firewall_group\u0027: fwg, \u0027e\u0027: e})"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_b64f5091","line":220,"range":{"start_line":220,"start_character":26,"end_line":220,"end_character":29},"in_reply_to":"fa7ab95a_41d98c56","updated":"2016-09-05 16:06:09.000000000","message":"I missed this comment, sorry.  I\u0027ll fix it.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7e342a2cd1099ad169dd9a6750a587b3bcc934e9","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from osc_lib.command import command"},{"line_number":20,"context_line":"from osc_lib import exceptions"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a89bdaa_ab19c724","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":14},"updated":"2016-09-09 07:36:44.000000000","message":"We should use oslo_log for more better, shouldn\u0027t we?","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5954f497e18eaa9b2885880890ab93a93c79e5ac","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from osc_lib.command import command"},{"line_number":20,"context_line":"from osc_lib import exceptions"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a8bc5a2_1e45696f","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":14},"in_reply_to":"9a89bdaa_ab19c724","updated":"2016-09-23 05:06:31.000000000","message":"Done","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"f1466f5c9882b73c275f645e00da9c0799b671f2","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":26,"context_line":"from neutronclient.osc.v2 import utils as v2_utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"_formatters \u003d {"},{"line_number":32,"context_line":"    \u0027admin_state_up\u0027: v2_utils.format_admin_state,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a89bdaa_1162eaad","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":33},"updated":"2016-09-09 04:54:45.000000000","message":"Please remove it for release version. :)","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"647a53ba2f52af19d56fd7a20b87b59c2c6a9297","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":26,"context_line":"from neutronclient.osc.v2 import utils as v2_utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"_formatters \u003d {"},{"line_number":32,"context_line":"    \u0027admin_state_up\u0027: v2_utils.format_admin_state,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a89bdaa_4b0d9b36","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":33},"in_reply_to":"9a89bdaa_1162eaad","updated":"2016-09-09 07:33:17.000000000","message":"Comment is not valid. Please ignore it. Thanks.","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5954f497e18eaa9b2885880890ab93a93c79e5ac","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":26,"context_line":"from neutronclient.osc.v2 import utils as v2_utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"_formatters \u003d {"},{"line_number":32,"context_line":"    \u0027admin_state_up\u0027: v2_utils.format_admin_state,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a89bdaa_77dc0675","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":33},"in_reply_to":"9a89bdaa_1162eaad","updated":"2016-09-23 05:06:31.000000000","message":"OK. I\u0027ll remove it.","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5954f497e18eaa9b2885880890ab93a93c79e5ac","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":26,"context_line":"from neutronclient.osc.v2 import utils as v2_utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"_formatters \u003d {"},{"line_number":32,"context_line":"    \u0027admin_state_up\u0027: v2_utils.format_admin_state,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a8bc5a2_3e486587","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":33},"in_reply_to":"9a89bdaa_4b0d9b36","updated":"2016-09-23 05:06:31.000000000","message":"OK. I see.","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"10e9023107fe5554e52d7b857ce6da77fc1025e0","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \u0027admin_state_up\u0027: v2_utils.format_admin_state,"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"_attr_map \u003d sorted(("},{"line_number":35,"context_line":"    (\u0027id\u0027, \u0027ID\u0027, osc_utils.LIST_BOTH),"},{"line_number":36,"context_line":"    (\u0027name\u0027, \u0027Name\u0027, osc_utils.LIST_BOTH),"},{"line_number":37,"context_line":"    (\u0027ingress_firewall_policy_id\u0027, \u0027Ingress Policy ID\u0027, osc_utils.LIST_BOTH),"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_cc0f6a37","line":34,"range":{"start_line":34,"start_character":12,"end_line":34,"end_character":19},"updated":"2016-11-10 11:31:44.000000000","message":"Do you really want to sort the columns of the output of \"firewall rule list\"? I think it is better not to use \u0027sorted\u0027 because we would like to control the order of the columns in the list output.","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"8cf1d70e82f93a20bea4f6c181ec6f31a4dc965d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \u0027admin_state_up\u0027: v2_utils.format_admin_state,"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"_attr_map \u003d sorted(("},{"line_number":35,"context_line":"    (\u0027id\u0027, \u0027ID\u0027, osc_utils.LIST_BOTH),"},{"line_number":36,"context_line":"    (\u0027name\u0027, \u0027Name\u0027, osc_utils.LIST_BOTH),"},{"line_number":37,"context_line":"    (\u0027ingress_firewall_policy_id\u0027, \u0027Ingress Policy ID\u0027, osc_utils.LIST_BOTH),"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_cb08d5dc","line":34,"range":{"start_line":34,"start_character":12,"end_line":34,"end_character":19},"in_reply_to":"9a629dbe_cc0f6a37","updated":"2016-11-13 18:02:45.000000000","message":"It\u0027s not necessary.  I\u0027ll remove it.  However, how about \"show\" result?  I think it also shouldn\u0027t be sorted but aligned this _attr_map.  That is, I\u0027ll comment in utility patch.","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"10e9023107fe5554e52d7b857ce6da77fc1025e0","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \u0027--router\u0027,"},{"line_number":66,"context_line":"        metavar\u003d\u0027\u003crouter\u003e\u0027,"},{"line_number":67,"context_line":"        nargs\u003d\u0027+\u0027,"},{"line_number":68,"context_line":"        help\u003d_(\u0027Router(s) to apply firewall group.\u0027))"},{"line_number":69,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":70,"context_line":"    ingress_group.add_argument("},{"line_number":71,"context_line":"        \u0027--ingress-firewall-policy\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_4c043a17","line":68,"range":{"start_line":68,"start_character":16,"end_line":68,"end_character":25},"updated":"2016-11-10 11:31:44.000000000","message":"- Router(s) -\u003e Router(s) (name or ID)","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"8cf1d70e82f93a20bea4f6c181ec6f31a4dc965d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \u0027--router\u0027,"},{"line_number":66,"context_line":"        metavar\u003d\u0027\u003crouter\u003e\u0027,"},{"line_number":67,"context_line":"        nargs\u003d\u0027+\u0027,"},{"line_number":68,"context_line":"        help\u003d_(\u0027Router(s) to apply firewall group.\u0027))"},{"line_number":69,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":70,"context_line":"    ingress_group.add_argument("},{"line_number":71,"context_line":"        \u0027--ingress-firewall-policy\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_eb0d99e9","line":68,"range":{"start_line":68,"start_character":16,"end_line":68,"end_character":25},"in_reply_to":"9a629dbe_4c043a17","updated":"2016-11-13 18:02:45.000000000","message":"Done and also fixed \u0027Port\u0027(Line #58)","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"10e9023107fe5554e52d7b857ce6da77fc1025e0","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                client.delete_fwaas_firewall_group(fwg_id)"},{"line_number":213,"context_line":"            except Exception as e:"},{"line_number":214,"context_line":"                result +\u003d 1"},{"line_number":215,"context_line":"                LOG.error(_(\"Failed to delete Firewall group with \""},{"line_number":216,"context_line":"                          \"name or ID \u0027%(firewall_group)s\u0027: %(e)s\")"},{"line_number":217,"context_line":"                          % {const.FWG: fwg, \u0027e\u0027: e})"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_8f9c84c1","line":215,"range":{"start_line":215,"start_character":46,"end_line":215,"end_character":54},"updated":"2016-11-10 11:31:44.000000000","message":"-\u003e firewall","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"8cf1d70e82f93a20bea4f6c181ec6f31a4dc965d","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                client.delete_fwaas_firewall_group(fwg_id)"},{"line_number":213,"context_line":"            except Exception as e:"},{"line_number":214,"context_line":"                result +\u003d 1"},{"line_number":215,"context_line":"                LOG.error(_(\"Failed to delete Firewall group with \""},{"line_number":216,"context_line":"                          \"name or ID \u0027%(firewall_group)s\u0027: %(e)s\")"},{"line_number":217,"context_line":"                          % {const.FWG: fwg, \u0027e\u0027: e})"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_2bf871c4","line":215,"range":{"start_line":215,"start_character":46,"end_line":215,"end_character":54},"in_reply_to":"9a629dbe_8f9c84c1","updated":"2016-11-13 18:02:45.000000000","message":"Done","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"10e9023107fe5554e52d7b857ce6da77fc1025e0","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        if result \u003e 0:"},{"line_number":220,"context_line":"            total \u003d len(parsed_args.firewall_groups)"},{"line_number":221,"context_line":"            msg \u003d (_(\"%(result)s of %(total)s Firewall group(s) \""},{"line_number":222,"context_line":"                   \"failed to delete.\") % {\u0027result\u0027: result, \u0027total\u0027: total})"},{"line_number":223,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_4fb7cc39","line":221,"range":{"start_line":221,"start_character":46,"end_line":221,"end_character":54},"updated":"2016-11-10 11:31:44.000000000","message":"-\u003e firewall","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"8cf1d70e82f93a20bea4f6c181ec6f31a4dc965d","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        if result \u003e 0:"},{"line_number":220,"context_line":"            total \u003d len(parsed_args.firewall_groups)"},{"line_number":221,"context_line":"            msg \u003d (_(\"%(result)s of %(total)s Firewall group(s) \""},{"line_number":222,"context_line":"                   \"failed to delete.\") % {\u0027result\u0027: result, \u0027total\u0027: total})"},{"line_number":223,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_4bf5a5c9","line":221,"range":{"start_line":221,"start_character":46,"end_line":221,"end_character":54},"in_reply_to":"9a629dbe_4fb7cc39","updated":"2016-11-13 18:02:45.000000000","message":"Done","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"10e9023107fe5554e52d7b857ce6da77fc1025e0","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        parser.add_argument("},{"line_number":232,"context_line":"            \u0027--long\u0027,"},{"line_number":233,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":234,"context_line":"            default\u003dFalse,"},{"line_number":235,"context_line":"            help\u003d_(\"List additional fields in output\")"},{"line_number":236,"context_line":"        )"},{"line_number":237,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_0fdf9469","line":234,"range":{"start_line":234,"start_character":12,"end_line":234,"end_character":26},"updated":"2016-11-10 11:31:44.000000000","message":"I think it is unnecessary.","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"8cf1d70e82f93a20bea4f6c181ec6f31a4dc965d","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        parser.add_argument("},{"line_number":232,"context_line":"            \u0027--long\u0027,"},{"line_number":233,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":234,"context_line":"            default\u003dFalse,"},{"line_number":235,"context_line":"            help\u003d_(\"List additional fields in output\")"},{"line_number":236,"context_line":"        )"},{"line_number":237,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_8bffbda9","line":234,"range":{"start_line":234,"start_character":12,"end_line":234,"end_character":26},"in_reply_to":"9a629dbe_0fdf9469","updated":"2016-11-13 18:02:45.000000000","message":"Yes, I tested and realized it\u0027s not necessary.  I\u0027ll remove it.  Thanks.","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"3c615af08ccf52a1afc49b5c6d18f7b462e34d76","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        help\u003d_(\u0027Description of the firewall group.\u0027))"},{"line_number":53,"context_line":"    port_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":54,"context_line":"    port_group.add_argument("},{"line_number":55,"context_line":"        \u0027--port\u0027,"},{"line_number":56,"context_line":"        metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":57,"context_line":"        nargs\u003d\u0027+\u0027,"},{"line_number":58,"context_line":"        help\u003d_(\u0027Port(s) (name or ID) to apply firewall group.\u0027))"},{"line_number":59,"context_line":"    port_group.add_argument("},{"line_number":60,"context_line":"        \u0027--no-port\u0027,"},{"line_number":61,"context_line":"        dest\u003d\u0027no_port\u0027,"},{"line_number":62,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":63,"context_line":"        help\u003d_(\u0027Detach all port from the firewall group.\u0027))"},{"line_number":64,"context_line":"    parser.add_argument("},{"line_number":65,"context_line":"        \u0027--router\u0027,"},{"line_number":66,"context_line":"        metavar\u003d\u0027\u003crouter\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_20289199","line":63,"range":{"start_line":55,"start_character":2,"end_line":63,"end_character":59},"updated":"2016-11-20 20:46:53.000000000","message":"Lets make them non-mutually-exclusive. \nThat would allow us to overwrite the port information in one CLI, instead of 2 CLI ( one to clear , one to set)\n\nReference: https://blueprints.launchpad.net/python-openstackclient/+spec/allow-overwrite-set-options","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"995784986cb009db0cd18cf419db1f0d721ea558","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        help\u003d_(\u0027Description of the firewall group.\u0027))"},{"line_number":53,"context_line":"    port_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":54,"context_line":"    port_group.add_argument("},{"line_number":55,"context_line":"        \u0027--port\u0027,"},{"line_number":56,"context_line":"        metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":57,"context_line":"        nargs\u003d\u0027+\u0027,"},{"line_number":58,"context_line":"        help\u003d_(\u0027Port(s) (name or ID) to apply firewall group.\u0027))"},{"line_number":59,"context_line":"    port_group.add_argument("},{"line_number":60,"context_line":"        \u0027--no-port\u0027,"},{"line_number":61,"context_line":"        dest\u003d\u0027no_port\u0027,"},{"line_number":62,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":63,"context_line":"        help\u003d_(\u0027Detach all port from the firewall group.\u0027))"},{"line_number":64,"context_line":"    parser.add_argument("},{"line_number":65,"context_line":"        \u0027--router\u0027,"},{"line_number":66,"context_line":"        metavar\u003d\u0027\u003crouter\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_96bc4fdd","line":63,"range":{"start_line":55,"start_character":2,"end_line":63,"end_character":59},"in_reply_to":"7a77a97e_20289199","updated":"2016-11-21 02:12:47.000000000","message":"One question.  Is it same behavior even if it is \u0027create\u0027 or \u0027set\u0027, ins\u0027t it?","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"3f5e35a6efbd031cac06e0705856e25aea4c52e7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        help\u003d_(\u0027Description of the firewall group.\u0027))"},{"line_number":53,"context_line":"    port_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":54,"context_line":"    port_group.add_argument("},{"line_number":55,"context_line":"        \u0027--port\u0027,"},{"line_number":56,"context_line":"        metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":57,"context_line":"        nargs\u003d\u0027+\u0027,"},{"line_number":58,"context_line":"        help\u003d_(\u0027Port(s) (name or ID) to apply firewall group.\u0027))"},{"line_number":59,"context_line":"    port_group.add_argument("},{"line_number":60,"context_line":"        \u0027--no-port\u0027,"},{"line_number":61,"context_line":"        dest\u003d\u0027no_port\u0027,"},{"line_number":62,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":63,"context_line":"        help\u003d_(\u0027Detach all port from the firewall group.\u0027))"},{"line_number":64,"context_line":"    parser.add_argument("},{"line_number":65,"context_line":"        \u0027--router\u0027,"},{"line_number":66,"context_line":"        metavar\u003d\u0027\u003crouter\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_dccfc527","line":63,"range":{"start_line":55,"start_character":2,"end_line":63,"end_character":59},"in_reply_to":"7a77a97e_765170d8","updated":"2016-11-21 07:06:11.000000000","message":"Thanks An, I understand.  So, I\u0027ll keep it on create_xxx and remove mutually exclusive on set_xxx.","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a81ff7b71085259745251c8d9fa87e90e5d87bc0","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        help\u003d_(\u0027Description of the firewall group.\u0027))"},{"line_number":53,"context_line":"    port_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":54,"context_line":"    port_group.add_argument("},{"line_number":55,"context_line":"        \u0027--port\u0027,"},{"line_number":56,"context_line":"        metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":57,"context_line":"        nargs\u003d\u0027+\u0027,"},{"line_number":58,"context_line":"        help\u003d_(\u0027Port(s) (name or ID) to apply firewall group.\u0027))"},{"line_number":59,"context_line":"    port_group.add_argument("},{"line_number":60,"context_line":"        \u0027--no-port\u0027,"},{"line_number":61,"context_line":"        dest\u003d\u0027no_port\u0027,"},{"line_number":62,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":63,"context_line":"        help\u003d_(\u0027Detach all port from the firewall group.\u0027))"},{"line_number":64,"context_line":"    parser.add_argument("},{"line_number":65,"context_line":"        \u0027--router\u0027,"},{"line_number":66,"context_line":"        metavar\u003d\u0027\u003crouter\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_765170d8","line":63,"range":{"start_line":55,"start_character":2,"end_line":63,"end_character":59},"in_reply_to":"7a77a97e_96bc4fdd","updated":"2016-11-21 03:36:33.000000000","message":"I think it\u0027s not same behavior. With \u0027create\u0027 command, \u0027--port\u0027 and \u0027--no-port\u0027 should be mutually-exclusive. However with \u0027set\u0027 command we can specific \u0027--port\u0027 and \u0027--no-port\u0027 option same time. For reference: https://review.openstack.org/#/c/355797/9/openstackclient/network/v2/port.py and https://github.com/openstack/python-openstackclient/blob/master/doc/source/command-options.rst#implementation-2","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"5b1b7b5b36673ee64236efbd7b1e9825f55e5a9a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        help\u003d_(\u0027Description of the firewall group.\u0027))"},{"line_number":53,"context_line":"    port_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":54,"context_line":"    port_group.add_argument("},{"line_number":55,"context_line":"        \u0027--port\u0027,"},{"line_number":56,"context_line":"        metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":57,"context_line":"        nargs\u003d\u0027+\u0027,"},{"line_number":58,"context_line":"        help\u003d_(\u0027Port(s) (name or ID) to apply firewall group.\u0027))"},{"line_number":59,"context_line":"    port_group.add_argument("},{"line_number":60,"context_line":"        \u0027--no-port\u0027,"},{"line_number":61,"context_line":"        dest\u003d\u0027no_port\u0027,"},{"line_number":62,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":63,"context_line":"        help\u003d_(\u0027Detach all port from the firewall group.\u0027))"},{"line_number":64,"context_line":"    parser.add_argument("},{"line_number":65,"context_line":"        \u0027--router\u0027,"},{"line_number":66,"context_line":"        metavar\u003d\u0027\u003crouter\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_ec98016d","line":63,"range":{"start_line":55,"start_character":2,"end_line":63,"end_character":59},"in_reply_to":"7a77a97e_dccfc527","updated":"2016-11-22 15:10:12.000000000","message":"Thanks An,\nAnd thanks Furukawa San , that would work","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"3c615af08ccf52a1afc49b5c6d18f7b462e34d76","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        help\u003d_(\u0027Subnet(s) (name or ID) in ports to apply firewall group.\u0027))"},{"line_number":74,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":75,"context_line":"    ingress_group.add_argument("},{"line_number":76,"context_line":"        \u0027--ingress-firewall-policy\u0027,"},{"line_number":77,"context_line":"        metavar\u003d\u0027\u003cingress-firewall-policy\u003e\u0027,"},{"line_number":78,"context_line":"        dest\u003d\u0027ingress_firewall_policy\u0027,"},{"line_number":79,"context_line":"        help\u003d_(\u0027Ingress firewall policy name or ID.\u0027))"},{"line_number":80,"context_line":"    ingress_group.add_argument("},{"line_number":81,"context_line":"        \u0027--no-ingress-firewall-policy\u0027,"},{"line_number":82,"context_line":"        dest\u003d\u0027no_ingress_firewall_policy\u0027,"},{"line_number":83,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":84,"context_line":"        help\u003d_(\u0027Detach ingress firewall policy from the firewall group.\u0027))"},{"line_number":85,"context_line":"    egress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":86,"context_line":"    egress_group.add_argument("},{"line_number":87,"context_line":"        \u0027--egress-firewall-policy\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_c01d1d74","line":84,"range":{"start_line":76,"start_character":5,"end_line":84,"end_character":74},"updated":"2016-11-20 20:46:53.000000000","message":"ditto","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"995784986cb009db0cd18cf419db1f0d721ea558","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        help\u003d_(\u0027Subnet(s) (name or ID) in ports to apply firewall group.\u0027))"},{"line_number":74,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":75,"context_line":"    ingress_group.add_argument("},{"line_number":76,"context_line":"        \u0027--ingress-firewall-policy\u0027,"},{"line_number":77,"context_line":"        metavar\u003d\u0027\u003cingress-firewall-policy\u003e\u0027,"},{"line_number":78,"context_line":"        dest\u003d\u0027ingress_firewall_policy\u0027,"},{"line_number":79,"context_line":"        help\u003d_(\u0027Ingress firewall policy name or ID.\u0027))"},{"line_number":80,"context_line":"    ingress_group.add_argument("},{"line_number":81,"context_line":"        \u0027--no-ingress-firewall-policy\u0027,"},{"line_number":82,"context_line":"        dest\u003d\u0027no_ingress_firewall_policy\u0027,"},{"line_number":83,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":84,"context_line":"        help\u003d_(\u0027Detach ingress firewall policy from the firewall group.\u0027))"},{"line_number":85,"context_line":"    egress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":86,"context_line":"    egress_group.add_argument("},{"line_number":87,"context_line":"        \u0027--egress-firewall-policy\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_3193855c","line":84,"range":{"start_line":76,"start_character":5,"end_line":84,"end_character":74},"in_reply_to":"7a77a97e_c01d1d74","updated":"2016-11-21 02:12:47.000000000","message":"Done","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"3c615af08ccf52a1afc49b5c6d18f7b462e34d76","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        help\u003d_(\u0027Detach ingress firewall policy from the firewall group.\u0027))"},{"line_number":85,"context_line":"    egress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":86,"context_line":"    egress_group.add_argument("},{"line_number":87,"context_line":"        \u0027--egress-firewall-policy\u0027,"},{"line_number":88,"context_line":"        metavar\u003d\u0027\u003cegress-firewall-policy\u003e\u0027,"},{"line_number":89,"context_line":"        dest\u003d\u0027egress_firewall_policy\u0027,"},{"line_number":90,"context_line":"        help\u003d_(\u0027Egress firewall policy name or ID.\u0027))"},{"line_number":91,"context_line":"    egress_group.add_argument("},{"line_number":92,"context_line":"        \u0027--no-egress-firewall-policy\u0027,"},{"line_number":93,"context_line":"        dest\u003d\u0027no_egress_firewall_policy\u0027,"},{"line_number":94,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":95,"context_line":"        help\u003d_(\u0027Detach egress firewall policy from the firewall group.\u0027))"},{"line_number":96,"context_line":"    public_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":97,"context_line":"    public_group.add_argument("},{"line_number":98,"context_line":"        \u0027--public\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_e010595b","line":95,"range":{"start_line":87,"start_character":3,"end_line":95,"end_character":73},"updated":"2016-11-20 20:46:53.000000000","message":"ditto, and can we specify more than one egress-firewall-policy?","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"995784986cb009db0cd18cf419db1f0d721ea558","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        help\u003d_(\u0027Detach ingress firewall policy from the firewall group.\u0027))"},{"line_number":85,"context_line":"    egress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":86,"context_line":"    egress_group.add_argument("},{"line_number":87,"context_line":"        \u0027--egress-firewall-policy\u0027,"},{"line_number":88,"context_line":"        metavar\u003d\u0027\u003cegress-firewall-policy\u003e\u0027,"},{"line_number":89,"context_line":"        dest\u003d\u0027egress_firewall_policy\u0027,"},{"line_number":90,"context_line":"        help\u003d_(\u0027Egress firewall policy name or ID.\u0027))"},{"line_number":91,"context_line":"    egress_group.add_argument("},{"line_number":92,"context_line":"        \u0027--no-egress-firewall-policy\u0027,"},{"line_number":93,"context_line":"        dest\u003d\u0027no_egress_firewall_policy\u0027,"},{"line_number":94,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":95,"context_line":"        help\u003d_(\u0027Detach egress firewall policy from the firewall group.\u0027))"},{"line_number":96,"context_line":"    public_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":97,"context_line":"    public_group.add_argument("},{"line_number":98,"context_line":"        \u0027--public\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_56c71763","line":95,"range":{"start_line":87,"start_character":3,"end_line":95,"end_character":73},"in_reply_to":"7a77a97e_e010595b","updated":"2016-11-21 02:12:47.000000000","message":"Done.\n\n\u003e can we specify more than one egress-firewall-policy?\n\nNo.  We can specify only one \u0027egress_firewall_policy\u0027.(same as \u0027ingress_firewall_policy\u0027)","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"3c615af08ccf52a1afc49b5c6d18f7b462e34d76","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    admin_group.add_argument("},{"line_number":113,"context_line":"        \u0027--disable\u0027,"},{"line_number":114,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":115,"context_line":"        help\u003d_(\u0027Disable firewall group.\u0027))"},{"line_number":116,"context_line":"    osc_utils.add_project_owner_option_to_parser(parser)"},{"line_number":117,"context_line":"    return parser"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_db07d215","line":115,"range":{"start_line":115,"start_character":15,"end_line":115,"end_character":42},"updated":"2016-11-20 20:46:53.000000000","message":"You can remove the \".\" periods at the end of the sentences for one line help sentence.","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"995784986cb009db0cd18cf419db1f0d721ea558","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    admin_group.add_argument("},{"line_number":113,"context_line":"        \u0027--disable\u0027,"},{"line_number":114,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":115,"context_line":"        help\u003d_(\u0027Disable firewall group.\u0027))"},{"line_number":116,"context_line":"    osc_utils.add_project_owner_option_to_parser(parser)"},{"line_number":117,"context_line":"    return parser"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_76c25354","line":115,"range":{"start_line":115,"start_character":15,"end_line":115,"end_character":42},"in_reply_to":"7a77a97e_db07d215","updated":"2016-11-21 02:12:47.000000000","message":"OK, I\u0027ll remove all of \".\" in help messages.  Do you know some guideline such as a detail specification?","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"3c615af08ccf52a1afc49b5c6d18f7b462e34d76","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    if is_create:"},{"line_number":125,"context_line":"        if \u0027project\u0027 in parsed_args and parsed_args.project is not None:"},{"line_number":126,"context_line":"            identity_client \u003d client_manager.identity"},{"line_number":127,"context_line":"            project_id \u003d osc_utils.find_project("},{"line_number":128,"context_line":"                identity_client,"},{"line_number":129,"context_line":"                parsed_args.project,"},{"line_number":130,"context_line":"                parsed_args.project_domain,"},{"line_number":131,"context_line":"            ).id"},{"line_number":132,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d project_id"},{"line_number":133,"context_line":"    if parsed_args.ingress_firewall_policy:"},{"line_number":134,"context_line":"        attrs[\u0027ingress_firewall_policy_id\u0027] \u003d client.find_resource("},{"line_number":135,"context_line":"            const.FWP, parsed_args.ingress_firewall_policy,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_5b1ca269","line":132,"range":{"start_line":127,"start_character":12,"end_line":132,"end_character":43},"updated":"2016-11-20 20:46:53.000000000","message":"you can simply replace project_id in line 127 with attrs[\u0027tenant_id\u0027]","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"995784986cb009db0cd18cf419db1f0d721ea558","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    if is_create:"},{"line_number":125,"context_line":"        if \u0027project\u0027 in parsed_args and parsed_args.project is not None:"},{"line_number":126,"context_line":"            identity_client \u003d client_manager.identity"},{"line_number":127,"context_line":"            project_id \u003d osc_utils.find_project("},{"line_number":128,"context_line":"                identity_client,"},{"line_number":129,"context_line":"                parsed_args.project,"},{"line_number":130,"context_line":"                parsed_args.project_domain,"},{"line_number":131,"context_line":"            ).id"},{"line_number":132,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d project_id"},{"line_number":133,"context_line":"    if parsed_args.ingress_firewall_policy:"},{"line_number":134,"context_line":"        attrs[\u0027ingress_firewall_policy_id\u0027] \u003d client.find_resource("},{"line_number":135,"context_line":"            const.FWP, parsed_args.ingress_firewall_policy,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_569e3763","line":132,"range":{"start_line":127,"start_character":12,"end_line":132,"end_character":43},"in_reply_to":"7a77a97e_5b1ca269","updated":"2016-11-21 02:12:47.000000000","message":"Done.","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"3c615af08ccf52a1afc49b5c6d18f7b462e34d76","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    if parsed_args.port:"},{"line_number":159,"context_line":"        port_specified \u003d True"},{"line_number":160,"context_line":"        ports \u003d []"},{"line_number":161,"context_line":"        # TODO(yushiro) Is set() for port necessary?"},{"line_number":162,"context_line":"        for p in parsed_args.port:"},{"line_number":163,"context_line":"            ports.append(client.find_resource(\u0027port\u0027, p)[\u0027id\u0027])"},{"line_number":164,"context_line":"        attrs[\u0027ports\u0027] \u003d ports"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_1b44ea47","line":161,"range":{"start_line":161,"start_character":9,"end_line":161,"end_character":50},"updated":"2016-11-20 20:46:53.000000000","message":"If ports can be updated in the FirewallGroup, then yes..","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"995784986cb009db0cd18cf419db1f0d721ea558","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    if parsed_args.port:"},{"line_number":159,"context_line":"        port_specified \u003d True"},{"line_number":160,"context_line":"        ports \u003d []"},{"line_number":161,"context_line":"        # TODO(yushiro) Is set() for port necessary?"},{"line_number":162,"context_line":"        for p in parsed_args.port:"},{"line_number":163,"context_line":"            ports.append(client.find_resource(\u0027port\u0027, p)[\u0027id\u0027])"},{"line_number":164,"context_line":"        attrs[\u0027ports\u0027] \u003d ports"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_71709d40","line":161,"range":{"start_line":161,"start_character":9,"end_line":161,"end_character":50},"in_reply_to":"7a77a97e_1b44ea47","updated":"2016-11-21 02:12:47.000000000","message":"Thanks for your information.  I\u0027ll add set().","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"e4b048f0b115bb17ffd33d9d027e23026e1ab303","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    parser.add_argument("},{"line_number":57,"context_line":"        \u0027--router\u0027,"},{"line_number":58,"context_line":"        metavar\u003d\u0027\u003crouter\u003e\u0027,"},{"line_number":59,"context_line":"        action\u003d\u0027append\u0027,"},{"line_number":60,"context_line":"        help\u003d_(\u0027Router(s) (name or ID) in ports to apply firewall group\u0027))"},{"line_number":61,"context_line":"    parser.add_argument("},{"line_number":62,"context_line":"        \u0027--subnet\u0027,"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a74a57a_b15670d0","line":59,"updated":"2016-11-24 05:16:36.000000000","message":"Both router, subnet and port have Append action.  Which means user can add more than one router or subnet or port using Firewall Group Set CLI.\nIf that is so, a user may want to remove a router/subnet from a firewall group, isnt it ?\nAnd if that is a case, Unset is needed!","commit_id":"31aa7bca905b51f1a5991800dc1f94d8e7119ee2"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"21611c4c0ba4825029238540d032536492df5d82","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    parser.add_argument("},{"line_number":57,"context_line":"        \u0027--router\u0027,"},{"line_number":58,"context_line":"        metavar\u003d\u0027\u003crouter\u003e\u0027,"},{"line_number":59,"context_line":"        action\u003d\u0027append\u0027,"},{"line_number":60,"context_line":"        help\u003d_(\u0027Router(s) (name or ID) in ports to apply firewall group\u0027))"},{"line_number":61,"context_line":"    parser.add_argument("},{"line_number":62,"context_line":"        \u0027--subnet\u0027,"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a74a57a_184a9cac","line":59,"in_reply_to":"5a74a57a_b15670d0","updated":"2016-11-25 18:02:25.000000000","message":"Done","commit_id":"31aa7bca905b51f1a5991800dc1f94d8e7119ee2"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"e4b048f0b115bb17ffd33d9d027e23026e1ab303","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            metavar\u003d\u0027\u003cfirewall-group\u003e\u0027,"},{"line_number":269,"context_line":"            help\u003d_(\u0027Firewall group to update (name or ID)\u0027))"},{"line_number":270,"context_line":"        parser.add_argument("},{"line_number":271,"context_line":"            \u0027--port\u0027,"},{"line_number":272,"context_line":"            metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":273,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":274,"context_line":"            help\u003d_(\u0027Port(s) (name or ID) to apply firewall group\u0027))"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a74a57a_916ed494","line":271,"updated":"2016-11-24 05:16:36.000000000","message":"Firewall Group Unset will also work on port option","commit_id":"31aa7bca905b51f1a5991800dc1f94d8e7119ee2"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"21611c4c0ba4825029238540d032536492df5d82","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            metavar\u003d\u0027\u003cfirewall-group\u003e\u0027,"},{"line_number":269,"context_line":"            help\u003d_(\u0027Firewall group to update (name or ID)\u0027))"},{"line_number":270,"context_line":"        parser.add_argument("},{"line_number":271,"context_line":"            \u0027--port\u0027,"},{"line_number":272,"context_line":"            metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":273,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":274,"context_line":"            help\u003d_(\u0027Port(s) (name or ID) to apply firewall group\u0027))"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a74a57a_d8dae4e7","line":271,"in_reply_to":"5a74a57a_916ed494","updated":"2016-11-25 18:02:25.000000000","message":"Done","commit_id":"31aa7bca905b51f1a5991800dc1f94d8e7119ee2"},{"author":{"_account_id":6995,"name":"Sridar Kandaswamy","email":"skandasw@yahoo.com","username":"skandasw"},"change_message_id":"78a7935b61a531a8ec2f976a9cc9c43d0bc7e710","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \u0027--router\u0027,"},{"line_number":58,"context_line":"        metavar\u003d\u0027\u003crouter\u003e\u0027,"},{"line_number":59,"context_line":"        action\u003d\u0027append\u0027,"},{"line_number":60,"context_line":"        help\u003d_(\u0027Router(s) (name or ID) in ports to apply firewall group\u0027))"},{"line_number":61,"context_line":"    parser.add_argument("},{"line_number":62,"context_line":"        \u0027--subnet\u0027,"},{"line_number":63,"context_line":"        metavar\u003d\u0027\u003csubnet\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_b2868c11","line":60,"updated":"2016-12-08 03:53:57.000000000","message":"Summarizing our discussions on IRC and offline, with the router option while this can be a convenient option:\n\n1) there is some ambiguity on if we should implicitly add any new ports added to the router at a later point.\n\n2) This makes the API look just like the v1 API and we do want to move away from that with the v2 effort.\n\n\nI believe we are in agreement that we can stick with the actual attributes of the fwg resource and remove this at this point and let the API settle before we look for some convenience options based on user feedback.","commit_id":"8bd9ea4b16edc24bfb1d10bc851d25ae1e5be0cd"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"be3df81364d7c4d25654cc24b6b0496fd00791e8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \u0027--router\u0027,"},{"line_number":58,"context_line":"        metavar\u003d\u0027\u003crouter\u003e\u0027,"},{"line_number":59,"context_line":"        action\u003d\u0027append\u0027,"},{"line_number":60,"context_line":"        help\u003d_(\u0027Router(s) (name or ID) in ports to apply firewall group\u0027))"},{"line_number":61,"context_line":"    parser.add_argument("},{"line_number":62,"context_line":"        \u0027--subnet\u0027,"},{"line_number":63,"context_line":"        metavar\u003d\u0027\u003csubnet\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_78e2e402","line":60,"in_reply_to":"3a71b18c_b2868c11","updated":"2016-12-09 02:16:38.000000000","message":"Yes,  I\u0027ll remove it.","commit_id":"8bd9ea4b16edc24bfb1d10bc851d25ae1e5be0cd"},{"author":{"_account_id":6995,"name":"Sridar Kandaswamy","email":"skandasw@yahoo.com","username":"skandasw"},"change_message_id":"78a7935b61a531a8ec2f976a9cc9c43d0bc7e710","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \u0027--subnet\u0027,"},{"line_number":63,"context_line":"        metavar\u003d\u0027\u003csubnet\u003e\u0027,"},{"line_number":64,"context_line":"        action\u003d\u0027append\u0027,"},{"line_number":65,"context_line":"        help\u003d_(\u0027Subnet(s) (name or ID) in ports to apply firewall group\u0027))"},{"line_number":66,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":67,"context_line":"    ingress_group.add_argument("},{"line_number":68,"context_line":"        \u0027--ingress-firewall-policy\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_9298b06c","line":65,"updated":"2016-12-08 03:53:57.000000000","message":"This is possibly less of an issue but i believe we concluded that we will just stick with ports for now.","commit_id":"8bd9ea4b16edc24bfb1d10bc851d25ae1e5be0cd"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"be3df81364d7c4d25654cc24b6b0496fd00791e8","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \u0027--subnet\u0027,"},{"line_number":63,"context_line":"        metavar\u003d\u0027\u003csubnet\u003e\u0027,"},{"line_number":64,"context_line":"        action\u003d\u0027append\u0027,"},{"line_number":65,"context_line":"        help\u003d_(\u0027Subnet(s) (name or ID) in ports to apply firewall group\u0027))"},{"line_number":66,"context_line":"    ingress_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":67,"context_line":"    ingress_group.add_argument("},{"line_number":68,"context_line":"        \u0027--ingress-firewall-policy\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_d8b938ee","line":65,"in_reply_to":"3a71b18c_9298b06c","updated":"2016-12-09 02:16:38.000000000","message":"ditto.  Thanks.","commit_id":"8bd9ea4b16edc24bfb1d10bc851d25ae1e5be0cd"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"1fea07bab38b0142051934dfe609793de1ad2a47","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \u0027--ingress-firewall-policy\u0027,"},{"line_number":59,"context_line":"        metavar\u003d\u0027\u003cingress-firewall-policy\u003e\u0027,"},{"line_number":60,"context_line":"        dest\u003d\u0027ingress_firewall_policy\u0027,"},{"line_number":61,"context_line":"        help\u003d_(\u0027Ingress firewall policy name or ID\u0027))"},{"line_number":62,"context_line":"    ingress_group.add_argument("},{"line_number":63,"context_line":"        \u0027--no-ingress-firewall-policy\u0027,"},{"line_number":64,"context_line":"        dest\u003d\u0027no_ingress_firewall_policy\u0027,"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a71b18c_81cc7dbc","line":61,"range":{"start_line":61,"start_character":40,"end_line":61,"end_character":50},"updated":"2016-12-10 01:04:52.000000000","message":"minor nit for consistency: i have noticed that all help commands for OSC have \"name or ID\" in braces.\ni.e.: (name or ID) here and elsewhere in this PS","commit_id":"849c273bd79d3a78a5dc2f64d18d50c77e50eea7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"07b9d205bf6ab548ef468458f6315659f5932054","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \u0027--ingress-firewall-policy\u0027,"},{"line_number":59,"context_line":"        metavar\u003d\u0027\u003cingress-firewall-policy\u003e\u0027,"},{"line_number":60,"context_line":"        dest\u003d\u0027ingress_firewall_policy\u0027,"},{"line_number":61,"context_line":"        help\u003d_(\u0027Ingress firewall policy name or ID\u0027))"},{"line_number":62,"context_line":"    ingress_group.add_argument("},{"line_number":63,"context_line":"        \u0027--no-ingress-firewall-policy\u0027,"},{"line_number":64,"context_line":"        dest\u003d\u0027no_ingress_firewall_policy\u0027,"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a71b18c_075dcb46","line":61,"range":{"start_line":61,"start_character":40,"end_line":61,"end_character":50},"in_reply_to":"3a71b18c_81cc7dbc","updated":"2016-12-12 00:12:13.000000000","message":"Good catch, Abhishek!!  OK, I\u0027ll fix it.","commit_id":"849c273bd79d3a78a5dc2f64d18d50c77e50eea7"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"9c3f30a585d559eeb8a086fc0b0c712368d937e3","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"class CreateFirewallGroup(command.ShowOne):"},{"line_number":165,"context_line":"    \"\"\"Create a new firewall group\"\"\""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def get_parser(self, prog_name):"},{"line_number":168,"context_line":"        parser \u003d super(CreateFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":36,"id":"1a6eadb0_6a73e8e7","line":165,"updated":"2016-12-14 08:06:08.000000000","message":"please update all these doctrings as such\ninstead of \"\"\"\u003cdescription\u003e\"\"\"\n\nplease replace with _description \u003d _(\"\u003cdescription\u003e\")\n\nFor OSC language translation compatibility.","commit_id":"953da0992088f38c5118c24701a5d5c1265aeb99"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"faf13fdefae4f36ab2087b74526d87d6111f7cc6","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"class CreateFirewallGroup(command.ShowOne):"},{"line_number":165,"context_line":"    \"\"\"Create a new firewall group\"\"\""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def get_parser(self, prog_name):"},{"line_number":168,"context_line":"        parser \u003d super(CreateFirewallGroup, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":36,"id":"1a6eadb0_61ed93ee","line":165,"in_reply_to":"1a6eadb0_6a73e8e7","updated":"2016-12-15 08:35:01.000000000","message":"Sure.  I\u0027ll generate usuful regexp for substitute :)","commit_id":"953da0992088f38c5118c24701a5d5c1265aeb99"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"277c0388a2b43835f4f7ecb1065d5706a40b2d51","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            except Exception as e:"},{"line_number":214,"context_line":"                result +\u003d 1"},{"line_number":215,"context_line":"                LOG.error(_(\"Failed to delete firewall group with \""},{"line_number":216,"context_line":"                          \"name or ID \u0027%(firewall_group)s\u0027: %(e)s\")"},{"line_number":217,"context_line":"                          % {const.FWG: fwg, \u0027e\u0027: e})"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a6eadb0_9a7f9665","line":216,"range":{"start_line":216,"start_character":26,"end_line":216,"end_character":27},"updated":"2016-12-20 22:26:15.000000000","message":"this indentation doesnt seem correct","commit_id":"369a81235ed4b21af17164b8eb5a0483f3d6b571"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"c7f2e7f59bea06d27b6a80c319d8044e10186f84","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            except Exception as e:"},{"line_number":214,"context_line":"                result +\u003d 1"},{"line_number":215,"context_line":"                LOG.error(_(\"Failed to delete firewall group with \""},{"line_number":216,"context_line":"                          \"name or ID \u0027%(firewall_group)s\u0027: %(e)s\")"},{"line_number":217,"context_line":"                          % {const.FWG: fwg, \u0027e\u0027: e})"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a6eadb0_92d212ff","line":216,"range":{"start_line":216,"start_character":26,"end_line":216,"end_character":27},"in_reply_to":"1a6eadb0_9a7f9665","updated":"2016-12-21 06:53:58.000000000","message":"Done","commit_id":"369a81235ed4b21af17164b8eb5a0483f3d6b571"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"277c0388a2b43835f4f7ecb1065d5706a40b2d51","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        if result \u003e 0:"},{"line_number":220,"context_line":"            total \u003d len(parsed_args.firewall_groups)"},{"line_number":221,"context_line":"            msg \u003d (_(\"%(result)s of %(total)s firewall group(s) \""},{"line_number":222,"context_line":"                   \"failed to delete.\") % {\u0027result\u0027: result, \u0027total\u0027: total})"},{"line_number":223,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1a6eadb0_fa908a97","line":222,"range":{"start_line":222,"start_character":19,"end_line":222,"end_character":20},"updated":"2016-12-20 22:26:15.000000000","message":"this indentation doesnt seem correct","commit_id":"369a81235ed4b21af17164b8eb5a0483f3d6b571"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"c7f2e7f59bea06d27b6a80c319d8044e10186f84","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        if result \u003e 0:"},{"line_number":220,"context_line":"            total \u003d len(parsed_args.firewall_groups)"},{"line_number":221,"context_line":"            msg \u003d (_(\"%(result)s of %(total)s firewall group(s) \""},{"line_number":222,"context_line":"                   \"failed to delete.\") % {\u0027result\u0027: result, \u0027total\u0027: total})"},{"line_number":223,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1a6eadb0_b2cf0e55","line":222,"range":{"start_line":222,"start_character":19,"end_line":222,"end_character":20},"in_reply_to":"1a6eadb0_fa908a97","updated":"2016-12-21 06:53:58.000000000","message":"Done","commit_id":"369a81235ed4b21af17164b8eb5a0483f3d6b571"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"9345efe0b1331d87692e0d8b343281e1486f121e","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            \u0027--port\u0027,"},{"line_number":316,"context_line":"            metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":317,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":318,"context_line":"            help\u003d_(\u0027Port(s) (name or ID) to delete from firewall group\u0027))"},{"line_number":319,"context_line":"        port_group.add_argument("},{"line_number":320,"context_line":"            \u0027--all-port\u0027,"},{"line_number":321,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":38,"id":"da4df55a_79003b02","line":318,"range":{"start_line":318,"start_character":70,"end_line":318,"end_character":73},"updated":"2016-12-23 21:10:20.000000000","message":"if --port option is repeatable, may be nice to add that in the help text. for eg: (--port) option can be repeated.\n\nSimilarly for set and create if applicable","commit_id":"083a4cdfcb307ca7b52030e030c8b5b104af8bea"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"05dc9d3fa596f3b235921637b3d505611636af74","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            \u0027--port\u0027,"},{"line_number":316,"context_line":"            metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":317,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":318,"context_line":"            help\u003d_(\u0027Port(s) (name or ID) to delete from firewall group\u0027))"},{"line_number":319,"context_line":"        port_group.add_argument("},{"line_number":320,"context_line":"            \u0027--all-port\u0027,"},{"line_number":321,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":38,"id":"da4df55a_a10faf2c","line":318,"range":{"start_line":318,"start_character":70,"end_line":318,"end_character":73},"in_reply_to":"da4df55a_79003b02","updated":"2016-12-26 09:13:46.000000000","message":"Yes, \u0027--port\u0027 is repeatable option.  Therefore, I\u0027ll add some messages into them.  Thanks!","commit_id":"083a4cdfcb307ca7b52030e030c8b5b104af8bea"}],"neutronclient/osc/v2/fwaas/firewallpolicy.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutronclient._i18n import _"},{"line_number":22,"context_line":"from neutronclient._i18n import _LE"},{"line_number":23,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from osc_lib.command import command"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_31aeb385","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":35},"updated":"2016-09-01 12:01:29.000000000","message":"Per my comment below, we don\u0027t use _LE for client,","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"bfd1abbe1bb28a7e90c210503b5ce9517bcc6ef1","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutronclient._i18n import _"},{"line_number":22,"context_line":"from neutronclient._i18n import _LE"},{"line_number":23,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from osc_lib.command import command"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_073dedba","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":35},"in_reply_to":"fa7ab95a_31aeb385","updated":"2016-09-01 13:16:01.000000000","message":"OK. I\u0027ll remove it.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4165a5c0aa3d7033881091ab54cc3e88decd3011","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        parser \u003d super(ShowFirewallPolicy, self).get_parser(prog_name)"},{"line_number":132,"context_line":"        parser.add_argument("},{"line_number":133,"context_line":"            \u0027firewall_policy\u0027,"},{"line_number":134,"context_line":"            metavar\u003d\u0027FIREWALL_POLICY\u0027,"},{"line_number":135,"context_line":"            help\u003d_(\u0027Firewall policy to show (Name or ID)\u0027))"},{"line_number":136,"context_line":"        return parser"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_04e8880f","line":134,"range":{"start_line":134,"start_character":21,"end_line":134,"end_character":36},"updated":"2016-09-01 12:50:53.000000000","message":"In OSC, we use \"\u003cfirewall-policy\u003e\" as metavar.\n\n- Quote a string by \u003c\u003e\n- Use lowercase\n- Use hyphen as a delimiter (not underscore)\n\nThis applies to all similar metavar.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"7fc1e5924027ff4f135729979cd0bf515a572300","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        parser \u003d super(ShowFirewallPolicy, self).get_parser(prog_name)"},{"line_number":132,"context_line":"        parser.add_argument("},{"line_number":133,"context_line":"            \u0027firewall_policy\u0027,"},{"line_number":134,"context_line":"            metavar\u003d\u0027FIREWALL_POLICY\u0027,"},{"line_number":135,"context_line":"            help\u003d_(\u0027Firewall policy to show (Name or ID)\u0027))"},{"line_number":136,"context_line":"        return parser"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a89bdaa_9d72847b","line":134,"range":{"start_line":134,"start_character":21,"end_line":134,"end_character":36},"in_reply_to":"fa7ab95a_04e8880f","updated":"2016-09-05 16:08:16.000000000","message":"Done","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4165a5c0aa3d7033881091ab54cc3e88decd3011","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def get_parser(self, prog_name):"},{"line_number":151,"context_line":"        parser \u003d super(CreateFirewallPolicy, self).get_parser(prog_name)"},{"line_number":152,"context_line":"        parser.add_argument("},{"line_number":153,"context_line":"            \u0027name\u0027,"},{"line_number":154,"context_line":"            help\u003d_(\u0027Name for the firewall policy\u0027))"},{"line_number":155,"context_line":"        parser.add_argument("},{"line_number":156,"context_line":"            \u0027--firewall-rules\u0027, type\u003dlambda x: x.split(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_84265866","line":153,"updated":"2016-09-01 12:50:53.000000000","message":"You need to add metavar:\n\n  metavar\u003d\u0027\u003cname\u003e\u0027,","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"7fc1e5924027ff4f135729979cd0bf515a572300","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def get_parser(self, prog_name):"},{"line_number":151,"context_line":"        parser \u003d super(CreateFirewallPolicy, self).get_parser(prog_name)"},{"line_number":152,"context_line":"        parser.add_argument("},{"line_number":153,"context_line":"            \u0027name\u0027,"},{"line_number":154,"context_line":"            help\u003d_(\u0027Name for the firewall policy\u0027))"},{"line_number":155,"context_line":"        parser.add_argument("},{"line_number":156,"context_line":"            \u0027--firewall-rules\u0027, type\u003dlambda x: x.split(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a89bdaa_bd6f4891","line":153,"in_reply_to":"fa7ab95a_84265866","updated":"2016-09-05 16:08:16.000000000","message":"Done","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                client.delete_fwaas_firewall_policy(fwp_id)"},{"line_number":251,"context_line":"            except Exception as e:"},{"line_number":252,"context_line":"                result +\u003d 1"},{"line_number":253,"context_line":"                LOG.error(_LE(\"Failed to delete Firewall policy with \""},{"line_number":254,"context_line":"                          \"name or ID \u0027%(firewall_policy)s\u0027: %(e)s\")"},{"line_number":255,"context_line":"                          % {\u0027firewall_policy\u0027: fwp, \u0027e\u0027: e})"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_31a0739f","line":253,"range":{"start_line":253,"start_character":26,"end_line":253,"end_character":29},"updated":"2016-09-01 12:01:29.000000000","message":"In the client repo, we don\u0027t use _LE. Use \u0027_\u0027.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"bfd1abbe1bb28a7e90c210503b5ce9517bcc6ef1","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                client.delete_fwaas_firewall_policy(fwp_id)"},{"line_number":251,"context_line":"            except Exception as e:"},{"line_number":252,"context_line":"                result +\u003d 1"},{"line_number":253,"context_line":"                LOG.error(_LE(\"Failed to delete Firewall policy with \""},{"line_number":254,"context_line":"                          \"name or ID \u0027%(firewall_policy)s\u0027: %(e)s\")"},{"line_number":255,"context_line":"                          % {\u0027firewall_policy\u0027: fwp, \u0027e\u0027: e})"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_4747f54a","line":253,"range":{"start_line":253,"start_character":26,"end_line":253,"end_character":29},"in_reply_to":"fa7ab95a_31a0739f","updated":"2016-09-01 13:16:01.000000000","message":"Sure. I\u0027ll fix it.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            if parsed_args.insert_after:"},{"line_number":281,"context_line":"                _insert_after \u003d client.find_resource("},{"line_number":282,"context_line":"                    FWR, parsed_args.insert_after)[\u0027id\u0027]"},{"line_number":283,"context_line":"        return {FWR_ID: _rule_id,"},{"line_number":284,"context_line":"                \u0027insert_before\u0027: _insert_before,"},{"line_number":285,"context_line":"                \u0027insert_after\u0027: _insert_after}"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_b1cac39f","line":283,"range":{"start_line":283,"start_character":16,"end_line":283,"end_character":33},"updated":"2016-09-01 12:01:29.000000000","message":"Same question for firewall-policy-remove-rule.\n\nIs an empty string valid for firewall_rule_id?\nAccording to the above logic, if parsed_args.firewall_rule_id is empty, _rule_id will be an empty string here.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"bfd1abbe1bb28a7e90c210503b5ce9517bcc6ef1","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            if parsed_args.insert_after:"},{"line_number":281,"context_line":"                _insert_after \u003d client.find_resource("},{"line_number":282,"context_line":"                    FWR, parsed_args.insert_after)[\u0027id\u0027]"},{"line_number":283,"context_line":"        return {FWR_ID: _rule_id,"},{"line_number":284,"context_line":"                \u0027insert_before\u0027: _insert_before,"},{"line_number":285,"context_line":"                \u0027insert_after\u0027: _insert_after}"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_4737f2af","line":283,"range":{"start_line":283,"start_character":16,"end_line":283,"end_character":33},"in_reply_to":"fa7ab95a_b1cac39f","updated":"2016-09-01 13:16:01.000000000","message":"No, it\u0027s invalid.  I believe even if empty string has specified, following error will occur and finish.\n\nUnable to find firewall_group with name or id \u0027\u0027 \n\nHowever, If I specified \u0027\u0027(empty string) with show command,\n\ncommand:  openstack firewall group show \"\"\n\n* case1: exists 1 resource named \u0027myfwg\u0027\n\n\u003d\u003d\u003e Got result \u0027myfwg\u0027\n\n* case2: exists 2 resources named as same \u0027myfwg\u0027\n\n\u003d\u003d\u003e Got following error message:\n\nMultiple firewall_group matches found for name \u0027\u0027, use an ID to be more specific.\n\nIs this a true specification?  I think this message/behavior is a little strange.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def args2body(self, parsed_args):"},{"line_number":327,"context_line":"        fwr_id \u003d \u0027\u0027"},{"line_number":328,"context_line":"        if parsed_args.firewall_rule_id:"},{"line_number":329,"context_line":"            client \u003d self.app.client_manager.neutronclient"},{"line_number":330,"context_line":"            fwr_id \u003d client.find_resource("},{"line_number":331,"context_line":"                FWR, parsed_args.firewall_rule_id)[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_b120039d","line":328,"range":{"start_line":328,"start_character":23,"end_line":328,"end_character":40},"updated":"2016-09-01 12:01:29.000000000","message":"you use \u0027firewall_rule_id\u0027 here and FWR_ID in other places. Looks inconsistent....","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"bfd1abbe1bb28a7e90c210503b5ce9517bcc6ef1","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def args2body(self, parsed_args):"},{"line_number":327,"context_line":"        fwr_id \u003d \u0027\u0027"},{"line_number":328,"context_line":"        if parsed_args.firewall_rule_id:"},{"line_number":329,"context_line":"            client \u003d self.app.client_manager.neutronclient"},{"line_number":330,"context_line":"            fwr_id \u003d client.find_resource("},{"line_number":331,"context_line":"                FWR, parsed_args.firewall_rule_id)[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_07f24ad2","line":328,"range":{"start_line":328,"start_character":23,"end_line":328,"end_character":40},"in_reply_to":"fa7ab95a_b120039d","updated":"2016-09-01 13:16:01.000000000","message":"OK. I\u0027ll align \u0027firewall_rule_id\u0027 (string).","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            client \u003d self.app.client_manager.neutronclient"},{"line_number":330,"context_line":"            fwr_id \u003d client.find_resource("},{"line_number":331,"context_line":"                FWR, parsed_args.firewall_rule_id)[\u0027id\u0027]"},{"line_number":332,"context_line":"        return {FWR_ID: fwr_id}"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def get_parser(self, prog_name):"},{"line_number":335,"context_line":"        parser \u003d super(FirewallPolicyRemoveRule, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_b16e43c7","line":332,"range":{"start_line":332,"start_character":8,"end_line":332,"end_character":31},"updated":"2016-09-01 12:01:29.000000000","message":"Question: is {\u0027firewall_rule_id\u0027: \u0027\u0027} valid?\nAccording to the above logic, it looks valid, but I am not sure it works.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"bfd1abbe1bb28a7e90c210503b5ce9517bcc6ef1","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            client \u003d self.app.client_manager.neutronclient"},{"line_number":330,"context_line":"            fwr_id \u003d client.find_resource("},{"line_number":331,"context_line":"                FWR, parsed_args.firewall_rule_id)[\u0027id\u0027]"},{"line_number":332,"context_line":"        return {FWR_ID: fwr_id}"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def get_parser(self, prog_name):"},{"line_number":335,"context_line":"        parser \u003d super(FirewallPolicyRemoveRule, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_47c7f211","line":332,"range":{"start_line":332,"start_character":8,"end_line":332,"end_character":31},"in_reply_to":"fa7ab95a_b16e43c7","updated":"2016-09-01 13:16:01.000000000","message":"Same reply #283","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"f1466f5c9882b73c275f645e00da9c0799b671f2","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def _get_common_attrs(client_manager, parsed_args, is_create\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a89bdaa_f103c6bc","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":33},"updated":"2016-09-09 04:54:45.000000000","message":"Please note that remove it for release version. :)","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5954f497e18eaa9b2885880890ab93a93c79e5ac","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def _get_common_attrs(client_manager, parsed_args, is_create\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a8bc5a2_5e5ff140","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":33},"in_reply_to":"9a89bdaa_0b03930e","updated":"2016-09-23 05:06:31.000000000","message":"I see and  I\u0027ll use oslo.log.","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"647a53ba2f52af19d56fd7a20b87b59c2c6a9297","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def _get_common_attrs(client_manager, parsed_args, is_create\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a89bdaa_0b03930e","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":33},"in_reply_to":"9a89bdaa_f103c6bc","updated":"2016-09-09 07:33:17.000000000","message":"Comment is not valid. Please ignore it. Thanks.","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"932ae268ebfac5c6862d43d98a3589447748d3ef","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            _firewall_rules.append(client.find_resource("},{"line_number":50,"context_line":"                const.FWR, f, cmd_resource\u003d\u0027fwaas_\u0027 + const.FWR)[\u0027id\u0027])"},{"line_number":51,"context_line":"        attrs[const.FWRS] \u003d _firewall_rules"},{"line_number":52,"context_line":"    if parsed_args.no_firewall_rule:"},{"line_number":53,"context_line":"        attrs[const.FWRS] \u003d []"},{"line_number":54,"context_line":"    if parsed_args.audited:"},{"line_number":55,"context_line":"        attrs[\u0027audited\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a89bdaa_edbdacd8","line":52,"range":{"start_line":52,"start_character":4,"end_line":52,"end_character":6},"updated":"2016-09-09 04:29:23.000000000","message":"I think we should use \u0027elif\u0027 at here. How do you think?","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5954f497e18eaa9b2885880890ab93a93c79e5ac","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            _firewall_rules.append(client.find_resource("},{"line_number":50,"context_line":"                const.FWR, f, cmd_resource\u003d\u0027fwaas_\u0027 + const.FWR)[\u0027id\u0027])"},{"line_number":51,"context_line":"        attrs[const.FWRS] \u003d _firewall_rules"},{"line_number":52,"context_line":"    if parsed_args.no_firewall_rule:"},{"line_number":53,"context_line":"        attrs[const.FWRS] \u003d []"},{"line_number":54,"context_line":"    if parsed_args.audited:"},{"line_number":55,"context_line":"        attrs[\u0027audited\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a8bc5a2_5e2611cf","line":52,"in_reply_to":"9a89bdaa_edbdacd8","updated":"2016-09-23 05:06:31.000000000","message":"There values are mutually_exclusive_groups.  So, if both values are specified, it validated as following messages:\n\n* argument --firewall-rule: not allowed with argument --no-firewall-rule\n\nTherefore, it\u0027s not necessary to care.","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"932ae268ebfac5c6862d43d98a3589447748d3ef","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        attrs[const.FWRS] \u003d _firewall_rules"},{"line_number":52,"context_line":"    if parsed_args.no_firewall_rule:"},{"line_number":53,"context_line":"        attrs[const.FWRS] \u003d []"},{"line_number":54,"context_line":"    if parsed_args.audited:"},{"line_number":55,"context_line":"        attrs[\u0027audited\u0027] \u003d True"},{"line_number":56,"context_line":"    if parsed_args.no_audited:"},{"line_number":57,"context_line":"        attrs[\u0027audited\u0027] \u003d False"},{"line_number":58,"context_line":"    if parsed_args.name:"},{"line_number":59,"context_line":"        attrs[\u0027name\u0027] \u003d str(parsed_args.name)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a89bdaa_2db874e5","line":56,"range":{"start_line":54,"start_character":3,"end_line":56,"end_character":30},"updated":"2016-09-09 04:29:23.000000000","message":"Ditto!","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5954f497e18eaa9b2885880890ab93a93c79e5ac","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        attrs[const.FWRS] \u003d []"},{"line_number":54,"context_line":"    if parsed_args.audited:"},{"line_number":55,"context_line":"        attrs[\u0027audited\u0027] \u003d True"},{"line_number":56,"context_line":"    if parsed_args.no_audited:"},{"line_number":57,"context_line":"        attrs[\u0027audited\u0027] \u003d False"},{"line_number":58,"context_line":"    if parsed_args.name:"},{"line_number":59,"context_line":"        attrs[\u0027name\u0027] \u003d str(parsed_args.name)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a8bc5a2_890f812d","line":56,"in_reply_to":"9a89bdaa_2db874e5","updated":"2016-09-23 05:06:31.000000000","message":"Please check L#52\u0027s reply.","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"932ae268ebfac5c6862d43d98a3589447748d3ef","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        attrs[\u0027name\u0027] \u003d str(parsed_args.name)"},{"line_number":60,"context_line":"    if parsed_args.description:"},{"line_number":61,"context_line":"        attrs[\u0027description\u0027] \u003d str(parsed_args.description)"},{"line_number":62,"context_line":"    if parsed_args.public:"},{"line_number":63,"context_line":"        attrs[\u0027public\u0027] \u003d True"},{"line_number":64,"context_line":"    if parsed_args.private:"},{"line_number":65,"context_line":"        attrs[\u0027public\u0027] \u003d False"},{"line_number":66,"context_line":"    return attrs"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9a89bdaa_6d78bc2c","line":64,"range":{"start_line":62,"start_character":4,"end_line":64,"end_character":27},"updated":"2016-09-09 04:29:23.000000000","message":"Can we use \u0027elif\u0027 at here?","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5954f497e18eaa9b2885880890ab93a93c79e5ac","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        attrs[\u0027description\u0027] \u003d str(parsed_args.description)"},{"line_number":62,"context_line":"    if parsed_args.public:"},{"line_number":63,"context_line":"        attrs[\u0027public\u0027] \u003d True"},{"line_number":64,"context_line":"    if parsed_args.private:"},{"line_number":65,"context_line":"        attrs[\u0027public\u0027] \u003d False"},{"line_number":66,"context_line":"    return attrs"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5a8bc5a2_a91efd60","line":64,"in_reply_to":"9a89bdaa_6d78bc2c","updated":"2016-09-23 05:06:31.000000000","message":"Please check L#52\u0027s reply.","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"3c615af08ccf52a1afc49b5c6d18f7b462e34d76","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    fwr_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":85,"context_line":"    fwr_group.add_argument("},{"line_number":86,"context_line":"        \u0027--firewall-rule\u0027,"},{"line_number":87,"context_line":"        nargs\u003d\u0027+\u0027,"},{"line_number":88,"context_line":"        metavar\u003d\u0027\u003cfirewall-rule\u003e\u0027,"},{"line_number":89,"context_line":"        help\u003d_(\u0027Firewall rule(s) to apply (name or ID).\u0027))"},{"line_number":90,"context_line":"    fwr_group.add_argument("},{"line_number":91,"context_line":"        \u0027--no-firewall-rule\u0027,"},{"line_number":92,"context_line":"        action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_bba056f5","line":89,"range":{"start_line":87,"start_character":1,"end_line":89,"end_character":58},"updated":"2016-11-20 20:46:53.000000000","message":"as you are using nargs, it seems that firewall rules should be One or More.\nIts better to \"Repeat the Option\"  than to  \" add the values using nargs\"\n\nCan you use the action\u003dappend here?\nIt prevents nargs and helps track all options","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5c076b367c0ca19ad81e9b1a11bb97e50d89bee4","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    fwr_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":85,"context_line":"    fwr_group.add_argument("},{"line_number":86,"context_line":"        \u0027--firewall-rule\u0027,"},{"line_number":87,"context_line":"        nargs\u003d\u0027+\u0027,"},{"line_number":88,"context_line":"        metavar\u003d\u0027\u003cfirewall-rule\u003e\u0027,"},{"line_number":89,"context_line":"        help\u003d_(\u0027Firewall rule(s) to apply (name or ID).\u0027))"},{"line_number":90,"context_line":"    fwr_group.add_argument("},{"line_number":91,"context_line":"        \u0027--no-firewall-rule\u0027,"},{"line_number":92,"context_line":"        action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_0c4e6e3a","line":89,"range":{"start_line":87,"start_character":1,"end_line":89,"end_character":58},"in_reply_to":"7a77a97e_917b79f4","updated":"2016-11-21 02:19:21.000000000","message":"Could you tell me the reason why \u0027nargs\u0027 should prevent?  I think it\u0027s easy to specify single/multiple resources as follows:\n\n\u003e os firewall group policy create --firewall-rule XXXXX YYYYY ZZZZZ","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"995784986cb009db0cd18cf419db1f0d721ea558","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    fwr_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":85,"context_line":"    fwr_group.add_argument("},{"line_number":86,"context_line":"        \u0027--firewall-rule\u0027,"},{"line_number":87,"context_line":"        nargs\u003d\u0027+\u0027,"},{"line_number":88,"context_line":"        metavar\u003d\u0027\u003cfirewall-rule\u003e\u0027,"},{"line_number":89,"context_line":"        help\u003d_(\u0027Firewall rule(s) to apply (name or ID).\u0027))"},{"line_number":90,"context_line":"    fwr_group.add_argument("},{"line_number":91,"context_line":"        \u0027--no-firewall-rule\u0027,"},{"line_number":92,"context_line":"        action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_917b79f4","line":89,"range":{"start_line":87,"start_character":1,"end_line":89,"end_character":58},"in_reply_to":"7a77a97e_bba056f5","updated":"2016-11-21 02:12:47.000000000","message":"OK.  So, should I change all of \u0027nargs\u0027 to \u0027action\u003dappend\u0027, shouldn\u0027t I?","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"e4b048f0b115bb17ffd33d9d027e23026e1ab303","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            help\u003d_(\u0027Name for the firewall policy\u0027))"},{"line_number":96,"context_line":"        fwr_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":97,"context_line":"        fwr_group.add_argument("},{"line_number":98,"context_line":"            \u0027--firewall-rule\u0027,"},{"line_number":99,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":100,"context_line":"            metavar\u003d\u0027\u003cfirewall-rule\u003e\u0027,"},{"line_number":101,"context_line":"            help\u003d_(\u0027Firewall rule(s) to apply (name or ID)\u0027))"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a74a57a_315980ff","line":98,"updated":"2016-11-24 05:16:36.000000000","message":"Unset may be used to remove a rule from a firewall policy","commit_id":"31aa7bca905b51f1a5991800dc1f94d8e7119ee2"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"21611c4c0ba4825029238540d032536492df5d82","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            help\u003d_(\u0027Name for the firewall policy\u0027))"},{"line_number":96,"context_line":"        fwr_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":97,"context_line":"        fwr_group.add_argument("},{"line_number":98,"context_line":"            \u0027--firewall-rule\u0027,"},{"line_number":99,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":100,"context_line":"            metavar\u003d\u0027\u003cfirewall-rule\u003e\u0027,"},{"line_number":101,"context_line":"            help\u003d_(\u0027Firewall rule(s) to apply (name or ID)\u0027))"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a74a57a_18e1bc9a","line":98,"in_reply_to":"5a74a57a_315980ff","updated":"2016-11-25 18:02:25.000000000","message":"Done","commit_id":"31aa7bca905b51f1a5991800dc1f94d8e7119ee2"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"277c0388a2b43835f4f7ecb1065d5706a40b2d51","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            except Exception as e:"},{"line_number":169,"context_line":"                result +\u003d 1"},{"line_number":170,"context_line":"                LOG.error(_(\"Failed to delete Firewall policy with \""},{"line_number":171,"context_line":"                          \"name or ID \u0027%(firewall_policy)s\u0027: %(e)s\")"},{"line_number":172,"context_line":"                          % {const.FWP: fwp, \u0027e\u0027: e})"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a6eadb0_3a05a2c1","line":171,"range":{"start_line":171,"start_character":26,"end_line":171,"end_character":27},"updated":"2016-12-20 22:26:15.000000000","message":"this indentation doesnt seem correct","commit_id":"369a81235ed4b21af17164b8eb5a0483f3d6b571"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"c7f2e7f59bea06d27b6a80c319d8044e10186f84","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            except Exception as e:"},{"line_number":169,"context_line":"                result +\u003d 1"},{"line_number":170,"context_line":"                LOG.error(_(\"Failed to delete Firewall policy with \""},{"line_number":171,"context_line":"                          \"name or ID \u0027%(firewall_policy)s\u0027: %(e)s\")"},{"line_number":172,"context_line":"                          % {const.FWP: fwp, \u0027e\u0027: e})"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a6eadb0_d2d80a21","line":171,"range":{"start_line":171,"start_character":26,"end_line":171,"end_character":27},"in_reply_to":"1a6eadb0_3a05a2c1","updated":"2016-12-21 06:53:58.000000000","message":"Done","commit_id":"369a81235ed4b21af17164b8eb5a0483f3d6b571"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"277c0388a2b43835f4f7ecb1065d5706a40b2d51","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        if result \u003e 0:"},{"line_number":175,"context_line":"            total \u003d len(parsed_args.firewall_policy)"},{"line_number":176,"context_line":"            msg \u003d (_(\"%(result)s of %(total)s Firewall policy(s) \""},{"line_number":177,"context_line":"                   \"failed to delete.\") % {\u0027result\u0027: result, \u0027total\u0027: total})"},{"line_number":178,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1a6eadb0_9a123608","line":177,"range":{"start_line":177,"start_character":19,"end_line":177,"end_character":20},"updated":"2016-12-20 22:26:15.000000000","message":"this indentation doesnt seem correct","commit_id":"369a81235ed4b21af17164b8eb5a0483f3d6b571"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"c7f2e7f59bea06d27b6a80c319d8044e10186f84","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        if result \u003e 0:"},{"line_number":175,"context_line":"            total \u003d len(parsed_args.firewall_policy)"},{"line_number":176,"context_line":"            msg \u003d (_(\"%(result)s of %(total)s Firewall policy(s) \""},{"line_number":177,"context_line":"                   \"failed to delete.\") % {\u0027result\u0027: result, \u0027total\u0027: total})"},{"line_number":178,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1a6eadb0_f2d506e5","line":177,"range":{"start_line":177,"start_character":19,"end_line":177,"end_character":20},"in_reply_to":"1a6eadb0_9a123608","updated":"2016-12-21 06:53:58.000000000","message":"Done","commit_id":"369a81235ed4b21af17164b8eb5a0483f3d6b571"}],"neutronclient/osc/v2/fwaas/firewallrule.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            metavar\u003d\u0027SOURCE_FIREWALL_GROUP\u0027,"},{"line_number":243,"context_line":"            help\u003d_(\u0027Attach firewall group (ID or name)\u0027))"},{"line_number":244,"context_line":"        src_fwg_group.add_argument("},{"line_number":245,"context_line":"            \u0027--no-source-fw-group\u0027,"},{"line_number":246,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":247,"context_line":"            help\u003d_(\u0027Detach firewall group (ID or name)\u0027))"},{"line_number":248,"context_line":"        dst_fwg_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_b6b9d97b","line":245,"range":{"start_line":245,"start_character":25,"end_line":245,"end_character":27},"updated":"2016-09-01 12:01:29.000000000","message":"I think \u0027firewall\u0027 is better.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"bfd1abbe1bb28a7e90c210503b5ce9517bcc6ef1","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            metavar\u003d\u0027SOURCE_FIREWALL_GROUP\u0027,"},{"line_number":243,"context_line":"            help\u003d_(\u0027Attach firewall group (ID or name)\u0027))"},{"line_number":244,"context_line":"        src_fwg_group.add_argument("},{"line_number":245,"context_line":"            \u0027--no-source-fw-group\u0027,"},{"line_number":246,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":247,"context_line":"            help\u003d_(\u0027Detach firewall group (ID or name)\u0027))"},{"line_number":248,"context_line":"        dst_fwg_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_8ab021df","line":245,"range":{"start_line":245,"start_character":25,"end_line":245,"end_character":27},"in_reply_to":"fa7ab95a_b6b9d97b","updated":"2016-09-01 13:16:01.000000000","message":"I thought it was too long so that I changed \u0027firewall\u0027 to \u0027fw\u0027.  However, I found \u0027--availability-zone-hint\u0027 in OSC manual :-)  So, I agree with you and revert \u0027firewall\u0027.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":48,"context_line":"))"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def _get_id(client, resource, id_or_name):"},{"line_number":52,"context_line":"    if resource in constants.CMD_RESOURCE_MAP:"},{"line_number":53,"context_line":"        cmd_resource \u003d constants.CMD_RESOURCE_MAP[resource]"},{"line_number":54,"context_line":"    else:"},{"line_number":55,"context_line":"        cmd_resource \u003d None"},{"line_number":56,"context_line":"    return client.find_resource("},{"line_number":57,"context_line":"        resource, id_or_name, cmd_resource\u003dcmd_resource)[\u0027id\u0027]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def _get_common_parser(parser):"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_015dc414","line":57,"range":{"start_line":51,"start_character":0,"end_line":57,"end_character":62},"updated":"2016-09-01 17:50:07.000000000","message":"Same methods are defined in three places. Consider define a method in one place. Otherwise, CMD_RESOURCE_MAP is completely unnecessary.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":48,"context_line":"))"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def _get_id(client, resource, id_or_name):"},{"line_number":52,"context_line":"    if resource in constants.CMD_RESOURCE_MAP:"},{"line_number":53,"context_line":"        cmd_resource \u003d constants.CMD_RESOURCE_MAP[resource]"},{"line_number":54,"context_line":"    else:"},{"line_number":55,"context_line":"        cmd_resource \u003d None"},{"line_number":56,"context_line":"    return client.find_resource("},{"line_number":57,"context_line":"        resource, id_or_name, cmd_resource\u003dcmd_resource)[\u0027id\u0027]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def _get_common_parser(parser):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_7b3124a2","line":57,"range":{"start_line":51,"start_character":0,"end_line":57,"end_character":62},"in_reply_to":"fa7ab95a_015dc414","updated":"2016-09-05 16:06:09.000000000","message":"I\u0027ll define at common place.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"f1466f5c9882b73c275f645e00da9c0799b671f2","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":26,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"_attr_map \u003d sorted(("}],"source_content_type":"text/x-python","patch_set":18,"id":"9a89bdaa_911c3a15","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":33},"updated":"2016-09-09 04:54:45.000000000","message":"Please remove it for release version. :)","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5954f497e18eaa9b2885880890ab93a93c79e5ac","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":26,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"_attr_map \u003d sorted(("}],"source_content_type":"text/x-python","patch_set":18,"id":"5a8bc5a2_c930a9eb","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":33},"in_reply_to":"9a89bdaa_4b5bdb2e","updated":"2016-09-23 05:06:31.000000000","message":"I see and I\u0027ll use oslo.log.","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"647a53ba2f52af19d56fd7a20b87b59c2c6a9297","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":26,"context_line":"from neutronclient.osc.v2.fwaas import constants as const"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"_attr_map \u003d sorted(("}],"source_content_type":"text/x-python","patch_set":18,"id":"9a89bdaa_4b5bdb2e","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":33},"in_reply_to":"9a89bdaa_911c3a15","updated":"2016-09-09 07:33:17.000000000","message":"Comment is not valid. Please ignore it. Thanks.","commit_id":"93d4c77f54764e58a1885624a8e69ca9b7b58f39"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"10e9023107fe5554e52d7b857ce6da77fc1025e0","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            except Exception as e:"},{"line_number":228,"context_line":"                result +\u003d 1"},{"line_number":229,"context_line":"                LOG.error(_(\"Failed to delete Firewall rule with \""},{"line_number":230,"context_line":"                          \"name or ID \u0027%(firewall_rule)s\u0027: %(e)s\")"},{"line_number":231,"context_line":"                          % {const.FWR: fwr, \u0027e\u0027: e})"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_efad009c","line":230,"updated":"2016-11-10 11:31:44.000000000","message":"The indent level looks wrong.","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"8cf1d70e82f93a20bea4f6c181ec6f31a4dc965d","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            except Exception as e:"},{"line_number":228,"context_line":"                result +\u003d 1"},{"line_number":229,"context_line":"                LOG.error(_(\"Failed to delete Firewall rule with \""},{"line_number":230,"context_line":"                          \"name or ID \u0027%(firewall_rule)s\u0027: %(e)s\")"},{"line_number":231,"context_line":"                          % {const.FWR: fwr, \u0027e\u0027: e})"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_3b9d710a","line":230,"in_reply_to":"9a629dbe_efad009c","updated":"2016-11-13 18:02:45.000000000","message":"Done","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"10e9023107fe5554e52d7b857ce6da77fc1025e0","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        if result \u003e 0:"},{"line_number":234,"context_line":"            total \u003d len(parsed_args.firewall_rule)"},{"line_number":235,"context_line":"            msg \u003d (_(\"%(result)s of %(total)s Firewall rule(s) failed \""},{"line_number":236,"context_line":"                   \"to delete.\") % {\u0027result\u0027: result, \u0027total\u0027: total})"},{"line_number":237,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_6f9ad06f","line":236,"updated":"2016-11-10 11:31:44.000000000","message":"The indent level looks wrong.","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"8cf1d70e82f93a20bea4f6c181ec6f31a4dc965d","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        if result \u003e 0:"},{"line_number":234,"context_line":"            total \u003d len(parsed_args.firewall_rule)"},{"line_number":235,"context_line":"            msg \u003d (_(\"%(result)s of %(total)s Firewall rule(s) failed \""},{"line_number":236,"context_line":"                   \"to delete.\") % {\u0027result\u0027: result, \u0027total\u0027: total})"},{"line_number":237,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_7b8b69c3","line":236,"in_reply_to":"9a629dbe_6f9ad06f","updated":"2016-11-13 18:02:45.000000000","message":"Done","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"10e9023107fe5554e52d7b857ce6da77fc1025e0","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        parser.add_argument("},{"line_number":317,"context_line":"            const.FWR,"},{"line_number":318,"context_line":"            metavar\u003d\u0027\u003cfirewall-rule\u003e\u0027,"},{"line_number":319,"context_line":"            help\u003d_(\u0027Firewall rule to display(name or ID).\u0027))"},{"line_number":320,"context_line":"        return parser"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_2f7b7829","line":319,"range":{"start_line":319,"start_character":44,"end_line":319,"end_character":45},"updated":"2016-11-10 11:31:44.000000000","message":"A space is required.","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"8cf1d70e82f93a20bea4f6c181ec6f31a4dc965d","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        parser.add_argument("},{"line_number":317,"context_line":"            const.FWR,"},{"line_number":318,"context_line":"            metavar\u003d\u0027\u003cfirewall-rule\u003e\u0027,"},{"line_number":319,"context_line":"            help\u003d_(\u0027Firewall rule to display(name or ID).\u0027))"},{"line_number":320,"context_line":"        return parser"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a629dbe_fbbdb968","line":319,"range":{"start_line":319,"start_character":44,"end_line":319,"end_character":45},"in_reply_to":"9a629dbe_2f7b7829","updated":"2016-11-13 18:02:45.000000000","message":"Done","commit_id":"a8691000167072eae788e3c75191f53c6cf79c1c"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"3c615af08ccf52a1afc49b5c6d18f7b462e34d76","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        type\u003dnc_utils.convert_to_lowercase,"},{"line_number":72,"context_line":"        help\u003d_(\u0027Action for the firewall rule.\u0027))"},{"line_number":73,"context_line":"    parser.add_argument("},{"line_number":74,"context_line":"        \u0027--ip-version\u0027,"},{"line_number":75,"context_line":"        metavar\u003d\u0027\u003cip-version\u003e\u0027,"},{"line_number":76,"context_line":"        choices\u003d[\u00274\u0027, \u00276\u0027],"},{"line_number":77,"context_line":"        help\u003d_(\u0027Set IP version 4 or 6 (default is 4).\u0027))"},{"line_number":78,"context_line":"    src_ip_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":79,"context_line":"    src_ip_group.add_argument("},{"line_number":80,"context_line":"        \u0027--source-ip-address\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_1be06a28","line":77,"range":{"start_line":74,"start_character":8,"end_line":77,"end_character":56},"updated":"2016-11-20 20:46:53.000000000","message":"Cannot find where ip_version is retrieved from parsed_args , and where is its default value defined.\n\nYou can either specify default\u003d\"4\" here, or specify it where it is retrieved from parsed_args","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"995784986cb009db0cd18cf419db1f0d721ea558","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        type\u003dnc_utils.convert_to_lowercase,"},{"line_number":72,"context_line":"        help\u003d_(\u0027Action for the firewall rule.\u0027))"},{"line_number":73,"context_line":"    parser.add_argument("},{"line_number":74,"context_line":"        \u0027--ip-version\u0027,"},{"line_number":75,"context_line":"        metavar\u003d\u0027\u003cip-version\u003e\u0027,"},{"line_number":76,"context_line":"        choices\u003d[\u00274\u0027, \u00276\u0027],"},{"line_number":77,"context_line":"        help\u003d_(\u0027Set IP version 4 or 6 (default is 4).\u0027))"},{"line_number":78,"context_line":"    src_ip_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":79,"context_line":"    src_ip_group.add_argument("},{"line_number":80,"context_line":"        \u0027--source-ip-address\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a77a97e_0c6bceb7","line":77,"range":{"start_line":74,"start_character":8,"end_line":77,"end_character":56},"in_reply_to":"7a77a97e_1be06a28","updated":"2016-11-21 02:12:47.000000000","message":"I\u0027ll add default\u003d\u00274\u0027 on it.\n\n\u003e Cannot find where ip_version is retrieved from parsed_args\n\nLine #180","commit_id":"f525c3bdeb846d7ac3a26d633fca8b02f737f5a7"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"164866b035c705bbdd53a8841c448405f30d9e47","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def _get_common_parser(parser):"},{"line_number":52,"context_line":"    \"\"\"If is_create is True, protocol and action become mandatory arguments"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    \"\"\""},{"line_number":55,"context_line":"    parser.add_argument("}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_e9e6a242","line":52,"range":{"start_line":52,"start_character":6,"end_line":52,"end_character":74},"updated":"2016-11-29 03:25:47.000000000","message":"is this a valid docstring here?","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"cd8793590f3d882064e3bdba136fbb52b9dae381","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def _get_common_parser(parser):"},{"line_number":52,"context_line":"    \"\"\"If is_create is True, protocol and action become mandatory arguments"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    \"\"\""},{"line_number":55,"context_line":"    parser.add_argument("}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_b1da5415","line":52,"range":{"start_line":52,"start_character":6,"end_line":52,"end_character":74},"in_reply_to":"5a74a57a_e9e6a242","updated":"2016-11-29 05:23:21.000000000","message":"This is missed docstring.  I\u0027ll remove it.","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"164866b035c705bbdd53a8841c448405f30d9e47","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    public_group.add_argument("},{"line_number":118,"context_line":"        \u0027--public\u0027,"},{"line_number":119,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":120,"context_line":"        help\u003d_(\u0027Make the firewall group public, which allows it to be \u0027"},{"line_number":121,"context_line":"               \u0027used in all projects (as opposed to the default, \u0027"},{"line_number":122,"context_line":"               \u0027which is to restrict its use to the current project)\u0027))"},{"line_number":123,"context_line":"    public_group.add_argument("}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_895a8ef0","line":120,"range":{"start_line":120,"start_character":26,"end_line":120,"end_character":39},"updated":"2016-11-29 03:25:47.000000000","message":"i dont understand FWaaS API much, but do you mean firewall rule here ?","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"cd8793590f3d882064e3bdba136fbb52b9dae381","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    public_group.add_argument("},{"line_number":118,"context_line":"        \u0027--public\u0027,"},{"line_number":119,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":120,"context_line":"        help\u003d_(\u0027Make the firewall group public, which allows it to be \u0027"},{"line_number":121,"context_line":"               \u0027used in all projects (as opposed to the default, \u0027"},{"line_number":122,"context_line":"               \u0027which is to restrict its use to the current project)\u0027))"},{"line_number":123,"context_line":"    public_group.add_argument("}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_110a288a","line":120,"range":{"start_line":120,"start_character":26,"end_line":120,"end_character":39},"in_reply_to":"5a74a57a_895a8ef0","updated":"2016-11-29 05:23:21.000000000","message":"Yes, it\u0027s typo.  I\u0027ll fix it.","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"164866b035c705bbdd53a8841c448405f30d9e47","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    public_group.add_argument("},{"line_number":124,"context_line":"        \u0027--private\u0027,"},{"line_number":125,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":126,"context_line":"        help\u003d_(\u0027Restrict use of the firewall group to the current \u0027"},{"line_number":127,"context_line":"               \u0027project\u0027))"},{"line_number":128,"context_line":"    enable_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":129,"context_line":"    enable_group.add_argument("}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_c9700675","line":126,"range":{"start_line":126,"start_character":36,"end_line":126,"end_character":51},"updated":"2016-11-29 03:25:47.000000000","message":"ditto","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"cd8793590f3d882064e3bdba136fbb52b9dae381","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    public_group.add_argument("},{"line_number":124,"context_line":"        \u0027--private\u0027,"},{"line_number":125,"context_line":"        action\u003d\u0027store_true\u0027,"},{"line_number":126,"context_line":"        help\u003d_(\u0027Restrict use of the firewall group to the current \u0027"},{"line_number":127,"context_line":"               \u0027project\u0027))"},{"line_number":128,"context_line":"    enable_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":129,"context_line":"    enable_group.add_argument("}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_31fd646e","line":126,"range":{"start_line":126,"start_character":36,"end_line":126,"end_character":51},"in_reply_to":"5a74a57a_c9700675","updated":"2016-11-29 05:23:21.000000000","message":"Done","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"164866b035c705bbdd53a8841c448405f30d9e47","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        parser.add_argument("},{"line_number":367,"context_line":"            \u0027--public\u0027,"},{"line_number":368,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":369,"context_line":"            help\u003d_(\u0027Make the firewall group public, which allows it to be \u0027"},{"line_number":370,"context_line":"                   \u0027used in all projects (as opposed to the default, \u0027"},{"line_number":371,"context_line":"                   \u0027which is to restrict its use to the current project)\u0027))"},{"line_number":372,"context_line":"        parser.add_argument("},{"line_number":373,"context_line":"            \u0027--enable-rule\u0027,"},{"line_number":374,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_4995d630","line":371,"range":{"start_line":369,"start_character":19,"end_line":371,"end_character":73},"updated":"2016-11-29 03:25:47.000000000","message":"since this is unset, shouldnt this be restirct firwall rule?","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"cd8793590f3d882064e3bdba136fbb52b9dae381","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        parser.add_argument("},{"line_number":367,"context_line":"            \u0027--public\u0027,"},{"line_number":368,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":369,"context_line":"            help\u003d_(\u0027Make the firewall group public, which allows it to be \u0027"},{"line_number":370,"context_line":"                   \u0027used in all projects (as opposed to the default, \u0027"},{"line_number":371,"context_line":"                   \u0027which is to restrict its use to the current project)\u0027))"},{"line_number":372,"context_line":"        parser.add_argument("},{"line_number":373,"context_line":"            \u0027--enable-rule\u0027,"},{"line_number":374,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_f12dacfe","line":371,"range":{"start_line":369,"start_character":19,"end_line":371,"end_character":73},"in_reply_to":"5a74a57a_4995d630","updated":"2016-11-29 05:23:21.000000000","message":"Yes, following description is right:\n\n* Restrict use of the firewall rule to the current","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"164866b035c705bbdd53a8841c448405f30d9e47","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        parser.add_argument("},{"line_number":373,"context_line":"            \u0027--enable-rule\u0027,"},{"line_number":374,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":375,"context_line":"            help\u003d_(\u0027Enable this rule (default is enabled)\u0027))"},{"line_number":376,"context_line":"        return parser"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _get_attrs(self, client_manager, parsed_args):"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_29b97acc","line":375,"range":{"start_line":375,"start_character":20,"end_line":375,"end_character":26},"updated":"2016-11-29 03:25:47.000000000","message":"similarly .. this should be disable","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"cd8793590f3d882064e3bdba136fbb52b9dae381","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        parser.add_argument("},{"line_number":373,"context_line":"            \u0027--enable-rule\u0027,"},{"line_number":374,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":375,"context_line":"            help\u003d_(\u0027Enable this rule (default is enabled)\u0027))"},{"line_number":376,"context_line":"        return parser"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _get_attrs(self, client_manager, parsed_args):"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_5137404c","line":375,"range":{"start_line":375,"start_character":20,"end_line":375,"end_character":26},"in_reply_to":"5a74a57a_29b97acc","updated":"2016-11-29 05:23:21.000000000","message":"You\u0027re correct.  I\u0027ll fix it.","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"}],"neutronclient/shell.py":[{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    \u0027firewall-delete\u0027: firewall.DeleteFirewall,"},{"line_number":314,"context_line":"    \u0027fwaas-firewall-group-list\u0027: fw_group.ListFirewallGroup,"},{"line_number":315,"context_line":"    \u0027fwaas-firewall-group-create\u0027: fw_group.CreateFirewallGroup,"},{"line_number":316,"context_line":"    \u0027fwaas-firewall-group-show\u0027: fw_group.ShowFirewallGroup,"},{"line_number":317,"context_line":"    \u0027fwaas-firewall-group-update\u0027: fw_group.UpdateFirewallGroup,"},{"line_number":318,"context_line":"    \u0027fwaas-firewall-group-delete\u0027: fw_group.DeleteFirewallGroup,"},{"line_number":319,"context_line":"    \u0027fwaas-firewall-rule-list\u0027: fw_rule.ListFirewallRule,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_a6a666ab","line":316,"range":{"start_line":316,"start_character":11,"end_line":316,"end_character":19},"updated":"2016-08-18 11:00:16.000000000","message":"For consistency, suggest moving this line to @315.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    \u0027firewall-delete\u0027: firewall.DeleteFirewall,"},{"line_number":314,"context_line":"    \u0027fwaas-firewall-group-list\u0027: fw_group.ListFirewallGroup,"},{"line_number":315,"context_line":"    \u0027fwaas-firewall-group-create\u0027: fw_group.CreateFirewallGroup,"},{"line_number":316,"context_line":"    \u0027fwaas-firewall-group-show\u0027: fw_group.ShowFirewallGroup,"},{"line_number":317,"context_line":"    \u0027fwaas-firewall-group-update\u0027: fw_group.UpdateFirewallGroup,"},{"line_number":318,"context_line":"    \u0027fwaas-firewall-group-delete\u0027: fw_group.DeleteFirewallGroup,"},{"line_number":319,"context_line":"    \u0027fwaas-firewall-rule-list\u0027: fw_rule.ListFirewallRule,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_12116604","line":316,"range":{"start_line":316,"start_character":11,"end_line":316,"end_character":19},"in_reply_to":"3ac371cc_a6a666ab","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"}],"neutronclient/tests/unit/osc/v2/fwaas/common.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutronclient.tests.unit.osc.v2 import fakes as test_fakes"},{"line_number":18,"context_line":"from osc_lib.tests import utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# TODO(yushiro) replace new test from old one"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_7315a399","line":18,"updated":"2016-09-01 12:01:29.000000000","message":"Sort out the import grouping.\n\n  from osc_lib .....\n  \u003cblank line\u003e\n  from neutronclient....","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutronclient.tests.unit.osc.v2 import fakes as test_fakes"},{"line_number":18,"context_line":"from osc_lib.tests import utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# TODO(yushiro) replace new test from old one"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_39d3f139","line":18,"in_reply_to":"fa7ab95a_7315a399","updated":"2016-09-01 16:33:42.000000000","message":"Sure!","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"}],"neutronclient/tests/unit/osc/v2/fwaas/fakes.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#   under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import copy"},{"line_number":14,"context_line":"import mock"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f368d323","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":11},"updated":"2016-09-01 12:01:29.000000000","message":"mock is third party.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#   under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import copy"},{"line_number":14,"context_line":"import mock"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_b972a17a","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":11},"in_reply_to":"fa7ab95a_f368d323","updated":"2016-09-01 16:33:42.000000000","message":"Could you tell me what should I use?","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"NAME \u003d \u0027fake_name\u0027"},{"line_number":19,"context_line":"DESC \u003d \u0027fake description\u0027"},{"line_number":20,"context_line":"PUBLIC \u003d False"},{"line_number":21,"context_line":"ENABLED \u003d False"},{"line_number":22,"context_line":"AUDITED \u003d True"},{"line_number":23,"context_line":"ADMIN_STATE \u003d True"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class FakeFWaaS(object):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_b3d48bbd","line":23,"range":{"start_line":20,"start_character":0,"end_line":23,"end_character":18},"updated":"2016-09-01 12:01:29.000000000","message":"These are confusing as for example \u0027audited\u0027 can be both True and False. I think the naming is not appropriate.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"NAME \u003d \u0027fake_name\u0027"},{"line_number":19,"context_line":"DESC \u003d \u0027fake description\u0027"},{"line_number":20,"context_line":"PUBLIC \u003d False"},{"line_number":21,"context_line":"ENABLED \u003d False"},{"line_number":22,"context_line":"AUDITED \u003d True"},{"line_number":23,"context_line":"ADMIN_STATE \u003d True"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class FakeFWaaS(object):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_593a7599","line":23,"range":{"start_line":20,"start_character":0,"end_line":23,"end_character":18},"in_reply_to":"fa7ab95a_b3d48bbd","updated":"2016-09-01 16:33:42.000000000","message":"Exactly.  I won\u0027t use these values.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        :param Dictionary attrs:"},{"line_number":36,"context_line":"            A dictionary with all attributes"},{"line_number":37,"context_line":"        :param int count:"},{"line_number":38,"context_line":"            The number of routers to fake"},{"line_number":39,"context_line":"        :return:"},{"line_number":40,"context_line":"            A list of dictionaries faking the fwaas resources"},{"line_number":41,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f307f31a","line":38,"range":{"start_line":38,"start_character":26,"end_line":38,"end_character":34},"updated":"2016-09-01 12:01:29.000000000","message":"routers?","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        :param Dictionary attrs:"},{"line_number":36,"context_line":"            A dictionary with all attributes"},{"line_number":37,"context_line":"        :param int count:"},{"line_number":38,"context_line":"            The number of routers to fake"},{"line_number":39,"context_line":"        :return:"},{"line_number":40,"context_line":"            A list of dictionaries faking the fwaas resources"},{"line_number":41,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f9f189ce","line":38,"range":{"start_line":38,"start_character":26,"end_line":38,"end_character":34},"in_reply_to":"fa7ab95a_f307f31a","updated":"2016-09-01 16:33:42.000000000","message":"I forgot to fix. will do.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        return [self.create(attrs\u003dattrs) for i in range(0, count)]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def get(self, attrs\u003dNone, count\u003d2):"},{"line_number":45,"context_line":"        \"\"\"Create multiple fake firewall groups"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        :param Dictionary attrs:"},{"line_number":48,"context_line":"            A dictionary with all attributes"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f320d3b2","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":47},"updated":"2016-09-01 12:01:29.000000000","message":"The docstring looks incorrect.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        return [self.create(attrs\u003dattrs) for i in range(0, count)]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def get(self, attrs\u003dNone, count\u003d2):"},{"line_number":45,"context_line":"        \"\"\"Create multiple fake firewall groups"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        :param Dictionary attrs:"},{"line_number":48,"context_line":"            A dictionary with all attributes"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f99fc95c","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":47},"in_reply_to":"fa7ab95a_f320d3b2","updated":"2016-09-01 16:33:42.000000000","message":"I think so.  I\u0027ll change it.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        :param Dictionary attrs:"},{"line_number":48,"context_line":"            A dictionary with all attributes"},{"line_number":49,"context_line":"        :param int count:"},{"line_number":50,"context_line":"            The number of routers to fake"},{"line_number":51,"context_line":"        :return:"},{"line_number":52,"context_line":"            A list of dictionaries faking the trunks"},{"line_number":53,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_d30caf44","line":50,"range":{"start_line":50,"start_character":26,"end_line":50,"end_character":34},"updated":"2016-09-01 12:01:29.000000000","message":"routers?","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        :param Dictionary attrs:"},{"line_number":48,"context_line":"            A dictionary with all attributes"},{"line_number":49,"context_line":"        :param int count:"},{"line_number":50,"context_line":"            The number of routers to fake"},{"line_number":51,"context_line":"        :return:"},{"line_number":52,"context_line":"            A list of dictionaries faking the trunks"},{"line_number":53,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_7999f96d","line":50,"range":{"start_line":50,"start_character":26,"end_line":50,"end_character":34},"in_reply_to":"fa7ab95a_d30caf44","updated":"2016-09-01 16:33:42.000000000","message":"Oh, not routers but fwaas resources.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        :param int count:"},{"line_number":50,"context_line":"            The number of routers to fake"},{"line_number":51,"context_line":"        :return:"},{"line_number":52,"context_line":"            A list of dictionaries faking the trunks"},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        if attrs is None:"},{"line_number":55,"context_line":"            attrs \u003d self.bulk_create(count\u003dcount)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_33023b0c","line":52,"range":{"start_line":52,"start_character":46,"end_line":52,"end_character":52},"updated":"2016-09-01 12:01:29.000000000","message":"not \"trunks\"","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        :param int count:"},{"line_number":50,"context_line":"            The number of routers to fake"},{"line_number":51,"context_line":"        :return:"},{"line_number":52,"context_line":"            A list of dictionaries faking the trunks"},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        if attrs is None:"},{"line_number":55,"context_line":"            attrs \u003d self.bulk_create(count\u003dcount)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_39b691dc","line":52,"range":{"start_line":52,"start_character":46,"end_line":52,"end_character":52},"in_reply_to":"fa7ab95a_33023b0c","updated":"2016-09-01 16:33:42.000000000","message":"oh!  It\u0027s not trunks but fwaas resources.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            \u0027public\u0027: PUBLIC,"},{"line_number":74,"context_line":"            \u0027ports\u0027: []"},{"line_number":75,"context_line":"        }"},{"line_number":76,"context_line":"        self.attrs \u003d attrs"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"class FirewallPolicy(FakeFWaaS):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_3619497a","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":26},"updated":"2016-09-01 12:01:29.000000000","message":"This line is unnecessary.\n\n self.attrs \u003d {\n     \u0027id\u0027: ....","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            \u0027public\u0027: PUBLIC,"},{"line_number":74,"context_line":"            \u0027ports\u0027: []"},{"line_number":75,"context_line":"        }"},{"line_number":76,"context_line":"        self.attrs \u003d attrs"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"class FirewallPolicy(FakeFWaaS):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_99f6bdf7","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":26},"in_reply_to":"fa7ab95a_3619497a","updated":"2016-09-01 16:33:42.000000000","message":"Exactly. Remove it.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            \u0027public\u0027: PUBLIC,"},{"line_number":91,"context_line":"            \u0027firewall_rules\u0027: []"},{"line_number":92,"context_line":"        }"},{"line_number":93,"context_line":"        self.attrs \u003d attrs"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"class FirewallRule(FakeFWaaS):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_76291189","line":93,"range":{"start_line":93,"start_character":8,"end_line":93,"end_character":26},"updated":"2016-09-01 12:01:29.000000000","message":"ditto","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            \u0027public\u0027: PUBLIC,"},{"line_number":91,"context_line":"            \u0027firewall_rules\u0027: []"},{"line_number":92,"context_line":"        }"},{"line_number":93,"context_line":"        self.attrs \u003d attrs"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"class FirewallRule(FakeFWaaS):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f9e7c93d","line":93,"range":{"start_line":93,"start_character":8,"end_line":93,"end_character":26},"in_reply_to":"fa7ab95a_76291189","updated":"2016-09-01 16:33:42.000000000","message":"Done","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            \u0027source_firewall_group_id\u0027: None,"},{"line_number":116,"context_line":"            \u0027destination_firewall_group_id\u0027: None,"},{"line_number":117,"context_line":"        }"},{"line_number":118,"context_line":"        self.attrs \u003d attrs"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_363069e8","line":118,"range":{"start_line":118,"start_character":8,"end_line":118,"end_character":26},"updated":"2016-09-01 12:01:29.000000000","message":"ditto","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            \u0027source_firewall_group_id\u0027: None,"},{"line_number":116,"context_line":"            \u0027destination_firewall_group_id\u0027: None,"},{"line_number":117,"context_line":"        }"},{"line_number":118,"context_line":"        self.attrs \u003d attrs"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_39d05153","line":118,"range":{"start_line":118,"start_character":8,"end_line":118,"end_character":26},"in_reply_to":"fa7ab95a_363069e8","updated":"2016-09-01 16:33:42.000000000","message":"Done","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"}],"neutronclient/tests/unit/osc/v2/fwaas/test_firewallgroup.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mock import MagicMock"},{"line_number":21,"context_line":"from neutronclient.osc import utils as osc_utils"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_96b055df","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":11},"updated":"2016-09-01 12:01:29.000000000","message":"mock is third-party.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mock import MagicMock"},{"line_number":21,"context_line":"from neutronclient.osc import utils as osc_utils"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f9db4919","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":11},"in_reply_to":"fa7ab95a_96b055df","updated":"2016-09-01 16:33:42.000000000","message":"same comment.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mock import MagicMock"},{"line_number":21,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":22,"context_line":"from neutronclient.osc.v2.fwaas import firewallgroup"},{"line_number":23,"context_line":"from neutronclient.tests.unit.osc.v2 import fakes as test_fakes"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_56dded12","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":26},"updated":"2016-09-01 12:01:29.000000000","message":"Use module level import. This line is unnecessary.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mock import MagicMock"},{"line_number":21,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":22,"context_line":"from neutronclient.osc.v2.fwaas import firewallgroup"},{"line_number":23,"context_line":"from neutronclient.tests.unit.osc.v2 import fakes as test_fakes"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_79357944","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":26},"in_reply_to":"fa7ab95a_56dded12","updated":"2016-09-01 16:33:42.000000000","message":"Done","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"9c4da741108ebf88f49735a84127773c76e10c1b","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def setUp(self):"},{"line_number":88,"context_line":"        super(TestFirewallGroup, self).setUp()"},{"line_number":89,"context_line":"        self.neutronclient.find_resource \u003d mock.MagicMock()"},{"line_number":90,"context_line":"        self.neutronclient.find_resource.side_effect \u003d \\"},{"line_number":91,"context_line":"            lambda x, y, **k: {\u0027id\u0027: y}"},{"line_number":92,"context_line":"        osc_utils.find_project \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_aa0ff82c","line":89,"range":{"start_line":89,"start_character":48,"end_line":89,"end_character":57},"updated":"2016-09-28 06:33:56.000000000","message":"Shall we use Mock replace MagicMock?","commit_id":"d475e5d9cda2c6fe92c22b1bc1c96d274e451789"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"86aad64c1fd3b0130b94662ff5bc235d4e1498c9","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def setUp(self):"},{"line_number":88,"context_line":"        super(TestFirewallGroup, self).setUp()"},{"line_number":89,"context_line":"        self.neutronclient.find_resource \u003d mock.MagicMock()"},{"line_number":90,"context_line":"        self.neutronclient.find_resource.side_effect \u003d \\"},{"line_number":91,"context_line":"            lambda x, y, **k: {\u0027id\u0027: y}"},{"line_number":92,"context_line":"        osc_utils.find_project \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba5da102_7cae3199","line":89,"range":{"start_line":89,"start_character":48,"end_line":89,"end_character":57},"in_reply_to":"5a8bc5a2_aa0ff82c","updated":"2016-11-01 13:22:53.000000000","message":"Done","commit_id":"d475e5d9cda2c6fe92c22b1bc1c96d274e451789"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"0c6111f180d36caa194721fcc0e9459533f9e69f","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        ]"},{"line_number":521,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":522,"context_line":"        result \u003d self.cmd.take_action(parsed_args)"},{"line_number":523,"context_line":"        self.mocked.assert_called_once_with(target, {self.res: {\u0027ports\u0027: []}})"},{"line_number":524,"context_line":"        self.assertIsNone(result)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def test_set_ingress_policy_and_no_ingress_policy(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a74a57a_5d3b73d1","line":523,"range":{"start_line":523,"start_character":52,"end_line":523,"end_character":76},"updated":"2016-11-24 01:30:34.000000000","message":"It should be {self.res: {\u0027ports\u0027: [port]}}, shouldn\u0027t you?","commit_id":"31aa7bca905b51f1a5991800dc1f94d8e7119ee2"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"c242ecca034c25d680dc711b30be531d72933b49","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        ]"},{"line_number":521,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":522,"context_line":"        result \u003d self.cmd.take_action(parsed_args)"},{"line_number":523,"context_line":"        self.mocked.assert_called_once_with(target, {self.res: {\u0027ports\u0027: []}})"},{"line_number":524,"context_line":"        self.assertIsNone(result)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def test_set_ingress_policy_and_no_ingress_policy(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a74a57a_469d6058","line":523,"range":{"start_line":523,"start_character":52,"end_line":523,"end_character":76},"in_reply_to":"5a74a57a_5d3b73d1","updated":"2016-11-24 04:21:51.000000000","message":"Correct.  I missed following implementation[1]\n\n[1]https://github.com/openstack/python-openstackclient/blob/master/doc/source/command-options.rst#implementation-2","commit_id":"31aa7bca905b51f1a5991800dc1f94d8e7119ee2"}],"neutronclient/tests/unit/osc/v2/fwaas/test_firewallpolicy.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mock import MagicMock"},{"line_number":21,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":22,"context_line":"from neutronclient.osc.v2.fwaas import firewallpolicy"},{"line_number":23,"context_line":"from neutronclient.tests.unit.osc.v2 import fakes as test_fakes"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_767cb1eb","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":26},"updated":"2016-09-01 12:01:29.000000000","message":"Same comment for the previous file.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mock import MagicMock"},{"line_number":21,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":22,"context_line":"from neutronclient.osc.v2.fwaas import firewallpolicy"},{"line_number":23,"context_line":"from neutronclient.tests.unit.osc.v2 import fakes as test_fakes"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_7983b9cc","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":26},"in_reply_to":"fa7ab95a_767cb1eb","updated":"2016-09-01 16:33:42.000000000","message":"Done","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"9c4da741108ebf88f49735a84127773c76e10c1b","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def setUp(self):"},{"line_number":81,"context_line":"        super(TestFirewallPolicy, self).setUp()"},{"line_number":82,"context_line":"        self.neutronclient.find_resource \u003d mock.MagicMock()"},{"line_number":83,"context_line":"        self.neutronclient.find_resource.side_effect \u003d \\"},{"line_number":84,"context_line":"            lambda x, y, **k: {\u0027id\u0027: y}"},{"line_number":85,"context_line":"        # fw_common.get_id.side_effect \u003d lambda x, y, z: z"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_970b492b","line":82,"updated":"2016-09-28 06:33:56.000000000","message":"Shall we use Mock replace MagicMock?","commit_id":"d475e5d9cda2c6fe92c22b1bc1c96d274e451789"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"86aad64c1fd3b0130b94662ff5bc235d4e1498c9","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def setUp(self):"},{"line_number":81,"context_line":"        super(TestFirewallPolicy, self).setUp()"},{"line_number":82,"context_line":"        self.neutronclient.find_resource \u003d mock.MagicMock()"},{"line_number":83,"context_line":"        self.neutronclient.find_resource.side_effect \u003d \\"},{"line_number":84,"context_line":"            lambda x, y, **k: {\u0027id\u0027: y}"},{"line_number":85,"context_line":"        # fw_common.get_id.side_effect \u003d lambda x, y, z: z"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba5da102_1cb8d5c7","line":82,"in_reply_to":"5a8bc5a2_970b492b","updated":"2016-11-01 13:22:53.000000000","message":"Done","commit_id":"d475e5d9cda2c6fe92c22b1bc1c96d274e451789"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"9c4da741108ebf88f49735a84127773c76e10c1b","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.neutronclient.find_resource.side_effect \u003d \\"},{"line_number":84,"context_line":"            lambda x, y, **k: {\u0027id\u0027: y}"},{"line_number":85,"context_line":"        # fw_common.get_id.side_effect \u003d lambda x, y, z: z"},{"line_number":86,"context_line":"        osc_utils.find_project \u003d mock.MagicMock()"},{"line_number":87,"context_line":"        osc_utils.find_project.id \u003d _fwp[\u0027tenant_id\u0027]"},{"line_number":88,"context_line":"        self.res \u003d \u0027firewall_policy\u0027"},{"line_number":89,"context_line":"        self.res_plural \u003d \u0027firewall_policies\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_f702cd0a","line":86,"range":{"start_line":86,"start_character":38,"end_line":86,"end_character":47},"updated":"2016-09-28 06:33:56.000000000","message":"ditto!","commit_id":"d475e5d9cda2c6fe92c22b1bc1c96d274e451789"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"86aad64c1fd3b0130b94662ff5bc235d4e1498c9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.neutronclient.find_resource.side_effect \u003d \\"},{"line_number":84,"context_line":"            lambda x, y, **k: {\u0027id\u0027: y}"},{"line_number":85,"context_line":"        # fw_common.get_id.side_effect \u003d lambda x, y, z: z"},{"line_number":86,"context_line":"        osc_utils.find_project \u003d mock.MagicMock()"},{"line_number":87,"context_line":"        osc_utils.find_project.id \u003d _fwp[\u0027tenant_id\u0027]"},{"line_number":88,"context_line":"        self.res \u003d \u0027firewall_policy\u0027"},{"line_number":89,"context_line":"        self.res_plural \u003d \u0027firewall_policies\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba5da102_9ccce56b","line":86,"range":{"start_line":86,"start_character":38,"end_line":86,"end_character":47},"in_reply_to":"5a8bc5a2_f702cd0a","updated":"2016-11-01 13:22:53.000000000","message":"Done","commit_id":"d475e5d9cda2c6fe92c22b1bc1c96d274e451789"}],"neutronclient/tests/unit/osc/v2/fwaas/test_firewallrule.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f72066a6c7d2fbda65c872eaf6362564cbd6d93f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    \u0027Action\u0027,"},{"line_number":61,"context_line":"    \u0027Description\u0027,"},{"line_number":62,"context_line":"    \u0027Destination IP address\u0027,"},{"line_number":63,"context_line":"    \u0027Destination firewall group\u0027,"},{"line_number":64,"context_line":"    \u0027Destination port\u0027,"},{"line_number":65,"context_line":"    \u0027Enabled\u0027,"},{"line_number":66,"context_line":"    \u0027ID\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_364a29ad","line":63,"range":{"start_line":63,"start_character":5,"end_line":63,"end_character":31},"updated":"2016-09-01 12:01:29.000000000","message":"Usually we use capitalized version.\n\n Destination Firewall Group","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"803fdc77827e89ef2cb025cfbf909c0a1762b23f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    \u0027Action\u0027,"},{"line_number":61,"context_line":"    \u0027Description\u0027,"},{"line_number":62,"context_line":"    \u0027Destination IP address\u0027,"},{"line_number":63,"context_line":"    \u0027Destination firewall group\u0027,"},{"line_number":64,"context_line":"    \u0027Destination port\u0027,"},{"line_number":65,"context_line":"    \u0027Enabled\u0027,"},{"line_number":66,"context_line":"    \u0027ID\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_39c77113","line":63,"range":{"start_line":63,"start_character":5,"end_line":63,"end_character":31},"in_reply_to":"fa7ab95a_364a29ad","updated":"2016-09-01 16:33:42.000000000","message":"OK. I\u0027ll reflect all of display columns.","commit_id":"9ce8013cd50fb032f2fe99e1940367e4953c0458"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":21,"context_line":"from neutronclient.osc.v2.fwaas import firewallrule"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from neutronclient.tests.unit.osc.v2 import fakes as test_fakes"},{"line_number":24,"context_line":"from neutronclient.tests.unit.osc.v2.fwaas import common"},{"line_number":25,"context_line":"from neutronclient.tests.unit.osc.v2.fwaas import fakes"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_a1dc18e5","line":22,"updated":"2016-09-01 17:50:07.000000000","message":"unnecessary blank line","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutronclient.osc import utils as osc_utils"},{"line_number":21,"context_line":"from neutronclient.osc.v2.fwaas import firewallrule"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from neutronclient.tests.unit.osc.v2 import fakes as test_fakes"},{"line_number":24,"context_line":"from neutronclient.tests.unit.osc.v2.fwaas import common"},{"line_number":25,"context_line":"from neutronclient.tests.unit.osc.v2.fwaas import fakes"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_c0e24103","line":22,"in_reply_to":"fa7ab95a_a1dc18e5","updated":"2016-09-05 16:06:09.000000000","message":"Done","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"9c4da741108ebf88f49735a84127773c76e10c1b","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def setUp(self):"},{"line_number":80,"context_line":"        super(TestFirewallRule, self).setUp()"},{"line_number":81,"context_line":"        self.neutronclient.find_resource \u003d mock.MagicMock()"},{"line_number":82,"context_line":"        self.neutronclient.find_resource.side_effect \u003d \\"},{"line_number":83,"context_line":"            lambda x, y, **k: {\u0027id\u0027: y}"},{"line_number":84,"context_line":"        # fw_common.get_id.side_effect \u003d lambda x, y, z: z"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_d7fb1146","line":81,"range":{"start_line":81,"start_character":48,"end_line":81,"end_character":57},"updated":"2016-09-28 06:33:56.000000000","message":"Shall we use Mock instead? Please refer to: https://github.com/openstack/python-neutronclient/commit/291b31e0e5eed01cbbe917a644e38c2cedafae3e","commit_id":"d475e5d9cda2c6fe92c22b1bc1c96d274e451789"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"86aad64c1fd3b0130b94662ff5bc235d4e1498c9","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def setUp(self):"},{"line_number":80,"context_line":"        super(TestFirewallRule, self).setUp()"},{"line_number":81,"context_line":"        self.neutronclient.find_resource \u003d mock.MagicMock()"},{"line_number":82,"context_line":"        self.neutronclient.find_resource.side_effect \u003d \\"},{"line_number":83,"context_line":"            lambda x, y, **k: {\u0027id\u0027: y}"},{"line_number":84,"context_line":"        # fw_common.get_id.side_effect \u003d lambda x, y, z: z"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba5da102_1c8a951b","line":81,"range":{"start_line":81,"start_character":48,"end_line":81,"end_character":57},"in_reply_to":"5a8bc5a2_d7fb1146","updated":"2016-11-01 13:22:53.000000000","message":"Done","commit_id":"d475e5d9cda2c6fe92c22b1bc1c96d274e451789"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"9c4da741108ebf88f49735a84127773c76e10c1b","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.neutronclient.find_resource.side_effect \u003d \\"},{"line_number":83,"context_line":"            lambda x, y, **k: {\u0027id\u0027: y}"},{"line_number":84,"context_line":"        # fw_common.get_id.side_effect \u003d lambda x, y, z: z"},{"line_number":85,"context_line":"        osc_utils.find_project \u003d mock.MagicMock()"},{"line_number":86,"context_line":"        osc_utils.find_project.id \u003d _fwr[\u0027tenant_id\u0027]"},{"line_number":87,"context_line":"        self.res \u003d \u0027firewall_rule\u0027"},{"line_number":88,"context_line":"        self.res_plural \u003d \u0027firewall_rules\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a8bc5a2_179499e6","line":85,"range":{"start_line":85,"start_character":38,"end_line":85,"end_character":47},"updated":"2016-09-28 06:33:56.000000000","message":"Ditto!","commit_id":"d475e5d9cda2c6fe92c22b1bc1c96d274e451789"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"86aad64c1fd3b0130b94662ff5bc235d4e1498c9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.neutronclient.find_resource.side_effect \u003d \\"},{"line_number":83,"context_line":"            lambda x, y, **k: {\u0027id\u0027: y}"},{"line_number":84,"context_line":"        # fw_common.get_id.side_effect \u003d lambda x, y, z: z"},{"line_number":85,"context_line":"        osc_utils.find_project \u003d mock.MagicMock()"},{"line_number":86,"context_line":"        osc_utils.find_project.id \u003d _fwr[\u0027tenant_id\u0027]"},{"line_number":87,"context_line":"        self.res \u003d \u0027firewall_rule\u0027"},{"line_number":88,"context_line":"        self.res_plural \u003d \u0027firewall_rules\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba5da102_fc716145","line":85,"range":{"start_line":85,"start_character":38,"end_line":85,"end_character":47},"in_reply_to":"5a8bc5a2_179499e6","updated":"2016-11-01 13:22:53.000000000","message":"Done","commit_id":"d475e5d9cda2c6fe92c22b1bc1c96d274e451789"}],"neutronclient/v2_0/client.py":[{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"4c8b95d9848edb6695b4fd972afc99c19273c86f","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"        \"\"\"Deletes the specified firewall.\"\"\""},{"line_number":1573,"context_line":"        return self.delete(self.firewall_path % (firewall))"},{"line_number":1574,"context_line":""},{"line_number":1575,"context_line":"    def create_fwaas_firewall_group(self, body\u003dNone):"},{"line_number":1576,"context_line":"        \"\"\"Creates a new firewall group.\"\"\""},{"line_number":1577,"context_line":"        return self.post(self.fwaas_firewall_groups_path, body\u003dbody)"},{"line_number":1578,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_6643ce6c","line":1575,"range":{"start_line":1575,"start_character":8,"end_line":1575,"end_character":35},"updated":"2016-08-18 11:00:16.000000000","message":"Suggest the list/show/create/update/delete ordering, here and below.","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ea7404a489a49136d33a0b039b7acf323a49124c","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"        \"\"\"Deletes the specified firewall.\"\"\""},{"line_number":1573,"context_line":"        return self.delete(self.firewall_path % (firewall))"},{"line_number":1574,"context_line":""},{"line_number":1575,"context_line":"    def create_fwaas_firewall_group(self, body\u003dNone):"},{"line_number":1576,"context_line":"        \"\"\"Creates a new firewall group.\"\"\""},{"line_number":1577,"context_line":"        return self.post(self.fwaas_firewall_groups_path, body\u003dbody)"},{"line_number":1578,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_bbc30d37","line":1575,"range":{"start_line":1575,"start_character":8,"end_line":1575,"end_character":35},"in_reply_to":"3ac371cc_6643ce6c","updated":"2016-08-18 14:30:30.000000000","message":"Done","commit_id":"102bb48d05c085ffa7cc1941e7fc04018ea4c068"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":1650,"context_line":"        \"\"\"Deletes the specified firewall policy\"\"\""},{"line_number":1651,"context_line":"        return self.delete(self.fwaas_firewall_policy_path % (firewall_policy))"},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"    def fwaas_firewall_policy_insert_rule(self, firewall_policy, body\u003dNone):"},{"line_number":1654,"context_line":"        \"\"\"Inserts specified rule into firewall policy\"\"\""},{"line_number":1655,"context_line":"        return self.put((self.fwaas_firewall_policy_insert_path %"},{"line_number":1656,"context_line":"                        (firewall_policy)), body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_417fccdf","line":1653,"updated":"2016-09-01 17:50:07.000000000","message":"The method name in this class should start with verb.\nIn addition, the method name looks inconsistent with other FWaaS v2 methods.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":1650,"context_line":"        \"\"\"Deletes the specified firewall policy\"\"\""},{"line_number":1651,"context_line":"        return self.delete(self.fwaas_firewall_policy_path % (firewall_policy))"},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"    def fwaas_firewall_policy_insert_rule(self, firewall_policy, body\u003dNone):"},{"line_number":1654,"context_line":"        \"\"\"Inserts specified rule into firewall policy\"\"\""},{"line_number":1655,"context_line":"        return self.put((self.fwaas_firewall_policy_insert_path %"},{"line_number":1656,"context_line":"                        (firewall_policy)), body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_c5a41359","line":1653,"in_reply_to":"fa7ab95a_417fccdf","updated":"2016-09-05 16:06:09.000000000","message":"Done","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":1655,"context_line":"        return self.put((self.fwaas_firewall_policy_insert_path %"},{"line_number":1656,"context_line":"                        (firewall_policy)), body\u003dbody)"},{"line_number":1657,"context_line":""},{"line_number":1658,"context_line":"    def fwaas_firewall_policy_remove_rule(self, firewall_policy, body\u003dNone):"},{"line_number":1659,"context_line":"        \"\"\"Removes specified rule from firewall policy\"\"\""},{"line_number":1660,"context_line":"        return self.put((self.fwaas_firewall_policy_remove_path %"},{"line_number":1661,"context_line":"                        (firewall_policy)), body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa7ab95a_618050c0","line":1658,"updated":"2016-09-01 17:50:07.000000000","message":"ditto","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":1655,"context_line":"        return self.put((self.fwaas_firewall_policy_insert_path %"},{"line_number":1656,"context_line":"                        (firewall_policy)), body\u003dbody)"},{"line_number":1657,"context_line":""},{"line_number":1658,"context_line":"    def fwaas_firewall_policy_remove_rule(self, firewall_policy, body\u003dNone):"},{"line_number":1659,"context_line":"        \"\"\"Removes specified rule from firewall policy\"\"\""},{"line_number":1660,"context_line":"        return self.put((self.fwaas_firewall_policy_remove_path %"},{"line_number":1661,"context_line":"                        (firewall_policy)), body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_e58917cc","line":1658,"in_reply_to":"fa7ab95a_618050c0","updated":"2016-09-05 16:06:09.000000000","message":"Done","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"164866b035c705bbdd53a8841c448405f30d9e47","unresolved":false,"context_lines":[{"line_number":661,"context_line":"                     \u0027firewalls\u0027: \u0027firewall\u0027,"},{"line_number":662,"context_line":"                     \u0027fwaas_firewall_rules\u0027: \u0027fwaas_firewall_rule\u0027,"},{"line_number":663,"context_line":"                     \u0027fwaas_firewall_policies\u0027: \u0027fwaas_firewall_policy\u0027,"},{"line_number":664,"context_line":"                     \u0027fwaas_firewall_groups\u0027: \u0027fwaas_firewall_groups\u0027,"},{"line_number":665,"context_line":"                     \u0027metering_labels\u0027: \u0027metering_label\u0027,"},{"line_number":666,"context_line":"                     \u0027metering_label_rules\u0027: \u0027metering_label_rule\u0027,"},{"line_number":667,"context_line":"                     \u0027loadbalancers\u0027: \u0027loadbalancer\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_29e09acc","line":664,"range":{"start_line":664,"start_character":47,"end_line":664,"end_character":68},"updated":"2016-11-29 03:25:47.000000000","message":"fwaas_firewall_group?","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"cd8793590f3d882064e3bdba136fbb52b9dae381","unresolved":false,"context_lines":[{"line_number":661,"context_line":"                     \u0027firewalls\u0027: \u0027firewall\u0027,"},{"line_number":662,"context_line":"                     \u0027fwaas_firewall_rules\u0027: \u0027fwaas_firewall_rule\u0027,"},{"line_number":663,"context_line":"                     \u0027fwaas_firewall_policies\u0027: \u0027fwaas_firewall_policy\u0027,"},{"line_number":664,"context_line":"                     \u0027fwaas_firewall_groups\u0027: \u0027fwaas_firewall_groups\u0027,"},{"line_number":665,"context_line":"                     \u0027metering_labels\u0027: \u0027metering_label\u0027,"},{"line_number":666,"context_line":"                     \u0027metering_label_rules\u0027: \u0027metering_label_rule\u0027,"},{"line_number":667,"context_line":"                     \u0027loadbalancers\u0027: \u0027loadbalancer\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a74a57a_b14894cd","line":664,"range":{"start_line":664,"start_character":47,"end_line":664,"end_character":68},"in_reply_to":"5a74a57a_29e09acc","updated":"2016-11-29 05:23:21.000000000","message":"Yes.  I\u0027ll fix it.","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"}],"releasenotes/notes/support-fwaasv2-cli-7f21676c551f8ae0.yaml":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - CLI support for the \"Firewall as a Service v2\" feature, which enhanced"},{"line_number":4,"context_line":"    FWaaS functionality."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"fa7ab95a_a1d258fe","line":3,"range":{"start_line":3,"start_character":60,"end_line":3,"end_character":66},"updated":"2016-09-01 17:50:07.000000000","message":"which -\u003e which is","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - CLI support for the \"Firewall as a Service v2\" feature, which enhanced"},{"line_number":4,"context_line":"    FWaaS functionality."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9a89bdaa_20ba0d24","line":3,"range":{"start_line":3,"start_character":60,"end_line":3,"end_character":66},"in_reply_to":"fa7ab95a_a1d258fe","updated":"2016-09-05 16:06:09.000000000","message":"Done","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e4fdf41f14a844e5320fd24354e5a52b5881d762","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - CLI support for the \"Firewall as a Service v2\" feature, which enhanced"},{"line_number":4,"context_line":"    FWaaS functionality."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"fa7ab95a_21b728d9","line":4,"updated":"2016-09-01 17:50:07.000000000","message":"It is better to mention this is provided as OSC plugin commands.","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"62b442938b98f20cb03b6833313e6d6c18151950","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - CLI support for the \"Firewall as a Service v2\" feature, which enhanced"},{"line_number":4,"context_line":"    FWaaS functionality."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9a89bdaa_40b71139","line":4,"in_reply_to":"fa7ab95a_21b728d9","updated":"2016-09-05 16:06:09.000000000","message":"Done","commit_id":"2b407183cc5d184d4eaf70bb1d3995ece404ad38"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"ced0e5bbccf81ab05be9ce53584c390fe8a4db45","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - CLI support for the \"Firewall as a Service v2\" feature, which is enhanced"},{"line_number":4,"context_line":"    FWaaS functionality as OSC plugin commands."}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5a74a57a_34a320a0","line":4,"range":{"start_line":4,"start_character":23,"end_line":4,"end_character":24},"updated":"2016-12-01 01:38:01.000000000","message":"comma \u0027,\u0027 here?","commit_id":"84b3f2352f0982270ab3f84883d85fdc039445bb"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ab7e63aaca4d081fd810fdeed7831cd5f91c1be9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - CLI support for the \"Firewall as a Service v2\" feature, which is enhanced"},{"line_number":4,"context_line":"    FWaaS functionality as OSC plugin commands."}],"source_content_type":"text/x-yaml","patch_set":33,"id":"3a71b18c_22421211","line":4,"range":{"start_line":4,"start_character":23,"end_line":4,"end_character":24},"in_reply_to":"5a74a57a_34a320a0","updated":"2016-12-02 07:39:44.000000000","message":"Done","commit_id":"84b3f2352f0982270ab3f84883d85fdc039445bb"}],"setup.cfg":[{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"9c038bdfd952920ee669e9cbe3f138a5f34000b5","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    network_trunk_set \u003d neutronclient.osc.v2.trunk.network_trunk:SetNetworkTrunk"},{"line_number":43,"context_line":"    network_trunk_show \u003d neutronclient.osc.v2.trunk.network_trunk:ShowNetworkTrunk"},{"line_number":44,"context_line":"    network_trunk_unset \u003d neutronclient.osc.v2.trunk.network_trunk:UnsetNetworkTrunk"},{"line_number":45,"context_line":"    firewall_group_create \u003d neutronclient.osc.v2.fwaas.firewallgroup:CreateFirewallGroup"},{"line_number":46,"context_line":"    firewall_group_delete \u003d neutronclient.osc.v2.fwaas.firewallgroup:DeleteFirewallGroup"},{"line_number":47,"context_line":"    firewall_group_list \u003d neutronclient.osc.v2.fwaas.firewallgroup:ListFirewallGroup"},{"line_number":48,"context_line":"    firewall_group_set \u003d neutronclient.osc.v2.fwaas.firewallgroup:SetFirewallGroup"},{"line_number":49,"context_line":"    firewall_policy_create \u003d neutronclient.osc.v2.fwaas.firewallpolicy:CreateFirewallPolicy"},{"line_number":50,"context_line":"    firewall_policy_delete \u003d neutronclient.osc.v2.fwaas.firewallpolicy:DeleteFirewallPolicy"},{"line_number":51,"context_line":"    firewall_policy_list \u003d neutronclient.osc.v2.fwaas.firewallpolicy:ListFirewallPolicy"},{"line_number":52,"context_line":"    firewall_policy_set \u003d neutronclient.osc.v2.fwaas.firewallpolicy:SetFirewallPolicy"},{"line_number":53,"context_line":"    firewall_rule_create \u003d neutronclient.osc.v2.fwaas.firewallrule:CreateFirewallRule"},{"line_number":54,"context_line":"    firewall_rule_delete \u003d neutronclient.osc.v2.fwaas.firewallrule:DeleteFirewallRule"},{"line_number":55,"context_line":"    firewall_rule_list \u003d neutronclient.osc.v2.fwaas.firewallrule:ListFirewallRule"},{"line_number":56,"context_line":"    firewall_rule_set \u003d neutronclient.osc.v2.fwaas.firewallrule:SetFirewallRule"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"[build_sphinx]"},{"line_number":59,"context_line":"all_files \u003d 1"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"1ac06dbe_f0060d1f","line":56,"range":{"start_line":45,"start_character":4,"end_line":56,"end_character":79},"updated":"2016-08-19 21:14:26.000000000","message":"i have noticed that commands are ordered in alphabetical order and you can include a blank line between the network trunk and fwaas commands..","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"30b43301f2cf59adc9df16fba0a59f8bde3dfebc","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    network_trunk_set \u003d neutronclient.osc.v2.trunk.network_trunk:SetNetworkTrunk"},{"line_number":43,"context_line":"    network_trunk_show \u003d neutronclient.osc.v2.trunk.network_trunk:ShowNetworkTrunk"},{"line_number":44,"context_line":"    network_trunk_unset \u003d neutronclient.osc.v2.trunk.network_trunk:UnsetNetworkTrunk"},{"line_number":45,"context_line":"    firewall_group_create \u003d neutronclient.osc.v2.fwaas.firewallgroup:CreateFirewallGroup"},{"line_number":46,"context_line":"    firewall_group_delete \u003d neutronclient.osc.v2.fwaas.firewallgroup:DeleteFirewallGroup"},{"line_number":47,"context_line":"    firewall_group_list \u003d neutronclient.osc.v2.fwaas.firewallgroup:ListFirewallGroup"},{"line_number":48,"context_line":"    firewall_group_set \u003d neutronclient.osc.v2.fwaas.firewallgroup:SetFirewallGroup"},{"line_number":49,"context_line":"    firewall_policy_create \u003d neutronclient.osc.v2.fwaas.firewallpolicy:CreateFirewallPolicy"},{"line_number":50,"context_line":"    firewall_policy_delete \u003d neutronclient.osc.v2.fwaas.firewallpolicy:DeleteFirewallPolicy"},{"line_number":51,"context_line":"    firewall_policy_list \u003d neutronclient.osc.v2.fwaas.firewallpolicy:ListFirewallPolicy"},{"line_number":52,"context_line":"    firewall_policy_set \u003d neutronclient.osc.v2.fwaas.firewallpolicy:SetFirewallPolicy"},{"line_number":53,"context_line":"    firewall_rule_create \u003d neutronclient.osc.v2.fwaas.firewallrule:CreateFirewallRule"},{"line_number":54,"context_line":"    firewall_rule_delete \u003d neutronclient.osc.v2.fwaas.firewallrule:DeleteFirewallRule"},{"line_number":55,"context_line":"    firewall_rule_list \u003d neutronclient.osc.v2.fwaas.firewallrule:ListFirewallRule"},{"line_number":56,"context_line":"    firewall_rule_set \u003d neutronclient.osc.v2.fwaas.firewallrule:SetFirewallRule"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"[build_sphinx]"},{"line_number":59,"context_line":"all_files \u003d 1"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"fa7ab95a_4667e24c","line":56,"range":{"start_line":45,"start_character":4,"end_line":56,"end_character":79},"in_reply_to":"1ac06dbe_f0060d1f","updated":"2016-08-30 15:25:47.000000000","message":"Done","commit_id":"5b3b7a672e7dec3cb429d9f0087be8e62ad8cc5b"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"164866b035c705bbdd53a8841c448405f30d9e47","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    network_trunk_show \u003d neutronclient.osc.v2.trunk.network_trunk:ShowNetworkTrunk"},{"line_number":45,"context_line":"    network_trunk_unset \u003d neutronclient.osc.v2.trunk.network_trunk:UnsetNetworkTrunk"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    firewall_group_list \u003d neutronclient.osc.v2.fwaas.firewallgroup:ListFirewallGroup"},{"line_number":48,"context_line":"    firewall_group_create \u003d neutronclient.osc.v2.fwaas.firewallgroup:CreateFirewallGroup"},{"line_number":49,"context_line":"    firewall_group_delete \u003d neutronclient.osc.v2.fwaas.firewallgroup:DeleteFirewallGroup"},{"line_number":50,"context_line":"    firewall_group_set \u003d neutronclient.osc.v2.fwaas.firewallgroup:SetFirewallGroup"},{"line_number":51,"context_line":"    firewall_group_show \u003d neutronclient.osc.v2.fwaas.firewallgroup:ShowFirewallGroup"}],"source_content_type":"text/x-ttcn-cfg","patch_set":30,"id":"5a74a57a_09d67ef0","line":48,"range":{"start_line":47,"start_character":4,"end_line":48,"end_character":25},"updated":"2016-11-29 03:25:47.000000000","message":"nit: alphabetical order","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"cd8793590f3d882064e3bdba136fbb52b9dae381","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    network_trunk_show \u003d neutronclient.osc.v2.trunk.network_trunk:ShowNetworkTrunk"},{"line_number":45,"context_line":"    network_trunk_unset \u003d neutronclient.osc.v2.trunk.network_trunk:UnsetNetworkTrunk"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    firewall_group_list \u003d neutronclient.osc.v2.fwaas.firewallgroup:ListFirewallGroup"},{"line_number":48,"context_line":"    firewall_group_create \u003d neutronclient.osc.v2.fwaas.firewallgroup:CreateFirewallGroup"},{"line_number":49,"context_line":"    firewall_group_delete \u003d neutronclient.osc.v2.fwaas.firewallgroup:DeleteFirewallGroup"},{"line_number":50,"context_line":"    firewall_group_set \u003d neutronclient.osc.v2.fwaas.firewallgroup:SetFirewallGroup"},{"line_number":51,"context_line":"    firewall_group_show \u003d neutronclient.osc.v2.fwaas.firewallgroup:ShowFirewallGroup"}],"source_content_type":"text/x-ttcn-cfg","patch_set":30,"id":"5a74a57a_510e608c","line":48,"range":{"start_line":47,"start_character":4,"end_line":48,"end_character":25},"in_reply_to":"5a74a57a_09d67ef0","updated":"2016-11-29 05:23:21.000000000","message":"Done","commit_id":"f6784ad19cb775a809d1335a9f2c1770d1fd3d90"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"ced0e5bbccf81ab05be9ce53584c390fe8a4db45","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    firewall_group_unset \u003d neutronclient.osc.v2.fwaas.firewallgroup:UnsetFirewallGroup"},{"line_number":53,"context_line":"    firewall_group_policy_create \u003d neutronclient.osc.v2.fwaas.firewallpolicy:CreateFirewallPolicy"},{"line_number":54,"context_line":"    firewall_group_policy_delete \u003d neutronclient.osc.v2.fwaas.firewallpolicy:DeleteFirewallPolicy"},{"line_number":55,"context_line":"    firewall_group_policy_insert_rule \u003d neutronclient.osc.v2.fwaas.firewallpolicy:FirewallPolicyInsertRule"},{"line_number":56,"context_line":"    firewall_group_policy_list \u003d neutronclient.osc.v2.fwaas.firewallpolicy:ListFirewallPolicy"},{"line_number":57,"context_line":"    firewall_group_policy_remove_rule \u003d neutronclient.osc.v2.fwaas.firewallpolicy:FirewallPolicyRemoveRule"},{"line_number":58,"context_line":"    firewall_group_policy_set \u003d neutronclient.osc.v2.fwaas.firewallpolicy:SetFirewallPolicy"}],"source_content_type":"text/x-ttcn-cfg","patch_set":33,"id":"5a74a57a_949a346d","line":55,"range":{"start_line":55,"start_character":26,"end_line":55,"end_character":32},"updated":"2016-12-01 01:38:01.000000000","message":"action \u0027insert\u0027 is not part of common OSC actions[1]. How about \"firewall_group_policy_add_rule\" ? add is complimentary to \"remove\" which you are using below on L57\n\n[1]: http://docs.openstack.org/developer/python-openstackclient/commands.html","commit_id":"84b3f2352f0982270ab3f84883d85fdc039445bb"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"be063de3c0a7018b14c4641057460f4dbf43feb1","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    firewall_group_unset \u003d neutronclient.osc.v2.fwaas.firewallgroup:UnsetFirewallGroup"},{"line_number":53,"context_line":"    firewall_group_policy_create \u003d neutronclient.osc.v2.fwaas.firewallpolicy:CreateFirewallPolicy"},{"line_number":54,"context_line":"    firewall_group_policy_delete \u003d neutronclient.osc.v2.fwaas.firewallpolicy:DeleteFirewallPolicy"},{"line_number":55,"context_line":"    firewall_group_policy_insert_rule \u003d neutronclient.osc.v2.fwaas.firewallpolicy:FirewallPolicyInsertRule"},{"line_number":56,"context_line":"    firewall_group_policy_list \u003d neutronclient.osc.v2.fwaas.firewallpolicy:ListFirewallPolicy"},{"line_number":57,"context_line":"    firewall_group_policy_remove_rule \u003d neutronclient.osc.v2.fwaas.firewallpolicy:FirewallPolicyRemoveRule"},{"line_number":58,"context_line":"    firewall_group_policy_set \u003d neutronclient.osc.v2.fwaas.firewallpolicy:SetFirewallPolicy"}],"source_content_type":"text/x-ttcn-cfg","patch_set":33,"id":"5a74a57a_9f496d91","line":55,"range":{"start_line":55,"start_character":26,"end_line":55,"end_character":32},"in_reply_to":"5a74a57a_949a346d","updated":"2016-12-01 02:06:53.000000000","message":"+1 \nNice finding","commit_id":"84b3f2352f0982270ab3f84883d85fdc039445bb"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ab7e63aaca4d081fd810fdeed7831cd5f91c1be9","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    firewall_group_unset \u003d neutronclient.osc.v2.fwaas.firewallgroup:UnsetFirewallGroup"},{"line_number":53,"context_line":"    firewall_group_policy_create \u003d neutronclient.osc.v2.fwaas.firewallpolicy:CreateFirewallPolicy"},{"line_number":54,"context_line":"    firewall_group_policy_delete \u003d neutronclient.osc.v2.fwaas.firewallpolicy:DeleteFirewallPolicy"},{"line_number":55,"context_line":"    firewall_group_policy_insert_rule \u003d neutronclient.osc.v2.fwaas.firewallpolicy:FirewallPolicyInsertRule"},{"line_number":56,"context_line":"    firewall_group_policy_list \u003d neutronclient.osc.v2.fwaas.firewallpolicy:ListFirewallPolicy"},{"line_number":57,"context_line":"    firewall_group_policy_remove_rule \u003d neutronclient.osc.v2.fwaas.firewallpolicy:FirewallPolicyRemoveRule"},{"line_number":58,"context_line":"    firewall_group_policy_set \u003d neutronclient.osc.v2.fwaas.firewallpolicy:SetFirewallPolicy"}],"source_content_type":"text/x-ttcn-cfg","patch_set":33,"id":"3a71b18c_a25622d0","line":55,"range":{"start_line":55,"start_character":26,"end_line":55,"end_character":32},"in_reply_to":"5a74a57a_949a346d","updated":"2016-12-02 07:39:44.000000000","message":"Thank you!  I\u0027ll change it.","commit_id":"84b3f2352f0982270ab3f84883d85fdc039445bb"}]}
