)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"99ef1b243a8fc03d4a307f3b00e57219716f0d4d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As described in [1], it is more appropriate and friendly to replace"},{"line_number":10,"context_line":"\u0027bgp_speaker_show_dragents\u0027 with \u0027bgp_dragent_list_hosting_speakers\u0027."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://docs.openstack.org/neutron-dynamic-routing/latest/"},{"line_number":13,"context_line":"    reference/index.html#rest-interface"},{"line_number":14,"context_line":"Closes-Bug: #1858377"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I9e0703fccf535b1e1a2055ed917336055b7395f5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_38386aeb","line":13,"range":{"start_line":11,"start_character":0,"end_line":13,"end_character":39},"updated":"2020-01-06 10:20:49.000000000","message":"(unrelated to this change) It looks better to move it to the networking API reference [1]. We can find all networking API in a single place.\n\n[1] https://docs.openstack.org/api-ref/network/","commit_id":"8723120e88c1aaafb9dc5570d5230503ec2bb773"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"caeca4113c352fa9cc730fd706a35dc62360ae2e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As described in [1], it is more appropriate and friendly to replace"},{"line_number":10,"context_line":"\u0027bgp_speaker_show_dragents\u0027 with \u0027bgp_dragent_list_hosting_speakers\u0027."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://docs.openstack.org/neutron-dynamic-routing/latest/"},{"line_number":13,"context_line":"    reference/index.html#rest-interface"},{"line_number":14,"context_line":"Closes-Bug: #1858377"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I9e0703fccf535b1e1a2055ed917336055b7395f5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_aafb9212","line":13,"range":{"start_line":11,"start_character":0,"end_line":13,"end_character":39},"in_reply_to":"3fa7e38b_38386aeb","updated":"2020-01-07 07:52:59.000000000","message":"Done","commit_id":"8723120e88c1aaafb9dc5570d5230503ec2bb773"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9e8909ee73d46aba190c966ea0f251bc57fb23ce","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Replace \u0027bgp_speaker_show_dragents\u0027 with \u0027bgp_dragent_list\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As described in [1], it is more appropriate and friendly to replace"},{"line_number":10,"context_line":"\u0027bgp_speaker_show_dragents\u0027 with \u0027bgp_dragent_list\u0027. this patch uses"},{"line_number":11,"context_line":"\u0027openstack bgp dragent list\u0027 to show the list of dragents, and the"},{"line_number":12,"context_line":"optional parameter \u0027bgp-speaker\u0027 shows the list of dragents hosting"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_9abc6fb6","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":19},"updated":"2020-01-15 05:19:12.000000000","message":"OSC commands do not necessarily need to mirrot the API reference, so this reason is not so convincing. IMHO more reason is to follow the other agent related commands in OSC like network agent list.","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"0946b203ffe9d162c43bb742d3437b40336ff1d7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Replace \u0027bgp_speaker_show_dragents\u0027 with \u0027bgp_dragent_list\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As described in [1], it is more appropriate and friendly to replace"},{"line_number":10,"context_line":"\u0027bgp_speaker_show_dragents\u0027 with \u0027bgp_dragent_list\u0027. this patch uses"},{"line_number":11,"context_line":"\u0027openstack bgp dragent list\u0027 to show the list of dragents, and the"},{"line_number":12,"context_line":"optional parameter \u0027bgp-speaker\u0027 shows the list of dragents hosting"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_bdca8544","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":19},"in_reply_to":"3fa7e38b_9abc6fb6","updated":"2020-01-15 08:11:46.000000000","message":"Done","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"908c1696a472bfa201d02af3d1a77000b8884214","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Replace \u0027bgp_speaker_show_dragents\u0027 with \u0027bgp_dragent_list\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In order to follow other agent related commands in OSC, it is more"},{"line_number":10,"context_line":"appropriate and friendly to replace \u0027bgp_speaker_show_dragents\u0027 with"},{"line_number":11,"context_line":"\u0027bgp_dragent_list\u0027. this patch uses \u0027openstack bgp dragent list\u0027 to"},{"line_number":12,"context_line":"show the list of dragents, and the optional parameter \u0027bgp-speaker\u0027"},{"line_number":13,"context_line":"shows the list of dragents hosting a specific bgp speaker."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3fa7e38b_31d603c6","line":10,"range":{"start_line":10,"start_character":37,"end_line":10,"end_character":62},"updated":"2020-02-14 14:35:05.000000000","message":"s/bgp speaker show dragents (no underscores)","commit_id":"b612696b13e781337f39147673fef8f53d7c0250"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"b6b44a763819cd0c868077a5ef47ec9b53402763","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Replace \u0027bgp_speaker_show_dragents\u0027 with \u0027bgp_dragent_list\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In order to follow other agent related commands in OSC, it is more"},{"line_number":10,"context_line":"appropriate and friendly to replace \u0027bgp_speaker_show_dragents\u0027 with"},{"line_number":11,"context_line":"\u0027bgp_dragent_list\u0027. this patch uses \u0027openstack bgp dragent list\u0027 to"},{"line_number":12,"context_line":"show the list of dragents, and the optional parameter \u0027bgp-speaker\u0027"},{"line_number":13,"context_line":"shows the list of dragents hosting a specific bgp speaker."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3fa7e38b_873212bf","line":10,"range":{"start_line":10,"start_character":37,"end_line":10,"end_character":62},"in_reply_to":"3fa7e38b_31d603c6","updated":"2020-02-15 10:08:36.000000000","message":"Done","commit_id":"b612696b13e781337f39147673fef8f53d7c0250"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"908c1696a472bfa201d02af3d1a77000b8884214","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In order to follow other agent related commands in OSC, it is more"},{"line_number":10,"context_line":"appropriate and friendly to replace \u0027bgp_speaker_show_dragents\u0027 with"},{"line_number":11,"context_line":"\u0027bgp_dragent_list\u0027. this patch uses \u0027openstack bgp dragent list\u0027 to"},{"line_number":12,"context_line":"show the list of dragents, and the optional parameter \u0027bgp-speaker\u0027"},{"line_number":13,"context_line":"shows the list of dragents hosting a specific bgp speaker."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3fa7e38b_11d747bf","line":11,"range":{"start_line":11,"start_character":1,"end_line":11,"end_character":17},"updated":"2020-02-14 14:35:05.000000000","message":"s/bgp dragent list","commit_id":"b612696b13e781337f39147673fef8f53d7c0250"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"b6b44a763819cd0c868077a5ef47ec9b53402763","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In order to follow other agent related commands in OSC, it is more"},{"line_number":10,"context_line":"appropriate and friendly to replace \u0027bgp_speaker_show_dragents\u0027 with"},{"line_number":11,"context_line":"\u0027bgp_dragent_list\u0027. this patch uses \u0027openstack bgp dragent list\u0027 to"},{"line_number":12,"context_line":"show the list of dragents, and the optional parameter \u0027bgp-speaker\u0027"},{"line_number":13,"context_line":"shows the list of dragents hosting a specific bgp speaker."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3fa7e38b_a735cea8","line":11,"range":{"start_line":11,"start_character":1,"end_line":11,"end_character":17},"in_reply_to":"3fa7e38b_11d747bf","updated":"2020-02-15 10:08:36.000000000","message":"Done","commit_id":"b612696b13e781337f39147673fef8f53d7c0250"}],"neutronclient/osc/v2/dynamic_routing/bgp_dragent.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9e8909ee73d46aba190c966ea0f251bc57fb23ce","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class ListDRAgentsHostingBgpSpeaker(command.Lister):"},{"line_number":73,"context_line":"    \"\"\"List dynamic routing agents hosting a BGP speaker\"\"\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    resource \u003d \u0027agent\u0027"},{"line_number":76,"context_line":"    list_columns \u003d [\u0027id\u0027, \u0027host\u0027, \u0027admin_state_up\u0027, \u0027alive\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_bac92b7b","line":73,"range":{"start_line":73,"start_character":4,"end_line":73,"end_character":59},"updated":"2020-01-15 05:19:12.000000000","message":"We would like to include the deprecation message in this docstring as it is rendered as the command reference [1].\n\nConsider\n\n  \"\"\"List dynamic routing agents hosting a BGP speaker (deprecated in favor of \"bgp dragent list\")\"\"\"\n\n[1] https://f6969bf09983e06b4c00-7fbadfa7985858ab78a3aa61deaba560.ssl.cf5.rackcdn.com/701125/3/check/openstack-tox-docs/a50f5f0/docs/cli/osc/v2/bgp-dynamic-routing.html#bgp-speaker-show-dragents","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"0946b203ffe9d162c43bb742d3437b40336ff1d7","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class ListDRAgentsHostingBgpSpeaker(command.Lister):"},{"line_number":73,"context_line":"    \"\"\"List dynamic routing agents hosting a BGP speaker\"\"\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    resource \u003d \u0027agent\u0027"},{"line_number":76,"context_line":"    list_columns \u003d [\u0027id\u0027, \u0027host\u0027, \u0027admin_state_up\u0027, \u0027alive\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_ddc7413d","line":73,"range":{"start_line":73,"start_character":4,"end_line":73,"end_character":59},"in_reply_to":"3fa7e38b_bac92b7b","updated":"2020-01-15 08:11:46.000000000","message":"Done","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9e8909ee73d46aba190c966ea0f251bc57fb23ce","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    s, columns, formatters\u003d_formatters,"},{"line_number":102,"context_line":"                ) for s in data[\u0027agents\u0027]))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class ListDRAgents(command.Lister):"},{"line_number":106,"context_line":"    \"\"\"List dynamic routing agents\"\"\""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_faab236e","line":104,"updated":"2020-01-15 05:19:12.000000000","message":"It seems you copied the implementation of ListDRAgentsHostingBgpSpeaker class. Could you avoid dupicated codes?\n\nThe difference looks like the warning log only.\nListDRAgentsHostingBgpSpeaker should inherit the new class here now.\n\n  class ListDRAgentsHostingBgpSpeaker(ListDRAgents):\n      def get_parser(self, prog_name):\n          self.log.warning(....)\n          super(...)","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0b1762d4d2635f59a0af803c136ac6f836047aa1","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    s, columns, formatters\u003d_formatters,"},{"line_number":102,"context_line":"                ) for s in data[\u0027agents\u0027]))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class ListDRAgents(command.Lister):"},{"line_number":106,"context_line":"    \"\"\"List dynamic routing agents\"\"\""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_d747ce79","line":104,"in_reply_to":"3fa7e38b_7d42cdae","updated":"2020-01-21 08:33:53.000000000","message":"Thanks for checking the detail. I am okay with the current proposed approach.","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"0946b203ffe9d162c43bb742d3437b40336ff1d7","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    s, columns, formatters\u003d_formatters,"},{"line_number":102,"context_line":"                ) for s in data[\u0027agents\u0027]))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class ListDRAgents(command.Lister):"},{"line_number":106,"context_line":"    \"\"\"List dynamic routing agents\"\"\""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_7d42cdae","line":104,"in_reply_to":"3fa7e38b_faab236e","updated":"2020-01-15 08:11:46.000000000","message":"In addition to the log warning, it also includes whether bgp_speaker is optional, and executes different methods depending on whether bgp_speaker is empty.\n\nI also think about distinguishing two CLIs by prog_name to reduce code duplication. The setup.cfg is as follows.\nbgp_dragent_list \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent: ListDRAgentsHostingBgpSpeaker\nbgp_speaker_show_dragents \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent: ListDRAgentsHostingBgpSpeaker\n\nIf you think this is more appropriate, I will modify it, but I think the deprecated interface will be removed.","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9e8909ee73d46aba190c966ea0f251bc57fb23ce","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                ) for s in data[\u0027agents\u0027]))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class ListDRAgents(command.Lister):"},{"line_number":106,"context_line":"    \"\"\"List dynamic routing agents\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    resource \u003d \u0027agent\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_bac5ab40","line":105,"range":{"start_line":105,"start_character":6,"end_line":105,"end_character":18},"updated":"2020-01-15 05:19:12.000000000","message":"In the convention in OSC and plugins, \"List\" + singular form is used like ListNetwork.\n\n ListDRAgent","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"0946b203ffe9d162c43bb742d3437b40336ff1d7","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                ) for s in data[\u0027agents\u0027]))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class ListDRAgents(command.Lister):"},{"line_number":106,"context_line":"    \"\"\"List dynamic routing agents\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    resource \u003d \u0027agent\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_7dd40deb","line":105,"range":{"start_line":105,"start_character":6,"end_line":105,"end_character":18},"in_reply_to":"3fa7e38b_bac5ab40","updated":"2020-01-15 08:11:46.000000000","message":"Done","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0b1762d4d2635f59a0af803c136ac6f836047aa1","unresolved":false,"context_lines":[{"line_number":72,"context_line":"class ListDRAgentsHostingBgpSpeaker(command.Lister):"},{"line_number":73,"context_line":"    \"\"\"List dynamic routing agents hosting a BGP speaker"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"       The \"bgp speaker show dragents\" is deprecated in"},{"line_number":76,"context_line":"       favor of \"bgp dragent list\""},{"line_number":77,"context_line":"    \"\"\""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    resource \u003d \u0027agent\u0027"},{"line_number":80,"context_line":"    list_columns \u003d [\u0027id\u0027, \u0027host\u0027, \u0027admin_state_up\u0027, \u0027alive\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_17eb26a5","line":77,"range":{"start_line":75,"start_character":7,"end_line":77,"end_character":7},"updated":"2020-01-21 08:33:53.000000000","message":"Looking at the rendered doc [1], \u0027The \"bgp speaker show dragents\" is\u0027 looks unnecessary.\n\n  Deprecated in favor of \"bgp dragent list\"\n\n[1] https://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_c2a/701125/5/check/openstack-tox-docs/c2ada58/docs/cli/osc/v2/bgp-dynamic-routing.html#bgp-speaker-show-dragents","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"44707e83bb7eca8eee4c199e4798e4a0186ef0e7","unresolved":false,"context_lines":[{"line_number":72,"context_line":"class ListDRAgentsHostingBgpSpeaker(command.Lister):"},{"line_number":73,"context_line":"    \"\"\"List dynamic routing agents hosting a BGP speaker"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"       The \"bgp speaker show dragents\" is deprecated in"},{"line_number":76,"context_line":"       favor of \"bgp dragent list\""},{"line_number":77,"context_line":"    \"\"\""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    resource \u003d \u0027agent\u0027"},{"line_number":80,"context_line":"    list_columns \u003d [\u0027id\u0027, \u0027host\u0027, \u0027admin_state_up\u0027, \u0027alive\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_c5fdf43c","line":77,"range":{"start_line":75,"start_character":7,"end_line":77,"end_character":7},"in_reply_to":"3fa7e38b_17eb26a5","updated":"2020-02-06 08:53:39.000000000","message":"Done","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4677263834a65df7d4c1d9e6ba97374336fb2e21","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def get_parser(self, prog_name):"},{"line_number":83,"context_line":"        self.log.warning(\"The \u0027openstack bgp speaker show dragents\u0027 CLI is \""},{"line_number":84,"context_line":"                         \"deprecated and will be removed in the future. Use \""},{"line_number":85,"context_line":"                         \"\u0027openstack bgp dragents list\u0027 CLI instead\")"},{"line_number":86,"context_line":"        parser \u003d super(ListDRAgentsHostingBgpSpeaker,"},{"line_number":87,"context_line":"                       self).get_parser(prog_name)"},{"line_number":88,"context_line":"        parser.add_argument(\u0027bgp_speaker\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_60902b42","line":85,"updated":"2020-02-14 11:07:37.000000000","message":"nitty nit: missing dot at the end","commit_id":"b612696b13e781337f39147673fef8f53d7c0250"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"908c1696a472bfa201d02af3d1a77000b8884214","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def get_parser(self, prog_name):"},{"line_number":83,"context_line":"        self.log.warning(\"The \u0027openstack bgp speaker show dragents\u0027 CLI is \""},{"line_number":84,"context_line":"                         \"deprecated and will be removed in the future. Use \""},{"line_number":85,"context_line":"                         \"\u0027openstack bgp dragents list\u0027 CLI instead\")"},{"line_number":86,"context_line":"        parser \u003d super(ListDRAgentsHostingBgpSpeaker,"},{"line_number":87,"context_line":"                       self).get_parser(prog_name)"},{"line_number":88,"context_line":"        parser.add_argument(\u0027bgp_speaker\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b15d137d","line":85,"range":{"start_line":85,"start_character":41,"end_line":85,"end_character":49},"updated":"2020-02-14 14:35:05.000000000","message":"s/dragent","commit_id":"b612696b13e781337f39147673fef8f53d7c0250"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"b6b44a763819cd0c868077a5ef47ec9b53402763","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def get_parser(self, prog_name):"},{"line_number":83,"context_line":"        self.log.warning(\"The \u0027openstack bgp speaker show dragents\u0027 CLI is \""},{"line_number":84,"context_line":"                         \"deprecated and will be removed in the future. Use \""},{"line_number":85,"context_line":"                         \"\u0027openstack bgp dragents list\u0027 CLI instead\")"},{"line_number":86,"context_line":"        parser \u003d super(ListDRAgentsHostingBgpSpeaker,"},{"line_number":87,"context_line":"                       self).get_parser(prog_name)"},{"line_number":88,"context_line":"        parser.add_argument(\u0027bgp_speaker\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_2741de08","line":85,"in_reply_to":"3fa7e38b_60902b42","updated":"2020-02-15 10:08:36.000000000","message":"Done","commit_id":"b612696b13e781337f39147673fef8f53d7c0250"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"b6b44a763819cd0c868077a5ef47ec9b53402763","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def get_parser(self, prog_name):"},{"line_number":83,"context_line":"        self.log.warning(\"The \u0027openstack bgp speaker show dragents\u0027 CLI is \""},{"line_number":84,"context_line":"                         \"deprecated and will be removed in the future. Use \""},{"line_number":85,"context_line":"                         \"\u0027openstack bgp dragents list\u0027 CLI instead\")"},{"line_number":86,"context_line":"        parser \u003d super(ListDRAgentsHostingBgpSpeaker,"},{"line_number":87,"context_line":"                       self).get_parser(prog_name)"},{"line_number":88,"context_line":"        parser.add_argument(\u0027bgp_speaker\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_47389a9c","line":85,"range":{"start_line":85,"start_character":41,"end_line":85,"end_character":49},"in_reply_to":"3fa7e38b_b15d137d","updated":"2020-02-15 10:08:36.000000000","message":"Done","commit_id":"b612696b13e781337f39147673fef8f53d7c0250"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bbaca6e1d254af9d0f5ce81668455ced32489fde","unresolved":false,"context_lines":[{"line_number":72,"context_line":"class ListDRAgentsHostingBgpSpeaker(command.Lister):"},{"line_number":73,"context_line":"    \"\"\"List dynamic routing agents hosting a BGP speaker"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"       Deprecated in favor of \"bgp dragent list\""},{"line_number":76,"context_line":"    \"\"\""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    resource \u003d \u0027agent\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_de6e8c95","line":75,"updated":"2020-02-17 08:35:05.000000000","message":"I see two things to be improved in the docstring.\n\n1) It looks better to have some deprecation message in the first line. When I ran \"openstack help\", I didn\u0027t see any deprecation warning is the output.\n\n $ openstack help | grep \u0027bgp speaker show dragents\u0027\n  bgp speaker show dragents  List dynamic routing agents hosting a BGP speaker (python-neutronclient)\n\n2) When I showed the detail help of this command, the command description is a bit odd.\n\n $ openstack bgp speaker show dragents --help\n ...\n\n List dynamic routing agents hosting a BGP speaker Deprecated in favor of \"bgp\n dragent list\"\n ...\n\nConsidering the above, my suggestion is:\n\n    \"\"\"(Deprecated) List dynamic routing agents hosting a BGP speaker\n \n    (Use \"bgp dragent list\" instead)\n    \"\"\"","commit_id":"16e4d7f235bed1867991aca18e52284a2942dfeb"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"28a4d186c26118631366bcfa6c90f5aa952fdd42","unresolved":false,"context_lines":[{"line_number":72,"context_line":"class ListDRAgentsHostingBgpSpeaker(command.Lister):"},{"line_number":73,"context_line":"    \"\"\"List dynamic routing agents hosting a BGP speaker"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"       Deprecated in favor of \"bgp dragent list\""},{"line_number":76,"context_line":"    \"\"\""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    resource \u003d \u0027agent\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_c44c7ecc","line":75,"in_reply_to":"3fa7e38b_de6e8c95","updated":"2020-02-17 10:43:10.000000000","message":"Done","commit_id":"16e4d7f235bed1867991aca18e52284a2942dfeb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"46c3acb81e5e4a9a886cafafd4c615dcf40234e8","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                       self).get_parser(prog_name)"},{"line_number":88,"context_line":"        parser.add_argument(\u0027bgp_speaker\u0027,"},{"line_number":89,"context_line":"                            metavar\u003d\u0027\u003cbgp-speaker\u003e\u0027,"},{"line_number":90,"context_line":"                            help\u003d_(\"ID or name of the BGP speaker\"))"},{"line_number":91,"context_line":"        return parser"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_1e0664cd","line":90,"range":{"start_line":90,"start_character":36,"end_line":90,"end_character":65},"updated":"2020-02-17 08:38:06.000000000","message":"The help text needs to describe what happens when it is specified. The current one is not easy to understand.\nCould you follow the help text in OSC network agent list?\n\nhttps://docs.openstack.org/python-openstackclient/latest/cli/command-objects/network-agent.html#network-agent-list","commit_id":"16e4d7f235bed1867991aca18e52284a2942dfeb"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"28a4d186c26118631366bcfa6c90f5aa952fdd42","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                       self).get_parser(prog_name)"},{"line_number":88,"context_line":"        parser.add_argument(\u0027bgp_speaker\u0027,"},{"line_number":89,"context_line":"                            metavar\u003d\u0027\u003cbgp-speaker\u003e\u0027,"},{"line_number":90,"context_line":"                            help\u003d_(\"ID or name of the BGP speaker\"))"},{"line_number":91,"context_line":"        return parser"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_44708e10","line":90,"range":{"start_line":90,"start_character":36,"end_line":90,"end_character":65},"in_reply_to":"3fa7e38b_1e0664cd","updated":"2020-02-17 10:43:10.000000000","message":"Done","commit_id":"16e4d7f235bed1867991aca18e52284a2942dfeb"}],"neutronclient/tests/unit/osc/v2/dynamic_routing/test_bgp_dragent.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9e8909ee73d46aba190c966ea0f251bc57fb23ce","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        super(TestAddBgpSpeakerToDRAgent, self).setUp()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.neutronclient.add_bgp_speaker_to_dragent \u003d mock.Mock("},{"line_number":29,"context_line":"            return_value\u003dNone"},{"line_number":30,"context_line":"        )"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        # Get the command object to test"},{"line_number":33,"context_line":"        self.cmd \u003d bgp_dragent.AddBgpSpeakerToDRAgent(self.app, self.namespace)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_9ac0ef4c","line":30,"range":{"start_line":28,"start_character":7,"end_line":30,"end_character":9},"updated":"2020-01-15 05:19:12.000000000","message":"Consider using mock.patch.object.\nThis is not a common way to mock a method.","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"0946b203ffe9d162c43bb742d3437b40336ff1d7","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        super(TestAddBgpSpeakerToDRAgent, self).setUp()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.neutronclient.add_bgp_speaker_to_dragent \u003d mock.Mock("},{"line_number":29,"context_line":"            return_value\u003dNone"},{"line_number":30,"context_line":"        )"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        # Get the command object to test"},{"line_number":33,"context_line":"        self.cmd \u003d bgp_dragent.AddBgpSpeakerToDRAgent(self.app, self.namespace)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_fdf9dd81","line":30,"range":{"start_line":28,"start_character":7,"end_line":30,"end_character":9},"in_reply_to":"3fa7e38b_9ac0ef4c","updated":"2020-01-15 08:11:46.000000000","message":"Done","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9e8909ee73d46aba190c966ea0f251bc57fb23ce","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    _bgp_speaker_id \u003d _bgp_speaker[\u0027id\u0027]"},{"line_number":92,"context_line":"    _bgp_dragents \u003d fakes.FakeDRAgent.create_dragents(attrs)"},{"line_number":93,"context_line":"    columns \u003d (\u0027ID\u0027, \u0027Host\u0027, \u0027State\u0027, \u0027Alive\u0027)"},{"line_number":94,"context_line":"    data \u003d []"},{"line_number":95,"context_line":"    for _bgp_dragent in _bgp_dragents[\u0027agents\u0027]:"},{"line_number":96,"context_line":"        data.append(("},{"line_number":97,"context_line":"            _bgp_dragent[\u0027id\u0027],"},{"line_number":98,"context_line":"            _bgp_dragent[\u0027host\u0027],"},{"line_number":99,"context_line":"            _bgp_dragent[\u0027admin_state_up\u0027],"},{"line_number":100,"context_line":"            \u0027:-)\u0027 if _bgp_dragent[\u0027alive\u0027] else \u0027XXX\u0027))"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def setUp(self):"},{"line_number":103,"context_line":"        super(TestListDRAgentsHostingBgpSpeaker, self).setUp()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_faa483ba","line":100,"range":{"start_line":94,"start_character":3,"end_line":100,"end_character":55},"updated":"2020-01-15 05:19:12.000000000","message":"Same comment as https://review.opendev.org/#/c/701171/3/neutronclient/tests/unit/osc/v2/dynamic_routing/test_bgp_dragent.py@100","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"0946b203ffe9d162c43bb742d3437b40336ff1d7","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    _bgp_speaker_id \u003d _bgp_speaker[\u0027id\u0027]"},{"line_number":92,"context_line":"    _bgp_dragents \u003d fakes.FakeDRAgent.create_dragents(attrs)"},{"line_number":93,"context_line":"    columns \u003d (\u0027ID\u0027, \u0027Host\u0027, \u0027State\u0027, \u0027Alive\u0027)"},{"line_number":94,"context_line":"    data \u003d []"},{"line_number":95,"context_line":"    for _bgp_dragent in _bgp_dragents[\u0027agents\u0027]:"},{"line_number":96,"context_line":"        data.append(("},{"line_number":97,"context_line":"            _bgp_dragent[\u0027id\u0027],"},{"line_number":98,"context_line":"            _bgp_dragent[\u0027host\u0027],"},{"line_number":99,"context_line":"            _bgp_dragent[\u0027admin_state_up\u0027],"},{"line_number":100,"context_line":"            \u0027:-)\u0027 if _bgp_dragent[\u0027alive\u0027] else \u0027XXX\u0027))"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def setUp(self):"},{"line_number":103,"context_line":"        super(TestListDRAgentsHostingBgpSpeaker, self).setUp()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_1dff1967","line":100,"range":{"start_line":94,"start_character":3,"end_line":100,"end_character":55},"in_reply_to":"3fa7e38b_faa483ba","updated":"2020-01-15 08:11:46.000000000","message":"Done","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0b1762d4d2635f59a0af803c136ac6f836047aa1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        super(TestAddBgpSpeakerToDRAgent, self).setUp()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        mock.patch.object(self.neutronclient,"},{"line_number":29,"context_line":"                          \"add_bgp_speaker_to_dragent\", return_value\u003dNone)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        # Get the command object to test"},{"line_number":32,"context_line":"        self.cmd \u003d bgp_dragent.AddBgpSpeakerToDRAgent(self.app, self.namespace)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_77205af9","line":29,"range":{"start_line":28,"start_character":8,"end_line":29,"end_character":74},"updated":"2020-01-21 08:33:53.000000000","message":"This is unnecessary as the method is mocked in each test like L.35.","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"44707e83bb7eca8eee4c199e4798e4a0186ef0e7","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        super(TestAddBgpSpeakerToDRAgent, self).setUp()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        mock.patch.object(self.neutronclient,"},{"line_number":29,"context_line":"                          \"add_bgp_speaker_to_dragent\", return_value\u003dNone)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        # Get the command object to test"},{"line_number":32,"context_line":"        self.cmd \u003d bgp_dragent.AddBgpSpeakerToDRAgent(self.app, self.namespace)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_e5f8304c","line":29,"range":{"start_line":28,"start_character":8,"end_line":29,"end_character":74},"in_reply_to":"3fa7e38b_77205af9","updated":"2020-02-06 08:53:39.000000000","message":"Done","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0b1762d4d2635f59a0af803c136ac6f836047aa1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.cmd \u003d bgp_dragent.AddBgpSpeakerToDRAgent(self.app, self.namespace)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_add_bgp_speaker_to_dragent(self):"},{"line_number":35,"context_line":"        with mock.patch.object(self.neutronclient,"},{"line_number":36,"context_line":"                               \"add_bgp_speaker_to_dragent\","},{"line_number":37,"context_line":"                               return_value\u003dNone):"},{"line_number":38,"context_line":"            arglist \u003d ["},{"line_number":39,"context_line":"                self._bgp_dragent_id,"},{"line_number":40,"context_line":"                self._bgp_speaker_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_176ec62c","line":37,"range":{"start_line":35,"start_character":8,"end_line":37,"end_character":50},"updated":"2020-01-21 08:33:53.000000000","message":"Could you apply the mock only to the lines which really needs mocking? Perhaps, L.48 is the only one which needs mocking.","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"44707e83bb7eca8eee4c199e4798e4a0186ef0e7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.cmd \u003d bgp_dragent.AddBgpSpeakerToDRAgent(self.app, self.namespace)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_add_bgp_speaker_to_dragent(self):"},{"line_number":35,"context_line":"        with mock.patch.object(self.neutronclient,"},{"line_number":36,"context_line":"                               \"add_bgp_speaker_to_dragent\","},{"line_number":37,"context_line":"                               return_value\u003dNone):"},{"line_number":38,"context_line":"            arglist \u003d ["},{"line_number":39,"context_line":"                self._bgp_dragent_id,"},{"line_number":40,"context_line":"                self._bgp_speaker_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_85f7fc5a","line":37,"range":{"start_line":35,"start_character":8,"end_line":37,"end_character":50},"in_reply_to":"3fa7e38b_176ec62c","updated":"2020-02-06 08:53:39.000000000","message":"Done","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"}],"releasenotes/notes/deprecate-bgp-speaker-show-dragents-2fcce99cf6bb5b60.yaml":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9e8909ee73d46aba190c966ea0f251bc57fb23ce","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The \u0027openstack bgp speaker show dragents\u0027 CLI is deprecated and"},{"line_number":5,"context_line":"    will be removed in the future. Use \u0027openstack bgp dragents list\u0027"},{"line_number":6,"context_line":"    \u0027--bgp-speaker \u003cbgp-speaker\u003e\u0027 CLI instead."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3fa7e38b_9aa30f9c","line":6,"updated":"2020-01-15 05:19:12.000000000","message":"Could you cover that \"openstack bgp dragent list\" is added too in the \"features\" section?","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"0946b203ffe9d162c43bb742d3437b40336ff1d7","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The \u0027openstack bgp speaker show dragents\u0027 CLI is deprecated and"},{"line_number":5,"context_line":"    will be removed in the future. Use \u0027openstack bgp dragents list\u0027"},{"line_number":6,"context_line":"    \u0027--bgp-speaker \u003cbgp-speaker\u003e\u0027 CLI instead."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3fa7e38b_3d00d569","line":6,"in_reply_to":"3fa7e38b_9aa30f9c","updated":"2020-01-15 08:11:46.000000000","message":"Done","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0b1762d4d2635f59a0af803c136ac6f836047aa1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"deprecations:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The \u0027openstack bgp speaker show dragents\u0027 CLI is deprecated and"},{"line_number":5,"context_line":"    will be removed in the future. Use \u0027openstack bgp dragent list\u0027"},{"line_number":6,"context_line":"    \u0027--bgp-speaker \u003cbgp-speaker\u003e\u0027 CLI instead."},{"line_number":7,"context_line":"features:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_f7be8a62","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":9},"updated":"2020-01-21 08:33:53.000000000","message":"Could you wrap the command line with double backquotes?\n\n  ``openstack bgp speaker show dragents``\n\nIt applies to all other command names.","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"44707e83bb7eca8eee4c199e4798e4a0186ef0e7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"deprecations:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The \u0027openstack bgp speaker show dragents\u0027 CLI is deprecated and"},{"line_number":5,"context_line":"    will be removed in the future. Use \u0027openstack bgp dragent list\u0027"},{"line_number":6,"context_line":"    \u0027--bgp-speaker \u003cbgp-speaker\u003e\u0027 CLI instead."},{"line_number":7,"context_line":"features:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_659200fe","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":9},"in_reply_to":"3fa7e38b_f7be8a62","updated":"2020-02-06 08:53:39.000000000","message":"Done","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0b1762d4d2635f59a0af803c136ac6f836047aa1","unresolved":false,"context_lines":[{"line_number":2,"context_line":"deprecations:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The \u0027openstack bgp speaker show dragents\u0027 CLI is deprecated and"},{"line_number":5,"context_line":"    will be removed in the future. Use \u0027openstack bgp dragent list\u0027"},{"line_number":6,"context_line":"    \u0027--bgp-speaker \u003cbgp-speaker\u003e\u0027 CLI instead."},{"line_number":7,"context_line":"features:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    The \u0027openstack bgp dragent list\u0027CLI is added to support showing"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_37a0a236","line":6,"range":{"start_line":5,"start_character":66,"end_line":6,"end_character":5},"updated":"2020-01-21 08:33:53.000000000","message":"These quotes are unnecessary.","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"44707e83bb7eca8eee4c199e4798e4a0186ef0e7","unresolved":false,"context_lines":[{"line_number":2,"context_line":"deprecations:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The \u0027openstack bgp speaker show dragents\u0027 CLI is deprecated and"},{"line_number":5,"context_line":"    will be removed in the future. Use \u0027openstack bgp dragent list\u0027"},{"line_number":6,"context_line":"    \u0027--bgp-speaker \u003cbgp-speaker\u003e\u0027 CLI instead."},{"line_number":7,"context_line":"features:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    The \u0027openstack bgp dragent list\u0027CLI is added to support showing"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_458fc4d2","line":6,"range":{"start_line":5,"start_character":66,"end_line":6,"end_character":5},"in_reply_to":"3fa7e38b_37a0a236","updated":"2020-02-06 08:53:39.000000000","message":"Done","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0b1762d4d2635f59a0af803c136ac6f836047aa1","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    \u0027--bgp-speaker \u003cbgp-speaker\u003e\u0027 CLI instead."},{"line_number":7,"context_line":"features:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    The \u0027openstack bgp dragent list\u0027CLI is added to support showing"},{"line_number":10,"context_line":"    the list of dynamic routing agents."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_57ad1e30","line":9,"range":{"start_line":9,"start_character":36,"end_line":9,"end_character":39},"updated":"2020-01-21 08:33:53.000000000","message":"A space is missing before \"CLI\".","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"44707e83bb7eca8eee4c199e4798e4a0186ef0e7","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    \u0027--bgp-speaker \u003cbgp-speaker\u003e\u0027 CLI instead."},{"line_number":7,"context_line":"features:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    The \u0027openstack bgp dragent list\u0027CLI is added to support showing"},{"line_number":10,"context_line":"    the list of dynamic routing agents."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_a5f23868","line":9,"range":{"start_line":9,"start_character":36,"end_line":9,"end_character":39},"in_reply_to":"3fa7e38b_57ad1e30","updated":"2020-02-06 08:53:39.000000000","message":"Done","commit_id":"5350913959d99c1d6c632a311ab9ebc3462146c0"}],"setup.cfg":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"61048a8703fa99c67d4e2716af83b4b691c51545","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    bgp_dragent_add_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:AddBgpSpeakerToDRAgent"},{"line_number":73,"context_line":"    bgp_dragent_remove_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:RemoveBgpSpeakerFromDRAgent"},{"line_number":74,"context_line":"    bgp_dragent_list_hosting_speakers \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:ListDRAgentsHostingBgpSpeaker"},{"line_number":75,"context_line":"    bgp_peer_create \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:CreateBgpPeer"},{"line_number":76,"context_line":"    bgp_peer_delete \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:DeleteBgpPeer"},{"line_number":77,"context_line":"    bgp_peer_list \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:ListBgpPeer"}],"source_content_type":"text/x-ttcn-cfg","patch_set":2,"id":"3fa7e38b_78ea620e","line":74,"updated":"2020-01-06 09:14:05.000000000","message":"Please keep this in alphabetic ordering.\n\nAlso, wouldn\u0027t you need to add some docs entry for this one?","commit_id":"8723120e88c1aaafb9dc5570d5230503ec2bb773"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"caeca4113c352fa9cc730fd706a35dc62360ae2e","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    bgp_dragent_add_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:AddBgpSpeakerToDRAgent"},{"line_number":73,"context_line":"    bgp_dragent_remove_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:RemoveBgpSpeakerFromDRAgent"},{"line_number":74,"context_line":"    bgp_dragent_list_hosting_speakers \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:ListDRAgentsHostingBgpSpeaker"},{"line_number":75,"context_line":"    bgp_peer_create \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:CreateBgpPeer"},{"line_number":76,"context_line":"    bgp_peer_delete \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:DeleteBgpPeer"},{"line_number":77,"context_line":"    bgp_peer_list \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:ListBgpPeer"}],"source_content_type":"text/x-ttcn-cfg","patch_set":2,"id":"3fa7e38b_e7ff8300","line":74,"in_reply_to":"3fa7e38b_78ea620e","updated":"2020-01-07 07:52:59.000000000","message":"Done","commit_id":"8723120e88c1aaafb9dc5570d5230503ec2bb773"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"99ef1b243a8fc03d4a307f3b00e57219716f0d4d","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    bgp_dragent_add_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:AddBgpSpeakerToDRAgent"},{"line_number":73,"context_line":"    bgp_dragent_remove_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:RemoveBgpSpeakerFromDRAgent"},{"line_number":74,"context_line":"    bgp_dragent_list_hosting_speakers \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:ListDRAgentsHostingBgpSpeaker"},{"line_number":75,"context_line":"    bgp_peer_create \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:CreateBgpPeer"},{"line_number":76,"context_line":"    bgp_peer_delete \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:DeleteBgpPeer"},{"line_number":77,"context_line":"    bgp_peer_list \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:ListBgpPeer"}],"source_content_type":"text/x-ttcn-cfg","patch_set":2,"id":"3fa7e38b_f8065221","line":74,"in_reply_to":"3fa7e38b_78ea620e","updated":"2020-01-06 10:20:49.000000000","message":"Totally agree. You can find an example to deprecate a command in the OSC repo (though OSC4 release might clean up most of them).","commit_id":"8723120e88c1aaafb9dc5570d5230503ec2bb773"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"caeca4113c352fa9cc730fd706a35dc62360ae2e","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    bgp_dragent_add_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:AddBgpSpeakerToDRAgent"},{"line_number":73,"context_line":"    bgp_dragent_remove_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:RemoveBgpSpeakerFromDRAgent"},{"line_number":74,"context_line":"    bgp_dragent_list_hosting_speakers \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:ListDRAgentsHostingBgpSpeaker"},{"line_number":75,"context_line":"    bgp_peer_create \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:CreateBgpPeer"},{"line_number":76,"context_line":"    bgp_peer_delete \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:DeleteBgpPeer"},{"line_number":77,"context_line":"    bgp_peer_list \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:ListBgpPeer"}],"source_content_type":"text/x-ttcn-cfg","patch_set":2,"id":"3fa7e38b_4707771e","line":74,"in_reply_to":"3fa7e38b_f8065221","updated":"2020-01-07 07:52:59.000000000","message":"Done","commit_id":"8723120e88c1aaafb9dc5570d5230503ec2bb773"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9e8909ee73d46aba190c966ea0f251bc57fb23ce","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    sfc_service_graph_show \u003d neutronclient.osc.v2.sfc.sfc_service_graph:ShowSfcServiceGraph"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    bgp_dragent_add_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:AddBgpSpeakerToDRAgent"},{"line_number":73,"context_line":"    bgp_dragent_list \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:ListDRAgents"},{"line_number":74,"context_line":"    bgp_dragent_remove_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:RemoveBgpSpeakerFromDRAgent"},{"line_number":75,"context_line":"    bgp_peer_create \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:CreateBgpPeer"},{"line_number":76,"context_line":"    bgp_peer_delete \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:DeleteBgpPeer"}],"source_content_type":"text/x-ttcn-cfg","patch_set":3,"id":"3fa7e38b_3ab21bea","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":15},"updated":"2020-01-15 05:19:12.000000000","message":"Use a singular form.\n\n bgp_dragent_list","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":29157,"name":"zhanghao","email":"hao.zhang.am.i@gmail.com","username":"zhanghao2"},"change_message_id":"0946b203ffe9d162c43bb742d3437b40336ff1d7","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    sfc_service_graph_show \u003d neutronclient.osc.v2.sfc.sfc_service_graph:ShowSfcServiceGraph"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    bgp_dragent_add_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:AddBgpSpeakerToDRAgent"},{"line_number":73,"context_line":"    bgp_dragent_list \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:ListDRAgents"},{"line_number":74,"context_line":"    bgp_dragent_remove_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:RemoveBgpSpeakerFromDRAgent"},{"line_number":75,"context_line":"    bgp_peer_create \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:CreateBgpPeer"},{"line_number":76,"context_line":"    bgp_peer_delete \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:DeleteBgpPeer"}],"source_content_type":"text/x-ttcn-cfg","patch_set":3,"id":"3fa7e38b_5d059178","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":15},"in_reply_to":"3fa7e38b_3ab21bea","updated":"2020-01-15 08:11:46.000000000","message":"Done","commit_id":"e7f1c08e30a9d697779b1c4e304b5b332281706a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"908c1696a472bfa201d02af3d1a77000b8884214","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    sfc_service_graph_show \u003d neutronclient.osc.v2.sfc.sfc_service_graph:ShowSfcServiceGraph"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    bgp_dragent_add_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:AddBgpSpeakerToDRAgent"},{"line_number":73,"context_line":"    bgp_dragent_list \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:ListDRAgent"},{"line_number":74,"context_line":"    bgp_dragent_remove_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:RemoveBgpSpeakerFromDRAgent"},{"line_number":75,"context_line":"    bgp_peer_create \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:CreateBgpPeer"},{"line_number":76,"context_line":"    bgp_peer_delete \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:DeleteBgpPeer"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"3fa7e38b_511e1fbc","line":73,"updated":"2020-02-14 14:35:05.000000000","message":"nit: seems a strange place to put this new entry, between add/remove, should just be at bottom","commit_id":"b612696b13e781337f39147673fef8f53d7c0250"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"2c526c69c9301ff3997dd0b0a33e612a0e223b61","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    sfc_service_graph_show \u003d neutronclient.osc.v2.sfc.sfc_service_graph:ShowSfcServiceGraph"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    bgp_dragent_add_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:AddBgpSpeakerToDRAgent"},{"line_number":73,"context_line":"    bgp_dragent_list \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:ListDRAgent"},{"line_number":74,"context_line":"    bgp_dragent_remove_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:RemoveBgpSpeakerFromDRAgent"},{"line_number":75,"context_line":"    bgp_peer_create \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:CreateBgpPeer"},{"line_number":76,"context_line":"    bgp_peer_delete \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:DeleteBgpPeer"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"3fa7e38b_8c1c8065","line":73,"in_reply_to":"3fa7e38b_511e1fbc","updated":"2020-02-14 14:53:00.000000000","message":"Isn\u0027t that just alphabetic ordering?","commit_id":"b612696b13e781337f39147673fef8f53d7c0250"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f931544749378bc66113de287d09b57450ad3a6a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    sfc_service_graph_show \u003d neutronclient.osc.v2.sfc.sfc_service_graph:ShowSfcServiceGraph"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    bgp_dragent_add_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:AddBgpSpeakerToDRAgent"},{"line_number":73,"context_line":"    bgp_dragent_list \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:ListDRAgent"},{"line_number":74,"context_line":"    bgp_dragent_remove_speaker \u003d neutronclient.osc.v2.dynamic_routing.bgp_dragent:RemoveBgpSpeakerFromDRAgent"},{"line_number":75,"context_line":"    bgp_peer_create \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:CreateBgpPeer"},{"line_number":76,"context_line":"    bgp_peer_delete \u003d neutronclient.osc.v2.dynamic_routing.bgp_peer:DeleteBgpPeer"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"3fa7e38b_8c5480c6","line":73,"in_reply_to":"3fa7e38b_8c1c8065","updated":"2020-02-14 15:05:11.000000000","message":"Ha, maybe you\u0027re right, but then L83-86 are grouped by command type, not alphabetical\n\nI really dropped the -1 because the help message listed the wrong command to run","commit_id":"b612696b13e781337f39147673fef8f53d7c0250"}]}
