)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"c14a17ea9e5bbda91ac0d7f68c90ed1db9f761e7","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2017-06-20 15:34:28 +0000"},{"line_number":4,"context_line":"Commit:     Daire Ní Chatháin \u003cdaire.ni.chathain@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-07-25 20:03:29 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Service Graphs networking-sfc resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ie54da56d2388cb375bccd883c111c5f87e293047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ff346bd7_7b3cbec7","line":6,"updated":"2017-07-26 09:05:58.000000000","message":"Hmm this patch needs a release note too..","commit_id":"b3183f0a772c4461d9246a67a7063f3d76049df6"},{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"05aa9d02b5dde601fb66cc19ed2a30356d2270c1","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Co-Authored-By: Igor Duarte Cardoso \u003cigor.duarte.cardoso@intel.com\u003e"},{"line_number":10,"context_line":"Partial-Bug: #1587486"},{"line_number":11,"context_line":"Depends-On: 424370"},{"line_number":12,"context_line":"Change-Id: Ie54da56d2388cb375bccd883c111c5f87e293047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"df3967d1_5c891cc8","line":11,"range":{"start_line":11,"start_character":12,"end_line":11,"end_character":18},"updated":"2017-08-01 12:57:47.000000000","message":"This should be the full ID (I372da15f99f3cbfb7ffd1d8bf87a79bc56180afe):\nhttps://docs.openstack.org/infra/manual/developers.html#cross-repository-dependencies","commit_id":"2d8805ed1f84bef49088dc14b939c1947b2e5e53"},{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"da346f20d3bf2956782739a1ade03bedd25cbbb7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     10d55c3a (Updated from global requirements)"},{"line_number":2,"context_line":"Author:     Daire Ní Chatháin \u003cdaire.ni.chathain@intel.com\u003e"},{"line_number":3,"context_line":"AuthorDate: 2017-06-20 15:34:28 +0000"},{"line_number":4,"context_line":"Commit:     Igor D.C \u003cigor.duarte.cardoso@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5f4e5783_f5f1c86c","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":20},"updated":"2017-10-13 13:25:47.000000000","message":"Probably want to hit rebase here to get working functional tests","commit_id":"c655a2c2376c5983e0f4ced34c17d18e17241e73"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"d5b562281b6d40e386b6771b8d9a571c945aa278","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     10d55c3a (Updated from global requirements)"},{"line_number":2,"context_line":"Author:     Daire Ní Chatháin \u003cdaire.ni.chathain@intel.com\u003e"},{"line_number":3,"context_line":"AuthorDate: 2017-06-20 15:34:28 +0000"},{"line_number":4,"context_line":"Commit:     Igor D.C \u003cigor.duarte.cardoso@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5f4e5783_7b2947e4","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":20},"in_reply_to":"5f4e5783_f5f1c86c","updated":"2017-10-13 14:17:55.000000000","message":"Done","commit_id":"c655a2c2376c5983e0f4ced34c17d18e17241e73"}],"doc/source/cli/osc/v2/networking-sfc.rst":[{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"da346f20d3bf2956782739a1ade03bedd25cbbb7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"5f4e5783_d82e0191","line":37,"updated":"2017-10-13 13:25:47.000000000","message":"Remember to add a doc entry for graphs","commit_id":"c655a2c2376c5983e0f4ced34c17d18e17241e73"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"d5b562281b6d40e386b6771b8d9a571c945aa278","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"5f4e5783_5bca0b4e","line":37,"in_reply_to":"5f4e5783_d82e0191","updated":"2017-10-13 14:17:55.000000000","message":"Done","commit_id":"c655a2c2376c5983e0f4ced34c17d18e17241e73"}],"neutronclient/osc/v2/sfc/sfc_service_graph.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3baeb41b4be6405fc1548fa9f9d6b21d6adf7a6b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        parser \u003d super(CreateSfcServiceGraph, self).get_parser(prog_name)"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027name\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027NAME\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\u0027Name of the Service Graph.\u0027))"},{"line_number":45,"context_line":"        parser.add_argument("},{"line_number":46,"context_line":"            \u0027--description\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_15a32602","line":43,"range":{"start_line":43,"start_character":21,"end_line":43,"end_character":25},"updated":"2017-08-03 06:20:17.000000000","message":"\u003cname\u003e","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        parser \u003d super(CreateSfcServiceGraph, self).get_parser(prog_name)"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027name\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027NAME\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\u0027Name of the Service Graph.\u0027))"},{"line_number":45,"context_line":"        parser.add_argument("},{"line_number":46,"context_line":"            \u0027--description\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_7316d84b","line":43,"range":{"start_line":43,"start_character":21,"end_line":43,"end_character":25},"in_reply_to":"df3967d1_15a32602","updated":"2017-08-04 15:02:06.000000000","message":"Done","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3baeb41b4be6405fc1548fa9f9d6b21d6adf7a6b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            \u0027--description\u0027,"},{"line_number":47,"context_line":"            help\u003d_(\u0027Description for the Service Graph.\u0027))"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--port-chains\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027SRC_CHAIN_1:DST_CHAIN_1,DST_CHAIN_2,DST_CHAIN_N;\u0027"},{"line_number":51,"context_line":"            \u0027SRC_CHAIN_2:DST_CHAIN_1,DST_CHAIN_2,DST_CHAIN_N;\u0027,"},{"line_number":52,"context_line":"            dest\u003d\u0027port_chains\u0027,"},{"line_number":53,"context_line":"            default\u003d{}, required\u003dTrue,"},{"line_number":54,"context_line":"            help\u003d_(\u0027Port Chain branching point: the key is the source chain\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_953396f6","line":51,"range":{"start_line":49,"start_character":11,"end_line":51,"end_character":63},"updated":"2017-08-03 06:20:17.000000000","message":"Could you first clarify the structure of the value?\nWhat do a colon, a comma and a semi-colon mean? What are the precedence during parsing?\n\nDepending on your reply, I would like to suggest the argument structure following the OSC convention.\n\nThere seems there are two chains:\n\n  \u003csrc-chain-1\u003e:(dst-chain-1|dst-chain-2|...|dst-chain-N)\n  \u003csrc-chain-2\u003e:(dst-chain-1|dst-chain-2|...|dst-chain-N)\n\nIf correct, I would suggest at least:\n\n  --port-chain \u003csrc-chain-1\u003e:(dst-chain-1|dst-chain-2|...|dst-chain-N)\n  --port-chain \u003csrc-chain-2\u003e:(dst-chain-1|dst-chain-2|...|dst-chain-N)","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            \u0027--description\u0027,"},{"line_number":47,"context_line":"            help\u003d_(\u0027Description for the Service Graph.\u0027))"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--port-chains\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027SRC_CHAIN_1:DST_CHAIN_1,DST_CHAIN_2,DST_CHAIN_N;\u0027"},{"line_number":51,"context_line":"            \u0027SRC_CHAIN_2:DST_CHAIN_1,DST_CHAIN_2,DST_CHAIN_N;\u0027,"},{"line_number":52,"context_line":"            dest\u003d\u0027port_chains\u0027,"},{"line_number":53,"context_line":"            default\u003d{}, required\u003dTrue,"},{"line_number":54,"context_line":"            help\u003d_(\u0027Port Chain branching point: the key is the source chain\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_d3158441","line":51,"range":{"start_line":49,"start_character":11,"end_line":51,"end_character":63},"in_reply_to":"df3967d1_953396f6","updated":"2017-08-04 15:02:06.000000000","message":"In terms of the structure of the values, the colon separates a source chain from the respective destination chains. Together they are a branching point.\nin other words, each of your --port-chain would be a branching point. \n\nWith the current command structure, the service graph values are parsed from one single argument (--port-chains), not separate ones as you you have shown above. \n\nIs there a parsedargs Action that is able to achieve what you have suggested? I know that there isn\u0027t if everything is inside a single --port-chains.","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"d93acb77ba8c6392a2ac1ca17d41a4aaf6ee3478","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            dest\u003d\u0027port_chains\u0027,"},{"line_number":53,"context_line":"            default\u003d{}, required\u003dTrue,"},{"line_number":54,"context_line":"            help\u003d_(\u0027Port Chain branching point: the key is the source chain\u0027"},{"line_number":55,"context_line":"                   \u0027while the value is a list of destination chains.\u0027"},{"line_number":56,"context_line":"                   \u0027This option can be repeated.\u0027))"},{"line_number":57,"context_line":"        return parser"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_4b66eb2b","line":55,"updated":"2017-08-01 16:16:49.000000000","message":"missing whitespace (when joining the strings)","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            dest\u003d\u0027port_chains\u0027,"},{"line_number":53,"context_line":"            default\u003d{}, required\u003dTrue,"},{"line_number":54,"context_line":"            help\u003d_(\u0027Port Chain branching point: the key is the source chain\u0027"},{"line_number":55,"context_line":"                   \u0027while the value is a list of destination chains.\u0027"},{"line_number":56,"context_line":"                   \u0027This option can be repeated.\u0027))"},{"line_number":57,"context_line":"        return parser"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_b310c04f","line":55,"in_reply_to":"df3967d1_4b66eb2b","updated":"2017-08-04 15:02:06.000000000","message":"Done","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3baeb41b4be6405fc1548fa9f9d6b21d6adf7a6b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        parser \u003d super(DeleteSfcServiceGraph, self).get_parser(prog_name)"},{"line_number":114,"context_line":"        parser.add_argument("},{"line_number":115,"context_line":"            \u0027service_graph\u0027,"},{"line_number":116,"context_line":"            metavar\u003d\"SERVICE_GRAPH\","},{"line_number":117,"context_line":"            help\u003d_(\"ID or name of the Service Graph to delete.\")"},{"line_number":118,"context_line":"        )"},{"line_number":119,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_75b3924e","line":116,"range":{"start_line":116,"start_character":21,"end_line":116,"end_character":34},"updated":"2017-08-03 06:20:17.000000000","message":"\u003cservice-graph\u003e","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        parser \u003d super(DeleteSfcServiceGraph, self).get_parser(prog_name)"},{"line_number":114,"context_line":"        parser.add_argument("},{"line_number":115,"context_line":"            \u0027service_graph\u0027,"},{"line_number":116,"context_line":"            metavar\u003d\"SERVICE_GRAPH\","},{"line_number":117,"context_line":"            help\u003d_(\"ID or name of the Service Graph to delete.\")"},{"line_number":118,"context_line":"        )"},{"line_number":119,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_f323e8a5","line":116,"range":{"start_line":116,"start_character":21,"end_line":116,"end_character":34},"in_reply_to":"df3967d1_75b3924e","updated":"2017-08-04 15:02:06.000000000","message":"Done","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3baeb41b4be6405fc1548fa9f9d6b21d6adf7a6b","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        parser \u003d super(ShowSfcServiceGraph, self).get_parser(prog_name)"},{"line_number":155,"context_line":"        parser.add_argument("},{"line_number":156,"context_line":"            \u0027service_graph\u0027,"},{"line_number":157,"context_line":"            metavar\u003d\"SERVICE_GRAPH\","},{"line_number":158,"context_line":"            help\u003d_(\"ID or name of the Service Graph to display.\")"},{"line_number":159,"context_line":"        )"},{"line_number":160,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_358bca6e","line":157,"range":{"start_line":157,"start_character":21,"end_line":157,"end_character":34},"updated":"2017-08-03 06:20:17.000000000","message":"ditto","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        parser \u003d super(ShowSfcServiceGraph, self).get_parser(prog_name)"},{"line_number":155,"context_line":"        parser.add_argument("},{"line_number":156,"context_line":"            \u0027service_graph\u0027,"},{"line_number":157,"context_line":"            metavar\u003d\"SERVICE_GRAPH\","},{"line_number":158,"context_line":"            help\u003d_(\"ID or name of the Service Graph to display.\")"},{"line_number":159,"context_line":"        )"},{"line_number":160,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_d33ea4bf","line":157,"range":{"start_line":157,"start_character":21,"end_line":157,"end_character":34},"in_reply_to":"df3967d1_358bca6e","updated":"2017-08-04 15:02:06.000000000","message":"Done","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3baeb41b4be6405fc1548fa9f9d6b21d6adf7a6b","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        attrs[\u0027port_chains\u0027] \u003d {}"},{"line_number":181,"context_line":"        src_chain \u003d None"},{"line_number":182,"context_line":"        for c in semicolon_split:"},{"line_number":183,"context_line":"            if \u0027:\u0027 not in c:"},{"line_number":184,"context_line":"                raise exceptions.CommandError("},{"line_number":185,"context_line":"                    \"Error: You must specify at\""},{"line_number":186,"context_line":"                    \"least one destination chain for each source chain.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_157c4670","line":183,"updated":"2017-08-03 06:20:17.000000000","message":"Parsing value should be argparse Action. At least it should be a separate function. The logic level is too deep.","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        attrs[\u0027port_chains\u0027] \u003d {}"},{"line_number":181,"context_line":"        src_chain \u003d None"},{"line_number":182,"context_line":"        for c in semicolon_split:"},{"line_number":183,"context_line":"            if \u0027:\u0027 not in c:"},{"line_number":184,"context_line":"                raise exceptions.CommandError("},{"line_number":185,"context_line":"                    \"Error: You must specify at\""},{"line_number":186,"context_line":"                    \"least one destination chain for each source chain.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_13f2ec06","line":183,"in_reply_to":"df3967d1_157c4670","updated":"2017-08-04 15:02:06.000000000","message":"That makes sense, also see my previous reply.","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"d93acb77ba8c6392a2ac1ca17d41a4aaf6ee3478","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            if \u0027:\u0027 not in c:"},{"line_number":184,"context_line":"                raise exceptions.CommandError("},{"line_number":185,"context_line":"                    \"Error: You must specify at\""},{"line_number":186,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":187,"context_line":"            else:"},{"line_number":188,"context_line":"                colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":189,"context_line":"                if len(colon_split) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_66ffa601","line":186,"updated":"2017-08-01 16:16:49.000000000","message":"ditto","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            if \u0027:\u0027 not in c:"},{"line_number":184,"context_line":"                raise exceptions.CommandError("},{"line_number":185,"context_line":"                    \"Error: You must specify at\""},{"line_number":186,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":187,"context_line":"            else:"},{"line_number":188,"context_line":"                colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":189,"context_line":"                if len(colon_split) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_b339e0d7","line":186,"in_reply_to":"df3967d1_66ffa601","updated":"2017-08-04 15:02:06.000000000","message":"Done","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3baeb41b4be6405fc1548fa9f9d6b21d6adf7a6b","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                \"Error: Duplicate\""},{"line_number":209,"context_line":"                                \" destination chains from \""},{"line_number":210,"context_line":"                                \"source chain {}\".format(src_chain))"},{"line_number":211,"context_line":"    if is_create is True:"},{"line_number":212,"context_line":"        _get_attrs(attrs, parsed_args)"},{"line_number":213,"context_line":"    return attrs"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_b5969a92","line":211,"range":{"start_line":211,"start_character":4,"end_line":211,"end_character":24},"updated":"2017-08-03 06:20:17.000000000","message":"if is_create:","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                \"Error: Duplicate\""},{"line_number":209,"context_line":"                                \" destination chains from \""},{"line_number":210,"context_line":"                                \"source chain {}\".format(src_chain))"},{"line_number":211,"context_line":"    if is_create is True:"},{"line_number":212,"context_line":"        _get_attrs(attrs, parsed_args)"},{"line_number":213,"context_line":"    return attrs"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_732ff887","line":211,"range":{"start_line":211,"start_character":4,"end_line":211,"end_character":24},"in_reply_to":"df3967d1_b5969a92","updated":"2017-08-04 15:02:06.000000000","message":"Done","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"17dfabf2350b6c2b1b7a90f42c4203e4060173e6","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            default\u003d{}, required\u003dTrue,"},{"line_number":54,"context_line":"            help\u003d_(\u0027Port Chain branching point: the key is the source chain\u0027"},{"line_number":55,"context_line":"                   \u0027 while the value is a list of destination chains.\u0027"},{"line_number":56,"context_line":"                   \u0027 This option can be repeated.\u0027))"},{"line_number":57,"context_line":"        return parser"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f515b1d_b8c3daec","line":56,"range":{"start_line":56,"start_character":19,"end_line":56,"end_character":52},"updated":"2017-10-02 15:56:19.000000000","message":"This option wasn\u0027t supposed to be repeated.","commit_id":"df3426b446e632b5ff7e49f40a9c4908d557ea7f"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"14fae5f5d32a2404fc371be91af825e51e681056","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            help\u003d_(\u0027Description for the Service Graph.\u0027))"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--branching-point\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027SRC_CHAIN:DST_CHAIN_1,DST_CHAIN_2,DST_CHAIN_N;\u0027,"},{"line_number":51,"context_line":"            dest\u003d\u0027branching_points\u0027,"},{"line_number":52,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":53,"context_line":"            default\u003d[], required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f4e5783_16473c20","line":50,"range":{"start_line":50,"start_character":66,"end_line":50,"end_character":67},"updated":"2017-10-10 12:18:51.000000000","message":"remove","commit_id":"bf1c95d6b1476e776ff66b9dcdd5d580db538617"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"230932b4a22383fe0a844dac17b82148824ab00e","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        attrs[\u0027name\u0027] \u003d str(parsed_args.name)"},{"line_number":175,"context_line":"    if parsed_args.description is not None:"},{"line_number":176,"context_line":"        attrs[\u0027description\u0027] \u003d str(parsed_args.description)"},{"line_number":177,"context_line":"    if (\u0027branching_points\u0027 in parsed_args and"},{"line_number":178,"context_line":"            parsed_args.branching_points is not None):"},{"line_number":179,"context_line":"        attrs[\u0027port_chains\u0027] \u003d {}"},{"line_number":180,"context_line":"        src_chain \u003d None"},{"line_number":181,"context_line":"        for c in parsed_args.branching_points:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_968028c1","line":178,"range":{"start_line":177,"start_character":4,"end_line":178,"end_character":54},"updated":"2017-10-16 15:25:59.000000000","message":"--branching-point option is defined only for create, isn\u0027t it better to move the option parsing (L.179-209) to _get_attr()?\n\nNote that the default value of parsed_args.branching_points is [], so it is never None so I think \"if parsed_args.branching_points\" is enough.","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"b00f657c22b55cd64a1afca46309626d7a132aff","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        attrs[\u0027name\u0027] \u003d str(parsed_args.name)"},{"line_number":175,"context_line":"    if parsed_args.description is not None:"},{"line_number":176,"context_line":"        attrs[\u0027description\u0027] \u003d str(parsed_args.description)"},{"line_number":177,"context_line":"    if (\u0027branching_points\u0027 in parsed_args and"},{"line_number":178,"context_line":"            parsed_args.branching_points is not None):"},{"line_number":179,"context_line":"        attrs[\u0027port_chains\u0027] \u003d {}"},{"line_number":180,"context_line":"        src_chain \u003d None"},{"line_number":181,"context_line":"        for c in parsed_args.branching_points:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_85d20c27","line":178,"range":{"start_line":177,"start_character":4,"end_line":178,"end_character":54},"in_reply_to":"5f4e5783_968028c1","updated":"2017-10-17 16:05:18.000000000","message":"Done","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"230932b4a22383fe0a844dac17b82148824ab00e","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                raise exceptions.CommandError("},{"line_number":184,"context_line":"                    \"Error: You must specify at \""},{"line_number":185,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":186,"context_line":"            else:"},{"line_number":187,"context_line":"                colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":188,"context_line":"                if len(colon_split) \u003e 1:"},{"line_number":189,"context_line":"                    src_chain \u003d colon_split.pop(0)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_164d58c3","line":186,"range":{"start_line":186,"start_character":12,"end_line":186,"end_character":17},"updated":"2017-10-16 15:25:59.000000000","message":"\u0027else\u0027 is actually unnecessary. If so, we can reduce the nest level below.","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"b00f657c22b55cd64a1afca46309626d7a132aff","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                raise exceptions.CommandError("},{"line_number":184,"context_line":"                    \"Error: You must specify at \""},{"line_number":185,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":186,"context_line":"            else:"},{"line_number":187,"context_line":"                colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":188,"context_line":"                if len(colon_split) \u003e 1:"},{"line_number":189,"context_line":"                    src_chain \u003d colon_split.pop(0)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_252fd888","line":186,"range":{"start_line":186,"start_character":12,"end_line":186,"end_character":17},"in_reply_to":"5f4e5783_164d58c3","updated":"2017-10-17 16:05:18.000000000","message":"Done","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"230932b4a22383fe0a844dac17b82148824ab00e","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":186,"context_line":"            else:"},{"line_number":187,"context_line":"                colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":188,"context_line":"                if len(colon_split) \u003e 1:"},{"line_number":189,"context_line":"                    src_chain \u003d colon_split.pop(0)"},{"line_number":190,"context_line":"                    sc_ \u003d (_get_id("},{"line_number":191,"context_line":"                        client_manager.neutronclient,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_36d974f2","line":188,"range":{"start_line":188,"start_character":16,"end_line":188,"end_character":40},"updated":"2017-10-16 15:25:59.000000000","message":"To reduce the nest level, my preference is:\n\n  if len(colon_split) \u003c\u003d 1:\n      continue\n  src_chain \u003d colon_split.pop(0)\n  ...\n\nOne question: we now just ignore a case where only a src chain is specified. Which do you think is better just to ignore or to raise a command error?","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"7ea1b9368514d8f1f11e2750736b5e1549eb7808","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":186,"context_line":"            else:"},{"line_number":187,"context_line":"                colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":188,"context_line":"                if len(colon_split) \u003e 1:"},{"line_number":189,"context_line":"                    src_chain \u003d colon_split.pop(0)"},{"line_number":190,"context_line":"                    sc_ \u003d (_get_id("},{"line_number":191,"context_line":"                        client_manager.neutronclient,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_7cceabb4","line":188,"range":{"start_line":188,"start_character":16,"end_line":188,"end_character":40},"in_reply_to":"5f4e5783_36d974f2","updated":"2017-10-16 16:03:37.000000000","message":"CLI-wise, I\u0027d say A branch option with only src chain should be treated as an incorrect option","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"b00f657c22b55cd64a1afca46309626d7a132aff","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":186,"context_line":"            else:"},{"line_number":187,"context_line":"                colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":188,"context_line":"                if len(colon_split) \u003e 1:"},{"line_number":189,"context_line":"                    src_chain \u003d colon_split.pop(0)"},{"line_number":190,"context_line":"                    sc_ \u003d (_get_id("},{"line_number":191,"context_line":"                        client_manager.neutronclient,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_e552e012","line":188,"range":{"start_line":188,"start_character":16,"end_line":188,"end_character":40},"in_reply_to":"5f4e5783_36d974f2","updated":"2017-10-17 16:05:18.000000000","message":"Done","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"b00f657c22b55cd64a1afca46309626d7a132aff","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":186,"context_line":"            else:"},{"line_number":187,"context_line":"                colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":188,"context_line":"                if len(colon_split) \u003e 1:"},{"line_number":189,"context_line":"                    src_chain \u003d colon_split.pop(0)"},{"line_number":190,"context_line":"                    sc_ \u003d (_get_id("},{"line_number":191,"context_line":"                        client_manager.neutronclient,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_453414de","line":188,"range":{"start_line":188,"start_character":16,"end_line":188,"end_character":40},"in_reply_to":"5f4e5783_7cceabb4","updated":"2017-10-17 16:05:18.000000000","message":"Yes, destination is required.","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"230932b4a22383fe0a844dac17b82148824ab00e","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":188,"context_line":"                if len(colon_split) \u003e 1:"},{"line_number":189,"context_line":"                    src_chain \u003d colon_split.pop(0)"},{"line_number":190,"context_line":"                    sc_ \u003d (_get_id("},{"line_number":191,"context_line":"                        client_manager.neutronclient,"},{"line_number":192,"context_line":"                        src_chain, \u0027port_chain\u0027))"},{"line_number":193,"context_line":"                    for i in colon_split:"},{"line_number":194,"context_line":"                        comma_split \u003d i.split(\u0027,\u0027)"},{"line_number":195,"context_line":"                        unique \u003d set(comma_split)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_969ca80e","line":192,"range":{"start_line":190,"start_character":20,"end_line":192,"end_character":49},"updated":"2017-10-16 15:25:59.000000000","message":"The outermost parentheses is unnecessary.\n\n sc_ \u003d _get_id(client_manager.neutronclient, src_chain, \u0027port_chain\u0027)\n\nIf the nest level is reduced based on my comment above, this might fit in one line.","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"b00f657c22b55cd64a1afca46309626d7a132aff","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":188,"context_line":"                if len(colon_split) \u003e 1:"},{"line_number":189,"context_line":"                    src_chain \u003d colon_split.pop(0)"},{"line_number":190,"context_line":"                    sc_ \u003d (_get_id("},{"line_number":191,"context_line":"                        client_manager.neutronclient,"},{"line_number":192,"context_line":"                        src_chain, \u0027port_chain\u0027))"},{"line_number":193,"context_line":"                    for i in colon_split:"},{"line_number":194,"context_line":"                        comma_split \u003d i.split(\u0027,\u0027)"},{"line_number":195,"context_line":"                        unique \u003d set(comma_split)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_c5db644c","line":192,"range":{"start_line":190,"start_character":20,"end_line":192,"end_character":49},"in_reply_to":"5f4e5783_969ca80e","updated":"2017-10-17 16:05:18.000000000","message":"Done","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"230932b4a22383fe0a844dac17b82148824ab00e","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                \"destination chains from \""},{"line_number":209,"context_line":"                                \"source chain {}\".format(src_chain))"},{"line_number":210,"context_line":"    if is_create:"},{"line_number":211,"context_line":"        _get_attrs(attrs, parsed_args)"},{"line_number":212,"context_line":"    return attrs"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_d6634041","line":211,"range":{"start_line":211,"start_character":8,"end_line":211,"end_character":18},"updated":"2017-10-16 15:25:59.000000000","message":"I think \u0027_get_attrs_for_create\u0027 or something is a better name.","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"b00f657c22b55cd64a1afca46309626d7a132aff","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                \"destination chains from \""},{"line_number":209,"context_line":"                                \"source chain {}\".format(src_chain))"},{"line_number":210,"context_line":"    if is_create:"},{"line_number":211,"context_line":"        _get_attrs(attrs, parsed_args)"},{"line_number":212,"context_line":"    return attrs"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_a5de283b","line":211,"range":{"start_line":211,"start_character":8,"end_line":211,"end_character":18},"in_reply_to":"5f4e5783_d6634041","updated":"2017-10-17 16:05:18.000000000","message":"Done","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"b00f657c22b55cd64a1afca46309626d7a132aff","unresolved":false,"context_lines":[{"line_number":256,"context_line":""},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"def _get_attrs(attrs, parsed_args):"},{"line_number":259,"context_line":"    if \u0027chain_parameters\u0027 in parsed_args:"},{"line_number":260,"context_line":"        attrs[\u0027chain_parameters\u0027] \u003d parsed_args.chain_parameters"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_5acd1383","line":259,"range":{"start_line":259,"start_character":8,"end_line":259,"end_character":24},"updated":"2017-10-17 16:05:18.000000000","message":"remove\nDONE","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b77843a6015ce524f942f09c267f514c6cac5b35","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class CreateSfcServiceGraph(command.ShowOne):"},{"line_number":38,"context_line":"    \"\"\"Create a Service Graph.\"\"\""},{"line_number":39,"context_line":"    def get_parser(self, prog_name):"},{"line_number":40,"context_line":"        parser \u003d super(CreateSfcServiceGraph, self).get_parser(prog_name)"},{"line_number":41,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_0e2e45fa","line":38,"range":{"start_line":38,"start_character":16,"end_line":38,"end_character":29},"updated":"2017-10-26 04:37:17.000000000","message":"no need for capitalization.\nThis applies to all similar ones.\n\nbut... SFC team seems to prefer to capitalization for all SFC resources (like Port Chain, Port Pair, Port Pair Group, Service Graph, Flow Classifier). I am okay if you are confident all usages in this repo are consistent. Otherwise, all should be lower-case unless there is a specific reason.","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"2da08e364ace80eea6eba1822d857533b418a2e7","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class CreateSfcServiceGraph(command.ShowOne):"},{"line_number":38,"context_line":"    \"\"\"Create a Service Graph.\"\"\""},{"line_number":39,"context_line":"    def get_parser(self, prog_name):"},{"line_number":40,"context_line":"        parser \u003d super(CreateSfcServiceGraph, self).get_parser(prog_name)"},{"line_number":41,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_c8b01de0","line":38,"range":{"start_line":38,"start_character":16,"end_line":38,"end_character":29},"in_reply_to":"3f4b6375_0e2e45fa","updated":"2017-10-26 08:49:41.000000000","message":"In networking-sfc repo capitalization is the \"trend\", though looking through current neutronclient code for SFC, it is lower-case. So probably add graphs lower-case too then","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"7e785f63d38a99771c432392007c84303ab40293","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class CreateSfcServiceGraph(command.ShowOne):"},{"line_number":38,"context_line":"    \"\"\"Create a Service Graph.\"\"\""},{"line_number":39,"context_line":"    def get_parser(self, prog_name):"},{"line_number":40,"context_line":"        parser \u003d super(CreateSfcServiceGraph, self).get_parser(prog_name)"},{"line_number":41,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_c9ac9ca0","line":38,"range":{"start_line":38,"start_character":16,"end_line":38,"end_character":29},"in_reply_to":"3f4b6375_75345dde","updated":"2017-10-26 12:24:25.000000000","message":"There\u0027s no actual convention to capitalize in networking-sfc so OSC wins, I\u0027ll change all of the occurrences to be consistent with OSC.","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"da9ef4111f6ed12a8c04be6bfe937f005128aef8","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class CreateSfcServiceGraph(command.ShowOne):"},{"line_number":38,"context_line":"    \"\"\"Create a Service Graph.\"\"\""},{"line_number":39,"context_line":"    def get_parser(self, prog_name):"},{"line_number":40,"context_line":"        parser \u003d super(CreateSfcServiceGraph, self).get_parser(prog_name)"},{"line_number":41,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_75345dde","line":38,"range":{"start_line":38,"start_character":16,"end_line":38,"end_character":29},"in_reply_to":"3f4b6375_c8b01de0","updated":"2017-10-26 09:40:37.000000000","message":"In the convention in OSC and/or neutronclient, we don\u0027t use capitalization in the help message in general.\n\nOn the other hand, I am honestly tired to point out capitalization from SFC patches, so if you keep some consistency I am okay with capitalization (though it brings inconsistency in neutronclient OSC plugin and OSC network commands).","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b77843a6015ce524f942f09c267f514c6cac5b35","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027name\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cname\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\u0027Name of the Service Graph.\u0027))"},{"line_number":45,"context_line":"        parser.add_argument("},{"line_number":46,"context_line":"            \u0027--description\u0027,"},{"line_number":47,"context_line":"            help\u003d_(\u0027Description for the Service Graph.\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_ce338d61","line":44,"range":{"start_line":44,"start_character":32,"end_line":44,"end_character":45},"updated":"2017-10-26 04:37:17.000000000","message":"ditto","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b77843a6015ce524f942f09c267f514c6cac5b35","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class SetSfcServiceGraph(command.Command):"},{"line_number":75,"context_line":"    _description \u003d _(\"Set service graph properties\")"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def get_parser(self, prog_name):"},{"line_number":78,"context_line":"        parser \u003d super(SetSfcServiceGraph, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_ee19a9d6","line":75,"range":{"start_line":75,"start_character":26,"end_line":75,"end_character":39},"updated":"2017-10-26 04:37:17.000000000","message":"Inconsistency in capitalization","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b77843a6015ce524f942f09c267f514c6cac5b35","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    for e in comma_split:"},{"line_number":192,"context_line":"        if e !\u003d \"\":"},{"line_number":193,"context_line":"            dc_ \u003d (_get_id(client_manager.neutronclient,"},{"line_number":194,"context_line":"                   e, \u0027port_chain\u0027))"},{"line_number":195,"context_line":"            (attrs[\u0027port_chains\u0027][sc_].append(dc_))"},{"line_number":196,"context_line":"            if _check_cycle(attrs[\u0027port_chains\u0027], sc_, dc_):"},{"line_number":197,"context_line":"                raise(exceptions.CommandError("}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_6e25b908","line":194,"range":{"start_line":194,"start_character":19,"end_line":194,"end_character":35},"updated":"2017-10-26 04:37:17.000000000","message":"Looks incorrect indent level. They are parameters for _get_id.\nIt seems this fits into one line.","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"7e785f63d38a99771c432392007c84303ab40293","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    for e in comma_split:"},{"line_number":192,"context_line":"        if e !\u003d \"\":"},{"line_number":193,"context_line":"            dc_ \u003d (_get_id(client_manager.neutronclient,"},{"line_number":194,"context_line":"                   e, \u0027port_chain\u0027))"},{"line_number":195,"context_line":"            (attrs[\u0027port_chains\u0027][sc_].append(dc_))"},{"line_number":196,"context_line":"            if _check_cycle(attrs[\u0027port_chains\u0027], sc_, dc_):"},{"line_number":197,"context_line":"                raise(exceptions.CommandError("}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_e9975839","line":194,"range":{"start_line":194,"start_character":19,"end_line":194,"end_character":35},"in_reply_to":"3f4b6375_6e25b908","updated":"2017-10-26 12:24:25.000000000","message":"Will correct.","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b77843a6015ce524f942f09c267f514c6cac5b35","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                    \"Error: You must specify at \""},{"line_number":233,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":234,"context_line":"            colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":235,"context_line":"            if len(colon_split) \u003c\u003d 1:"},{"line_number":236,"context_line":"                continue"},{"line_number":237,"context_line":"            src_chain \u003d colon_split.pop(0)"},{"line_number":238,"context_line":"            sc_ \u003d _get_id(client_manager.neutronclient,"},{"line_number":239,"context_line":"                          src_chain, \u0027port_chain\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_2e70e107","line":236,"range":{"start_line":235,"start_character":12,"end_line":236,"end_character":24},"updated":"2017-10-26 04:37:17.000000000","message":"Question: This means --branching-point SRC_CHAIN (without dst chain) will be ignored silently. Is it intended, or is it better to raise an error?","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"2da08e364ace80eea6eba1822d857533b418a2e7","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                    \"Error: You must specify at \""},{"line_number":233,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":234,"context_line":"            colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":235,"context_line":"            if len(colon_split) \u003c\u003d 1:"},{"line_number":236,"context_line":"                continue"},{"line_number":237,"context_line":"            src_chain \u003d colon_split.pop(0)"},{"line_number":238,"context_line":"            sc_ \u003d _get_id(client_manager.neutronclient,"},{"line_number":239,"context_line":"                          src_chain, \u0027port_chain\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_3d4ed1c0","line":236,"range":{"start_line":235,"start_character":12,"end_line":236,"end_character":24},"in_reply_to":"3f4b6375_2e70e107","updated":"2017-10-26 08:49:41.000000000","message":"Probably leftover from previous revision, the check on destination chain (and \":\" character) is before, so this one should never be called now","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"7e785f63d38a99771c432392007c84303ab40293","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                    \"Error: You must specify at \""},{"line_number":233,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":234,"context_line":"            colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":235,"context_line":"            if len(colon_split) \u003c\u003d 1:"},{"line_number":236,"context_line":"                continue"},{"line_number":237,"context_line":"            src_chain \u003d colon_split.pop(0)"},{"line_number":238,"context_line":"            sc_ \u003d _get_id(client_manager.neutronclient,"},{"line_number":239,"context_line":"                          src_chain, \u0027port_chain\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_c985bc08","line":236,"range":{"start_line":235,"start_character":12,"end_line":236,"end_character":24},"in_reply_to":"3f4b6375_3d4ed1c0","updated":"2017-10-26 12:24:25.000000000","message":"Yeah.. that makes sense, I\u0027ll visit carefully and correct.","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6c245f832bb6091bf9a949b90cf6cb9100794363","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                    \"Error: You must specify at \""},{"line_number":233,"context_line":"                    \"least one destination chain for each source chain.\")"},{"line_number":234,"context_line":"            colon_split \u003d c.split(\u0027:\u0027)"},{"line_number":235,"context_line":"            if len(colon_split) \u003c\u003d 1:"},{"line_number":236,"context_line":"                continue"},{"line_number":237,"context_line":"            src_chain \u003d colon_split.pop(0)"},{"line_number":238,"context_line":"            sc_ \u003d _get_id(client_manager.neutronclient,"},{"line_number":239,"context_line":"                          src_chain, \u0027port_chain\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_3e446073","line":236,"range":{"start_line":235,"start_character":12,"end_line":236,"end_character":24},"in_reply_to":"3f4b6375_c985bc08","updated":"2017-10-27 15:04:55.000000000","message":"Bernard, good point. I seemed a bit confused as I looked at L.230 too :( Anyway this looks unnecessary.","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b77843a6015ce524f942f09c267f514c6cac5b35","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            for i in colon_split:"},{"line_number":241,"context_line":"                comma_split \u003d i.split(\u0027,\u0027)"},{"line_number":242,"context_line":"                unique \u003d set(comma_split)"},{"line_number":243,"context_line":"                if len(unique) \u003d\u003d len(comma_split):"},{"line_number":244,"context_line":"                    if sc_ in attrs[\u0027port_chains\u0027]:"},{"line_number":245,"context_line":"                        raise exceptions.CommandError("},{"line_number":246,"context_line":"                            \"Error: Source chain {} is in \""},{"line_number":247,"context_line":"                            \"use already \".format(src_chain))"},{"line_number":248,"context_line":"                    else:"},{"line_number":249,"context_line":"                        attrs[\u0027port_chains\u0027][sc_] \u003d []"},{"line_number":250,"context_line":"                        _validate_destination_chains("},{"line_number":251,"context_line":"                            comma_split, attrs, client_manager, sc_)"},{"line_number":252,"context_line":"                else:"},{"line_number":253,"context_line":"                    raise exceptions.CommandError("},{"line_number":254,"context_line":"                        \"Error: Duplicate \""},{"line_number":255,"context_line":"                        \"destination chains from \""},{"line_number":256,"context_line":"                        \"source chain {}\".format(src_chain))"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"def _get_id(client, id_or_name, resource):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_0ecac519","line":256,"range":{"start_line":243,"start_character":16,"end_line":256,"end_character":60},"updated":"2017-10-26 04:37:17.000000000","message":"Just a style topic: Honestly I prefer to the style raise-if-error because I think it is easier to understand the error conditions and we also can save indent levels.\n\n  if len(unique) !\u003d len(comma_split):\n    raise exceptions.CommandError(...)\n  if sc_ inn attr[\u0027port_chains\u0027]:\n    raise exceptions.CommandError(...)\n  [the main logic]\n  L.249-251","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"7e785f63d38a99771c432392007c84303ab40293","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            for i in colon_split:"},{"line_number":241,"context_line":"                comma_split \u003d i.split(\u0027,\u0027)"},{"line_number":242,"context_line":"                unique \u003d set(comma_split)"},{"line_number":243,"context_line":"                if len(unique) \u003d\u003d len(comma_split):"},{"line_number":244,"context_line":"                    if sc_ in attrs[\u0027port_chains\u0027]:"},{"line_number":245,"context_line":"                        raise exceptions.CommandError("},{"line_number":246,"context_line":"                            \"Error: Source chain {} is in \""},{"line_number":247,"context_line":"                            \"use already \".format(src_chain))"},{"line_number":248,"context_line":"                    else:"},{"line_number":249,"context_line":"                        attrs[\u0027port_chains\u0027][sc_] \u003d []"},{"line_number":250,"context_line":"                        _validate_destination_chains("},{"line_number":251,"context_line":"                            comma_split, attrs, client_manager, sc_)"},{"line_number":252,"context_line":"                else:"},{"line_number":253,"context_line":"                    raise exceptions.CommandError("},{"line_number":254,"context_line":"                        \"Error: Duplicate \""},{"line_number":255,"context_line":"                        \"destination chains from \""},{"line_number":256,"context_line":"                        \"source chain {}\".format(src_chain))"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"def _get_id(client, id_or_name, resource):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f4b6375_2992104d","line":256,"range":{"start_line":243,"start_character":16,"end_line":256,"end_character":60},"in_reply_to":"3f4b6375_0ecac519","updated":"2017-10-26 12:24:25.000000000","message":"Will address.","commit_id":"f45d6bfb0b24bac9d487848ff8897b1b55a38499"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f7b1110ffc13157f46923c240247b0ef0164645c","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    return attrs"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"def _format_port_chains(pcs):"},{"line_number":183,"context_line":"    pcs \u003d pcs.replace(\" \", \"\")"},{"line_number":184,"context_line":"    semicolon_split \u003d pcs.split(\u0027;\u0027)"},{"line_number":185,"context_line":"    if semicolon_split[-1] \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f4b6375_3cd685f3","line":182,"updated":"2017-10-30 10:40:53.000000000","message":"This method is not used anywhere. Looks unnecessary.","commit_id":"44ea6036a1865f9b1082be18271f24912665ac65"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"431ed6731317b10c843a911dd31574485f47e7c0","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    return attrs"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"def _format_port_chains(pcs):"},{"line_number":183,"context_line":"    pcs \u003d pcs.replace(\" \", \"\")"},{"line_number":184,"context_line":"    semicolon_split \u003d pcs.split(\u0027;\u0027)"},{"line_number":185,"context_line":"    if semicolon_split[-1] \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f4b6375_3cefa5b1","line":182,"in_reply_to":"3f4b6375_3cd685f3","updated":"2017-10-30 10:41:35.000000000","message":"Done","commit_id":"44ea6036a1865f9b1082be18271f24912665ac65"},{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"5270bfb00e8e5a7cc68bb70929c042569d8f3465","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    return attrs"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"def _format_port_chains(pcs):"},{"line_number":183,"context_line":"    pcs \u003d pcs.replace(\" \", \"\")"},{"line_number":184,"context_line":"    semicolon_split \u003d pcs.split(\u0027;\u0027)"},{"line_number":185,"context_line":"    if semicolon_split[-1] \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f4b6375_37e21e31","line":182,"in_reply_to":"3f4b6375_3cefa5b1","updated":"2017-10-30 11:02:28.000000000","message":"Indeed, this was most probably used with the old input parameter format from earlier revisions","commit_id":"44ea6036a1865f9b1082be18271f24912665ac65"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0d5229905253b76a7863717b73d9cbb0b1b94b0e","unresolved":false,"context_lines":[{"line_number":190,"context_line":"def _validate_destination_chains(comma_split, attrs, client_manager, sc_):"},{"line_number":191,"context_line":"    for e in comma_split:"},{"line_number":192,"context_line":"        if e !\u003d \"\":"},{"line_number":193,"context_line":"            dc_ \u003d (_get_id(client_manager.neutronclient, e, \u0027port_chain\u0027))"},{"line_number":194,"context_line":"            attrs[\u0027port_chains\u0027][sc_].append(dc_)"},{"line_number":195,"context_line":"            if _check_cycle(attrs[\u0027port_chains\u0027], sc_, dc_):"},{"line_number":196,"context_line":"                raise(exceptions.CommandError("}],"source_content_type":"text/x-python","patch_set":16,"id":"3f4b6375_7f82c102","line":193,"range":{"start_line":193,"start_character":18,"end_line":193,"end_character":74},"updated":"2017-10-30 07:00:39.000000000","message":"The outer parentheses are unnecessary","commit_id":"44ea6036a1865f9b1082be18271f24912665ac65"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"431ed6731317b10c843a911dd31574485f47e7c0","unresolved":false,"context_lines":[{"line_number":190,"context_line":"def _validate_destination_chains(comma_split, attrs, client_manager, sc_):"},{"line_number":191,"context_line":"    for e in comma_split:"},{"line_number":192,"context_line":"        if e !\u003d \"\":"},{"line_number":193,"context_line":"            dc_ \u003d (_get_id(client_manager.neutronclient, e, \u0027port_chain\u0027))"},{"line_number":194,"context_line":"            attrs[\u0027port_chains\u0027][sc_].append(dc_)"},{"line_number":195,"context_line":"            if _check_cycle(attrs[\u0027port_chains\u0027], sc_, dc_):"},{"line_number":196,"context_line":"                raise(exceptions.CommandError("}],"source_content_type":"text/x-python","patch_set":16,"id":"3f4b6375_1c2aa9e6","line":193,"range":{"start_line":193,"start_character":18,"end_line":193,"end_character":74},"in_reply_to":"3f4b6375_7f82c102","updated":"2017-10-30 10:41:35.000000000","message":"Done","commit_id":"44ea6036a1865f9b1082be18271f24912665ac65"}],"neutronclient/tests/unit/osc/v2/sfc/test_port_chain.py":[{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"c14a17ea9e5bbda91ac0d7f68c90ed1db9f761e7","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        cp \u003d [{\u0027correlation\u0027: \u0027mpls\u0027, \u0027symmetric\u0027: \u0027true\u0027}]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        verifylist \u003d ["},{"line_number":102,"context_line":"            (\u0027port_pair_groups\u0027, [self._port_chain[\u0027port_pair_groups\u0027]]),"},{"line_number":103,"context_line":"            (\u0027name\u0027, self._port_chain[\u0027name\u0027]),"},{"line_number":104,"context_line":"            (\u0027description\u0027, self._port_chain[\u0027description\u0027]),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_fb4d4e72","line":101,"updated":"2017-07-26 09:05:58.000000000","message":"This file shouldn\u0027t be changed.","commit_id":"b3183f0a772c4461d9246a67a7063f3d76049df6"}],"neutronclient/tests/unit/osc/v2/sfc/test_service_graph.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"49ab223746a64cbd521285e25584029d578e5eec","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from osc_lib import exceptions"},{"line_number":18,"context_line":"from osc_lib.tests import utils as tests_utils"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_55d40e48","line":15,"updated":"2017-08-03 06:22:22.000000000","message":"mock is third-party, so mock and osc-lib should go to the same import group.","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from osc_lib import exceptions"},{"line_number":18,"context_line":"from osc_lib.tests import utils as tests_utils"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_f3cd28b7","line":15,"in_reply_to":"df3967d1_55d40e48","updated":"2017-08-04 15:02:06.000000000","message":"Done","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"}],"neutronclient/v2_0/client.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"49ab223746a64cbd521285e25584029d578e5eec","unresolved":false,"context_lines":[{"line_number":2274,"context_line":""},{"line_number":2275,"context_line":"    def delete_service_graph(self, service_graph):"},{"line_number":2276,"context_line":"        \"\"\"Deletes the specified Service Graph.\"\"\""},{"line_number":2277,"context_line":"        return self.delete(self.sfc_service_graph_path % (service_graph))"},{"line_number":2278,"context_line":""},{"line_number":2279,"context_line":"    def list_service_graph(self, retrieve_all\u003dTrue, **_params):"},{"line_number":2280,"context_line":"        \"\"\"Fetches a list of all Service Graphs.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_d5c7de95","line":2277,"range":{"start_line":2277,"start_character":57,"end_line":2277,"end_character":72},"updated":"2017-08-03 06:22:22.000000000","message":"Parentheses are unnecessary.","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":2274,"context_line":""},{"line_number":2275,"context_line":"    def delete_service_graph(self, service_graph):"},{"line_number":2276,"context_line":"        \"\"\"Deletes the specified Service Graph.\"\"\""},{"line_number":2277,"context_line":"        return self.delete(self.sfc_service_graph_path % (service_graph))"},{"line_number":2278,"context_line":""},{"line_number":2279,"context_line":"    def list_service_graph(self, retrieve_all\u003dTrue, **_params):"},{"line_number":2280,"context_line":"        \"\"\"Fetches a list of all Service Graphs.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_533ab498","line":2277,"range":{"start_line":2277,"start_character":57,"end_line":2277,"end_character":72},"in_reply_to":"df3967d1_d5c7de95","updated":"2017-08-04 15:02:06.000000000","message":"Done","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"49ab223746a64cbd521285e25584029d578e5eec","unresolved":false,"context_lines":[{"line_number":2283,"context_line":""},{"line_number":2284,"context_line":"    def show_service_graph(self, service_graph, **_params):"},{"line_number":2285,"context_line":"        \"\"\"Fetches information of a certain Service Graph.\"\"\""},{"line_number":2286,"context_line":"        return self.get(self.sfc_service_graph_path % (service_graph),"},{"line_number":2287,"context_line":"                        params\u003d_params)"},{"line_number":2288,"context_line":""},{"line_number":2289,"context_line":"    def __init__(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_b5c45a92","line":2286,"range":{"start_line":2286,"start_character":54,"end_line":2286,"end_character":70},"updated":"2017-08-03 06:22:22.000000000","message":"ditto","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":2283,"context_line":""},{"line_number":2284,"context_line":"    def show_service_graph(self, service_graph, **_params):"},{"line_number":2285,"context_line":"        \"\"\"Fetches information of a certain Service Graph.\"\"\""},{"line_number":2286,"context_line":"        return self.get(self.sfc_service_graph_path % (service_graph),"},{"line_number":2287,"context_line":"                        params\u003d_params)"},{"line_number":2288,"context_line":""},{"line_number":2289,"context_line":"    def __init__(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_333df08e","line":2286,"range":{"start_line":2286,"start_character":54,"end_line":2286,"end_character":70},"in_reply_to":"df3967d1_b5c45a92","updated":"2017-08-04 15:02:06.000000000","message":"Done","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"da346f20d3bf2956782739a1ade03bedd25cbbb7","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"        \"\"\"Deletes the specified Service Graph.\"\"\""},{"line_number":2277,"context_line":"        return self.delete(self.sfc_service_graph_path % service_graph)"},{"line_number":2278,"context_line":""},{"line_number":2279,"context_line":"    def list_service_graphs(self, retrieve_all\u003dTrue, **_params):"},{"line_number":2280,"context_line":"        \"\"\"Fetches a list of all Service Graphs.\"\"\""},{"line_number":2281,"context_line":"        return self.list(\u0027service_graphs\u0027, self.sfc_service_graphs_path,"},{"line_number":2282,"context_line":"                         retrieve_all, **_params)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f4e5783_75d27802","line":2279,"range":{"start_line":2279,"start_character":8,"end_line":2279,"end_character":27},"updated":"2017-10-13 13:25:47.000000000","message":"I think we should be call this one list_sfc_service_graphs, from what I saw in https://review.openstack.org/#/c/504060/","commit_id":"c655a2c2376c5983e0f4ced34c17d18e17241e73"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"d5b562281b6d40e386b6771b8d9a571c945aa278","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"        \"\"\"Deletes the specified Service Graph.\"\"\""},{"line_number":2277,"context_line":"        return self.delete(self.sfc_service_graph_path % service_graph)"},{"line_number":2278,"context_line":""},{"line_number":2279,"context_line":"    def list_service_graphs(self, retrieve_all\u003dTrue, **_params):"},{"line_number":2280,"context_line":"        \"\"\"Fetches a list of all Service Graphs.\"\"\""},{"line_number":2281,"context_line":"        return self.list(\u0027service_graphs\u0027, self.sfc_service_graphs_path,"},{"line_number":2282,"context_line":"                         retrieve_all, **_params)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f4e5783_3bd86f1c","line":2279,"range":{"start_line":2279,"start_character":8,"end_line":2279,"end_character":27},"in_reply_to":"5f4e5783_75d27802","updated":"2017-10-13 14:17:55.000000000","message":"Done","commit_id":"c655a2c2376c5983e0f4ced34c17d18e17241e73"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"230932b4a22383fe0a844dac17b82148824ab00e","unresolved":false,"context_lines":[{"line_number":2263,"context_line":"        return self.get(self.sfc_flow_classifier_path % (flow_classifier),"},{"line_number":2264,"context_line":"                        params\u003d_params)"},{"line_number":2265,"context_line":""},{"line_number":2266,"context_line":"    def create_service_graph(self, body\u003dNone):"},{"line_number":2267,"context_line":"        \"\"\"Create the specified Service Graph.\"\"\""},{"line_number":2268,"context_line":"        return self.post(self.sfc_service_graphs_path, body\u003dbody)"},{"line_number":2269,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_56619004","line":2266,"range":{"start_line":2266,"start_character":8,"end_line":2266,"end_character":28},"updated":"2017-10-16 15:25:59.000000000","message":"It is better to include \"_sfc_\" in the method name.\n\n  create_sfc_service_graph\n\nAt now, only list_sfc_service_graphs contains _sfc_. It is inconsistent.","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"b00f657c22b55cd64a1afca46309626d7a132aff","unresolved":false,"context_lines":[{"line_number":2263,"context_line":"        return self.get(self.sfc_flow_classifier_path % (flow_classifier),"},{"line_number":2264,"context_line":"                        params\u003d_params)"},{"line_number":2265,"context_line":""},{"line_number":2266,"context_line":"    def create_service_graph(self, body\u003dNone):"},{"line_number":2267,"context_line":"        \"\"\"Create the specified Service Graph.\"\"\""},{"line_number":2268,"context_line":"        return self.post(self.sfc_service_graphs_path, body\u003dbody)"},{"line_number":2269,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_2528f894","line":2266,"range":{"start_line":2266,"start_character":8,"end_line":2266,"end_character":28},"in_reply_to":"5f4e5783_56619004","updated":"2017-10-17 16:05:18.000000000","message":"Done","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"},{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"7ea1b9368514d8f1f11e2750736b5e1549eb7808","unresolved":false,"context_lines":[{"line_number":2263,"context_line":"        return self.get(self.sfc_flow_classifier_path % (flow_classifier),"},{"line_number":2264,"context_line":"                        params\u003d_params)"},{"line_number":2265,"context_line":""},{"line_number":2266,"context_line":"    def create_service_graph(self, body\u003dNone):"},{"line_number":2267,"context_line":"        \"\"\"Create the specified Service Graph.\"\"\""},{"line_number":2268,"context_line":"        return self.post(self.sfc_service_graphs_path, body\u003dbody)"},{"line_number":2269,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_3c6833b7","line":2266,"range":{"start_line":2266,"start_character":8,"end_line":2266,"end_character":28},"in_reply_to":"5f4e5783_56619004","updated":"2017-10-16 16:03:37.000000000","message":"The list_sfc_service_graphs rename comes from my suggestion:\nhttps://review.openstack.org/#/c/504060/\n(in that one I only renamed the list_* to keep the change small, but indeed it makes for inconsistent naming)","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"}],"releasenotes/notes/add-service-graph-ce4a25b3e32d70a6.yaml":[{"author":{"_account_id":21798,"name":"Bernard Cafarelli","email":"bcafarel@redhat.com","username":"bcafarel"},"change_message_id":"d93acb77ba8c6392a2ac1ca17d41a4aaf6ee3478","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for Service Graph resource. Related RFE: https://bugs.launchpad.net/networking-sfc/+bug/1587486."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"df3967d1_4bd5cb42","line":4,"updated":"2017-08-01 16:16:49.000000000","message":"Nitpicking, should we remind this is a SFC feature here?","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for Service Graph resource. Related RFE: https://bugs.launchpad.net/networking-sfc/+bug/1587486."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"df3967d1_93537ce2","line":4,"in_reply_to":"df3967d1_353e2a8c","updated":"2017-08-04 15:02:06.000000000","message":"Done","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":26474,"name":"Daire Ní Chatháin","email":"dairenichat@gmail.com","username":"dairenic"},"change_message_id":"b9411266d7d536bfddc6c27562036e7604ba8b92","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for Service Graph resource. Related RFE: https://bugs.launchpad.net/networking-sfc/+bug/1587486."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"df3967d1_d34d843e","line":4,"in_reply_to":"df3967d1_4bd5cb42","updated":"2017-08-04 15:02:06.000000000","message":"Done","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"49ab223746a64cbd521285e25584029d578e5eec","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for Service Graph resource. Related RFE: https://bugs.launchpad.net/networking-sfc/+bug/1587486."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"df3967d1_353e2a8c","line":4,"in_reply_to":"df3967d1_4bd5cb42","updated":"2017-08-03 06:22:22.000000000","message":"could you wrap lines?","commit_id":"b9addcb2d0af32ef0b827f223ca67da93b54fa30"}],"setup.cfg":[{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"b00f657c22b55cd64a1afca46309626d7a132aff","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    sfc_port_pair_group_unset \u003d neutronclient.osc.v2.sfc.sfc_port_pair_group:UnsetSfcPortPairGroup"},{"line_number":67,"context_line":"    sfc_service_graph_create \u003d neutronclient.osc.v2.sfc.sfc_service_graph:CreateSfcServiceGraph"},{"line_number":68,"context_line":"    sfc_service_graph_delete \u003d neutronclient.osc.v2.sfc.sfc_service_graph:DeleteSfcServiceGraph"},{"line_number":69,"context_line":"    sfc_service_graph_update \u003d neutronclient.osc.v2.sfc.sfc_service_graph:UpdateSfcServiceGraph"},{"line_number":70,"context_line":"    sfc_service_graph_list \u003d neutronclient.osc.v2.sfc.sfc_service_graph:ListSfcServiceGraph"},{"line_number":71,"context_line":"    sfc_service_graph_show \u003d neutronclient.osc.v2.sfc.sfc_service_graph:ShowSfcServiceGraph"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-ttcn-cfg","patch_set":13,"id":"5f4e5783_a515084b","line":69,"range":{"start_line":69,"start_character":74,"end_line":69,"end_character":95},"updated":"2017-10-17 16:05:18.000000000","message":"Done","commit_id":"df7857ad26102d5e74a2cb642c178079c2aff5d5"}]}
