)]}'
{"1":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"89514ec9eb05d03173c72b16617a9ef1a5e51cd9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"df3967d1_5402d50c","updated":"2017-08-03 03:15:46.000000000","message":"what\u0027s this file?","commit_id":"5fae791690917607d5f48de993d710a018a9b43f"}],"neutronclient/osc/v2/taas/common.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1a5e71bf247b75a656f6ffc18b25440237989fc0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3f79a3b5_9414d5eb","updated":"2018-10-01 15:40:51.000000000","message":"This module should be implemented as the python binding layer. It should be implemented in either of neutronclient/v2/clients.py or OpenStack SDK. OpenStack SDK is more suggested.","commit_id":"88057403ef67f80814e6002950a44d8d2962e645"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2d573994bedd08fb0af952c6c5c1ba78fa5f944c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3f79a3b5_94e935e5","in_reply_to":"3f79a3b5_9414d5eb","updated":"2018-10-01 15:41:31.000000000","message":"The point of this comment is that the python binding layer is not a part of CLI implementation.","commit_id":"88057403ef67f80814e6002950a44d8d2962e645"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"5bda9b15ced891619d319184756874bc284a01ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3f79a3b5_ebcf2751","in_reply_to":"3f79a3b5_94e935e5","updated":"2018-10-04 06:22:01.000000000","message":"Ohh, is the intention of this comment is to move this patch to Openstack SDK?","commit_id":"88057403ef67f80814e6002950a44d8d2962e645"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5edd3145f6cc3fc44445ab53508ac7cd6403dc06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3f79a3b5_55225456","in_reply_to":"3f79a3b5_ebcf2751","updated":"2018-10-05 11:32:29.000000000","message":"Either way is okay to me. \n\nWhile the progress of the migration to OpenStackSDK is not good, the neutron team would like to move the python binding layer to OpenStackSDK honoring the mission of OpenStackSDK.\n\nOn the other hand, you can add it to neutronclient/v2/clients.py of course.","commit_id":"88057403ef67f80814e6002950a44d8d2962e645"}],"neutronclient/osc/v2/taas/tapflow.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"def _add_updatable_args(parser):"},{"line_number":32,"context_line":"    parser.add_argument("},{"line_number":33,"context_line":"        \u0027--name\u0027,"},{"line_number":34,"context_line":"        help\u003d_(\u0027Name of the Tap flow.\u0027))"},{"line_number":35,"context_line":"    parser.add_argument("},{"line_number":36,"context_line":"        \u0027--description\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Description for the Tap flow.\u0027))"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_a01ba3c7","line":34,"range":{"start_line":34,"start_character":28,"end_line":34,"end_character":31},"updated":"2019-01-31 03:58:11.000000000","message":"There is no need to capitalize it.\n\nThis applies to all similar \"Tap flow\".","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":31,"context_line":"def _add_updatable_args(parser):"},{"line_number":32,"context_line":"    parser.add_argument("},{"line_number":33,"context_line":"        \u0027--name\u0027,"},{"line_number":34,"context_line":"        help\u003d_(\u0027Name of the Tap flow.\u0027))"},{"line_number":35,"context_line":"    parser.add_argument("},{"line_number":36,"context_line":"        \u0027--description\u0027,"},{"line_number":37,"context_line":"        help\u003d_(\u0027Description for the Tap flow.\u0027))"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_c697cd39","line":34,"range":{"start_line":34,"start_character":28,"end_line":34,"end_character":31},"in_reply_to":"9fdfeff1_a01ba3c7","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def _get_columns(item):"},{"line_number":41,"context_line":"    return tuple(sorted(list(item.keys())))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def _update_common_attrs(parsed_args, attrs):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_40651745","line":41,"range":{"start_line":41,"start_character":24,"end_line":41,"end_character":28},"updated":"2019-01-31 03:58:11.000000000","message":"Why is \u0027list\u0027 needed?\n\n  tuple(sorted(item))\n\ndoesn\u0027t work?","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def _get_columns(item):"},{"line_number":41,"context_line":"    return tuple(sorted(list(item.keys())))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def _update_common_attrs(parsed_args, attrs):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_b2ee751f","line":41,"range":{"start_line":41,"start_character":24,"end_line":41,"end_character":28},"in_reply_to":"9fdfeff1_40651745","updated":"2019-02-01 15:39:22.000000000","message":"Yes, that should work too. Will update it","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def _update_common_attrs(parsed_args, attrs):"},{"line_number":45,"context_line":"    if parsed_args.name:"},{"line_number":46,"context_line":"        attrs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":47,"context_line":"    if parsed_args.description:"},{"line_number":48,"context_line":"        attrs[\u0027description\u0027] \u003d parsed_args.description"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_205ed375","line":45,"updated":"2019-01-31 03:58:11.000000000","message":"Consider a case that name is an empty string.\n\n  if parsed_args.name is not None:","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def _update_common_attrs(parsed_args, attrs):"},{"line_number":45,"context_line":"    if parsed_args.name:"},{"line_number":46,"context_line":"        attrs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":47,"context_line":"    if parsed_args.description:"},{"line_number":48,"context_line":"        attrs[\u0027description\u0027] \u003d parsed_args.description"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_46d99d1f","line":45,"in_reply_to":"9fdfeff1_205ed375","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":44,"context_line":"def _update_common_attrs(parsed_args, attrs):"},{"line_number":45,"context_line":"    if parsed_args.name:"},{"line_number":46,"context_line":"        attrs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":47,"context_line":"    if parsed_args.description:"},{"line_number":48,"context_line":"        attrs[\u0027description\u0027] \u003d parsed_args.description"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_c0582789","line":47,"updated":"2019-01-31 03:58:11.000000000","message":"ditto","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":44,"context_line":"def _update_common_attrs(parsed_args, attrs):"},{"line_number":45,"context_line":"    if parsed_args.name:"},{"line_number":46,"context_line":"        attrs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":47,"context_line":"    if parsed_args.description:"},{"line_number":48,"context_line":"        attrs[\u0027description\u0027] \u003d parsed_args.description"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_66d4e1e9","line":47,"in_reply_to":"9fdfeff1_c0582789","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                   \u0027by the tapflow\u0027))"},{"line_number":72,"context_line":"        parser.add_argument("},{"line_number":73,"context_line":"            \u0027--vlan-filter\u0027,"},{"line_number":74,"context_line":"            required\u003dFalse,"},{"line_number":75,"context_line":"            metavar\u003d\u0027\u003cvlan_filter\u003e\u0027,"},{"line_number":76,"context_line":"            type\u003dn_utils.convert_to_uppercase,"},{"line_number":77,"context_line":"            help\u003d_(\u0027VLAN Ids to be mirrored in the form of range string.\u0027))"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_40caf71a","line":74,"range":{"start_line":74,"start_character":12,"end_line":74,"end_character":27},"updated":"2019-01-31 03:58:11.000000000","message":"Looks unnecessary","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                   \u0027by the tapflow\u0027))"},{"line_number":72,"context_line":"        parser.add_argument("},{"line_number":73,"context_line":"            \u0027--vlan-filter\u0027,"},{"line_number":74,"context_line":"            required\u003dFalse,"},{"line_number":75,"context_line":"            metavar\u003d\u0027\u003cvlan_filter\u003e\u0027,"},{"line_number":76,"context_line":"            type\u003dn_utils.convert_to_uppercase,"},{"line_number":77,"context_line":"            help\u003d_(\u0027VLAN Ids to be mirrored in the form of range string.\u0027))"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_c6e82d7d","line":74,"range":{"start_line":74,"start_character":12,"end_line":74,"end_character":27},"in_reply_to":"9fdfeff1_40caf71a","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            required\u003dFalse,"},{"line_number":75,"context_line":"            metavar\u003d\u0027\u003cvlan_filter\u003e\u0027,"},{"line_number":76,"context_line":"            type\u003dn_utils.convert_to_uppercase,"},{"line_number":77,"context_line":"            help\u003d_(\u0027VLAN Ids to be mirrored in the form of range string.\u0027))"},{"line_number":78,"context_line":"        return parser"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_e0d8cbef","line":77,"range":{"start_line":77,"start_character":47,"end_line":77,"end_character":71},"updated":"2019-01-31 03:58:11.000000000","message":"Could you include an example of \"the form of range string\"?","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            required\u003dFalse,"},{"line_number":75,"context_line":"            metavar\u003d\u0027\u003cvlan_filter\u003e\u0027,"},{"line_number":76,"context_line":"            type\u003dn_utils.convert_to_uppercase,"},{"line_number":77,"context_line":"            help\u003d_(\u0027VLAN Ids to be mirrored in the form of range string.\u0027))"},{"line_number":78,"context_line":"        return parser"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_20d333d7","line":77,"range":{"start_line":77,"start_character":25,"end_line":77,"end_character":28},"updated":"2019-01-31 03:58:11.000000000","message":"Ids -\u003e IDs","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            required\u003dFalse,"},{"line_number":75,"context_line":"            metavar\u003d\u0027\u003cvlan_filter\u003e\u0027,"},{"line_number":76,"context_line":"            type\u003dn_utils.convert_to_uppercase,"},{"line_number":77,"context_line":"            help\u003d_(\u0027VLAN Ids to be mirrored in the form of range string.\u0027))"},{"line_number":78,"context_line":"        return parser"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_a601693a","line":77,"range":{"start_line":77,"start_character":25,"end_line":77,"end_character":28},"in_reply_to":"9fdfeff1_20d333d7","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            required\u003dFalse,"},{"line_number":75,"context_line":"            metavar\u003d\u0027\u003cvlan_filter\u003e\u0027,"},{"line_number":76,"context_line":"            type\u003dn_utils.convert_to_uppercase,"},{"line_number":77,"context_line":"            help\u003d_(\u0027VLAN Ids to be mirrored in the form of range string.\u0027))"},{"line_number":78,"context_line":"        return parser"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_46f2fd9b","line":77,"range":{"start_line":77,"start_character":47,"end_line":77,"end_character":71},"in_reply_to":"9fdfeff1_e0d8cbef","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def take_action(self, parsed_args):"},{"line_number":81,"context_line":"        client \u003d self.app.client_manager.neutronclient"},{"line_number":82,"context_line":"        source_port \u003d _get_id(client, parsed_args.port, \u0027port\u0027)"},{"line_number":83,"context_line":"        tap_service_id \u003d _get_id(client, parsed_args.tap_service,"},{"line_number":84,"context_line":"                                 \u0027tap_service\u0027)"},{"line_number":85,"context_line":"        attrs \u003d {\u0027source_port\u0027: source_port,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_20ec938d","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":19},"updated":"2019-01-31 03:58:11.000000000","message":"I prefer to including \u0027_id\u0027 in the variable name as this is a return value from _get_id: port_id or source_port_id","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def take_action(self, parsed_args):"},{"line_number":81,"context_line":"        client \u003d self.app.client_manager.neutronclient"},{"line_number":82,"context_line":"        source_port \u003d _get_id(client, parsed_args.port, \u0027port\u0027)"},{"line_number":83,"context_line":"        tap_service_id \u003d _get_id(client, parsed_args.tap_service,"},{"line_number":84,"context_line":"                                 \u0027tap_service\u0027)"},{"line_number":85,"context_line":"        attrs \u003d {\u0027source_port\u0027: source_port,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_c6334d61","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":19},"in_reply_to":"9fdfeff1_20ec938d","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        attrs \u003d {\u0027source_port\u0027: source_port,"},{"line_number":86,"context_line":"                 \u0027tap_service_id\u0027: tap_service_id}"},{"line_number":87,"context_line":"        _update_common_attrs(parsed_args, attrs)"},{"line_number":88,"context_line":"        if parsed_args.direction:"},{"line_number":89,"context_line":"            attrs[\u0027direction\u0027] \u003d parsed_args.direction"},{"line_number":90,"context_line":"        if parsed_args.vlan_filter:"},{"line_number":91,"context_line":"            attrs[\u0027vlan_filter\u0027] \u003d parsed_args.vlan_filter"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_a0f72359","line":88,"range":{"start_line":88,"start_character":7,"end_line":88,"end_character":33},"updated":"2019-01-31 03:58:11.000000000","message":"--direction is marked as required\u003dTrue. Why is this condition required?","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        attrs \u003d {\u0027source_port\u0027: source_port,"},{"line_number":86,"context_line":"                 \u0027tap_service_id\u0027: tap_service_id}"},{"line_number":87,"context_line":"        _update_common_attrs(parsed_args, attrs)"},{"line_number":88,"context_line":"        if parsed_args.direction:"},{"line_number":89,"context_line":"            attrs[\u0027direction\u0027] \u003d parsed_args.direction"},{"line_number":90,"context_line":"        if parsed_args.vlan_filter:"},{"line_number":91,"context_line":"            attrs[\u0027vlan_filter\u0027] \u003d parsed_args.vlan_filter"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_46475dbd","line":88,"range":{"start_line":88,"start_character":7,"end_line":88,"end_character":33},"in_reply_to":"9fdfeff1_a0f72359","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        _update_common_attrs(parsed_args, attrs)"},{"line_number":88,"context_line":"        if parsed_args.direction:"},{"line_number":89,"context_line":"            attrs[\u0027direction\u0027] \u003d parsed_args.direction"},{"line_number":90,"context_line":"        if parsed_args.vlan_filter:"},{"line_number":91,"context_line":"            attrs[\u0027vlan_filter\u0027] \u003d parsed_args.vlan_filter"},{"line_number":92,"context_line":"        body \u003d {resource: attrs}"},{"line_number":93,"context_line":"        obj \u003d client.create_ext(client.taas_tap_flows_path, body)[resource]"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_609b7b17","line":90,"range":{"start_line":90,"start_character":11,"end_line":90,"end_character":34},"updated":"2019-01-31 03:58:11.000000000","message":"Isn\u0027t it better to check vlan_filter is None? Otherwise, you cannot specify vlan ID 0.","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        _update_common_attrs(parsed_args, attrs)"},{"line_number":88,"context_line":"        if parsed_args.direction:"},{"line_number":89,"context_line":"            attrs[\u0027direction\u0027] \u003d parsed_args.direction"},{"line_number":90,"context_line":"        if parsed_args.vlan_filter:"},{"line_number":91,"context_line":"            attrs[\u0027vlan_filter\u0027] \u003d parsed_args.vlan_filter"},{"line_number":92,"context_line":"        body \u003d {resource: attrs}"},{"line_number":93,"context_line":"        obj \u003d client.create_ext(client.taas_tap_flows_path, body)[resource]"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_86dd45e1","line":90,"range":{"start_line":90,"start_character":11,"end_line":90,"end_character":34},"in_reply_to":"9fdfeff1_609b7b17","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def get_parser(self, prog_name):"},{"line_number":103,"context_line":"        parser \u003d super(DeleteTapFlow, self).get_parser(prog_name)"},{"line_number":104,"context_line":"        parser.add_argument("},{"line_number":105,"context_line":"            \u0027tap_flow\u0027,"},{"line_number":106,"context_line":"            nargs\u003d\u0027+\u0027,"},{"line_number":107,"context_line":"            help\u003d_(\"Tap Flow to delete (name or ID)\")"},{"line_number":108,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_60c4dbf5","line":105,"range":{"start_line":105,"start_character":13,"end_line":105,"end_character":21},"updated":"2019-01-31 03:58:11.000000000","message":"-\u003e \u003ctap-flow\u003e","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def get_parser(self, prog_name):"},{"line_number":103,"context_line":"        parser \u003d super(DeleteTapFlow, self).get_parser(prog_name)"},{"line_number":104,"context_line":"        parser.add_argument("},{"line_number":105,"context_line":"            \u0027tap_flow\u0027,"},{"line_number":106,"context_line":"            nargs\u003d\u0027+\u0027,"},{"line_number":107,"context_line":"            help\u003d_(\"Tap Flow to delete (name or ID)\")"},{"line_number":108,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_e60f7185","line":105,"range":{"start_line":105,"start_character":13,"end_line":105,"end_character":21},"in_reply_to":"9fdfeff1_60c4dbf5","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    def get_parser(self, prog_name):"},{"line_number":135,"context_line":"        parser \u003d super(ShowTapFlow, self).get_parser(prog_name)"},{"line_number":136,"context_line":"        parser.add_argument("},{"line_number":137,"context_line":"            \u0027tap_flow\u0027,"},{"line_number":138,"context_line":"            help\u003d_(\"ID or name of the Tap Flow to display\")"},{"line_number":139,"context_line":"        )"},{"line_number":140,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_00b70f88","line":137,"range":{"start_line":137,"start_character":13,"end_line":137,"end_character":20},"updated":"2019-01-31 03:58:11.000000000","message":"-\u003e \u003ctap-flow\u003e","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    def get_parser(self, prog_name):"},{"line_number":135,"context_line":"        parser \u003d super(ShowTapFlow, self).get_parser(prog_name)"},{"line_number":136,"context_line":"        parser.add_argument("},{"line_number":137,"context_line":"            \u0027tap_flow\u0027,"},{"line_number":138,"context_line":"            help\u003d_(\"ID or name of the Tap Flow to display\")"},{"line_number":139,"context_line":"        )"},{"line_number":140,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_4620bdf7","line":137,"range":{"start_line":137,"start_character":13,"end_line":137,"end_character":20},"in_reply_to":"9fdfeff1_00b70f88","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def take_action(self, parsed_args):"},{"line_number":143,"context_line":"        client \u003d self.app.client_manager.neutronclient"},{"line_number":144,"context_line":"        id \u003d _get_id(client, parsed_args.tap_flow, resource)"},{"line_number":145,"context_line":"        obj \u003d client.show_ext(client.taas_tap_flow_path, id)[resource]"},{"line_number":146,"context_line":"        columns \u003d _get_columns(obj)"},{"line_number":147,"context_line":"        data \u003d utils.get_dict_properties(obj, columns)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_009e2f06","line":144,"range":{"start_line":144,"start_character":8,"end_line":144,"end_character":10},"updated":"2019-01-31 03:58:11.000000000","message":"\"id\" is a reserved keyword in python. Could you avoid using it?","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def take_action(self, parsed_args):"},{"line_number":143,"context_line":"        client \u003d self.app.client_manager.neutronclient"},{"line_number":144,"context_line":"        id \u003d _get_id(client, parsed_args.tap_flow, resource)"},{"line_number":145,"context_line":"        obj \u003d client.show_ext(client.taas_tap_flow_path, id)[resource]"},{"line_number":146,"context_line":"        columns \u003d _get_columns(obj)"},{"line_number":147,"context_line":"        data \u003d utils.get_dict_properties(obj, columns)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_2668191b","line":144,"range":{"start_line":144,"start_character":8,"end_line":144,"end_character":10},"in_reply_to":"9fdfeff1_009e2f06","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        parser \u003d super(SetTapFlow, self).get_parser(prog_name)"},{"line_number":156,"context_line":"        _add_updatable_args(parser)"},{"line_number":157,"context_line":"        parser.add_argument("},{"line_number":158,"context_line":"            \u0027tap_flow\u0027,"},{"line_number":159,"context_line":"            help\u003d_(\"Tap Flow to modify (name or ID)\")"},{"line_number":160,"context_line":"        )"},{"line_number":161,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_20ba536d","line":158,"range":{"start_line":158,"start_character":13,"end_line":158,"end_character":21},"updated":"2019-01-31 03:58:11.000000000","message":"-\u003e \u003ctap-flow\u003e","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        parser \u003d super(SetTapFlow, self).get_parser(prog_name)"},{"line_number":156,"context_line":"        _add_updatable_args(parser)"},{"line_number":157,"context_line":"        parser.add_argument("},{"line_number":158,"context_line":"            \u0027tap_flow\u0027,"},{"line_number":159,"context_line":"            help\u003d_(\"Tap Flow to modify (name or ID)\")"},{"line_number":160,"context_line":"        )"},{"line_number":161,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_e65d3179","line":158,"range":{"start_line":158,"start_character":13,"end_line":158,"end_character":21},"in_reply_to":"9fdfeff1_20ba536d","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    def take_action(self, parsed_args):"},{"line_number":164,"context_line":"        attrs \u003d {}"},{"line_number":165,"context_line":"        client \u003d self.app.client_manager.neutronclient"},{"line_number":166,"context_line":"        id \u003d _get_id(client, parsed_args.tap_flow, resource)"},{"line_number":167,"context_line":"        _update_common_attrs(parsed_args, attrs)"},{"line_number":168,"context_line":"        body \u003d {resource: attrs}"},{"line_number":169,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_c0b4a782","line":166,"range":{"start_line":166,"start_character":8,"end_line":166,"end_character":10},"updated":"2019-01-31 03:58:11.000000000","message":"Same as for L.144.","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    def take_action(self, parsed_args):"},{"line_number":164,"context_line":"        attrs \u003d {}"},{"line_number":165,"context_line":"        client \u003d self.app.client_manager.neutronclient"},{"line_number":166,"context_line":"        id \u003d _get_id(client, parsed_args.tap_flow, resource)"},{"line_number":167,"context_line":"        _update_common_attrs(parsed_args, attrs)"},{"line_number":168,"context_line":"        body \u003d {resource: attrs}"},{"line_number":169,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_8658e587","line":166,"range":{"start_line":166,"start_character":8,"end_line":166,"end_character":10},"in_reply_to":"9fdfeff1_c0b4a782","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d3aa51e9b796e6d7bb64b71d85874f14045e2657","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        parser.add_argument("},{"line_number":68,"context_line":"            \u0027--direction\u0027,"},{"line_number":69,"context_line":"            required\u003dTrue,"},{"line_number":70,"context_line":"            choices\u003d[\u0027IN\u0027, \u0027OUT\u0027, \u0027BOTH\u0027],"},{"line_number":71,"context_line":"            type\u003dn_utils.convert_to_uppercase,"},{"line_number":72,"context_line":"            help\u003d_(\u0027Direction of the packet flow which needs to be mirrored \u0027"},{"line_number":73,"context_line":"                   \u0027by the tapflow\u0027))"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_485f230e","line":70,"updated":"2019-10-02 21:41:32.000000000","message":"why not ingress and egress like in other commands, e.g. security groups or qos rules?","commit_id":"fcebe2e71bf439ca7f72851b14ed84597df4c6bb"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b4a17c08eb5e0b31b0d35eb9e1f7c966462838b5","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        parser.add_argument("},{"line_number":68,"context_line":"            \u0027--direction\u0027,"},{"line_number":69,"context_line":"            required\u003dTrue,"},{"line_number":70,"context_line":"            choices\u003d[\u0027IN\u0027, \u0027OUT\u0027, \u0027BOTH\u0027],"},{"line_number":71,"context_line":"            type\u003dn_utils.convert_to_uppercase,"},{"line_number":72,"context_line":"            help\u003d_(\u0027Direction of the packet flow which needs to be mirrored \u0027"},{"line_number":73,"context_line":"                   \u0027by the tapflow\u0027))"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_689214a2","line":70,"in_reply_to":"3fa7e38b_26cbd91e","updated":"2019-10-21 14:29:56.000000000","message":"As I see osc folks see these questions from usability (whatever that means in every specific case) perspective, so they tend to ask for CLI interface that is not 1-to-1 representation of the REST API.\nFor me this is good and usable, I let this for them :-)","commit_id":"fcebe2e71bf439ca7f72851b14ed84597df4c6bb"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"c3668a63684c52ed72606872fd7a1ec2bf12eb8b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        parser.add_argument("},{"line_number":68,"context_line":"            \u0027--direction\u0027,"},{"line_number":69,"context_line":"            required\u003dTrue,"},{"line_number":70,"context_line":"            choices\u003d[\u0027IN\u0027, \u0027OUT\u0027, \u0027BOTH\u0027],"},{"line_number":71,"context_line":"            type\u003dn_utils.convert_to_uppercase,"},{"line_number":72,"context_line":"            help\u003d_(\u0027Direction of the packet flow which needs to be mirrored \u0027"},{"line_number":73,"context_line":"                   \u0027by the tapflow\u0027))"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_26cbd91e","line":70,"in_reply_to":"3fa7e38b_485f230e","updated":"2019-10-04 15:29:43.000000000","message":"I agree in principle but actually that is how TaaS plugin client named these parameters. And then heat also has followed suit. If we want to update it now then it would require updates in a lot of repos, i.e. tap-as-a-service, tap-as-a-service-dashboard, heat etc...","commit_id":"fcebe2e71bf439ca7f72851b14ed84597df4c6bb"}],"neutronclient/osc/v2/taas/tapservice.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"9fdfeff1_60693bf7","updated":"2019-01-31 03:58:11.000000000","message":"Most comments for tapflow.py are applied to this file too. Could you update similar places accordingly?","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"9fdfeff1_862785ca","in_reply_to":"9fdfeff1_60693bf7","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"}],"neutronclient/tests/unit/osc/v2/taas/fakes.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @staticmethod"},{"line_number":68,"context_line":"    def create_tap_flows(attrs\u003dNone, count\u003d1):"},{"line_number":69,"context_line":"        \"\"\"Create multiple tap_flows."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        :param Dictionary attrs:"},{"line_number":72,"context_line":"            A dictionary with all attributes"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_20481385","line":69,"range":{"start_line":69,"start_character":27,"end_line":69,"end_character":36},"updated":"2019-01-31 03:58:11.000000000","message":"\"tap flow(s)\" is used somewhere and \"tap_flow(s)\" is used somewhere. Could you use either?","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @staticmethod"},{"line_number":68,"context_line":"    def create_tap_flows(attrs\u003dNone, count\u003d1):"},{"line_number":69,"context_line":"        \"\"\"Create multiple tap_flows."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        :param Dictionary attrs:"},{"line_number":72,"context_line":"            A dictionary with all attributes"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_fc861e66","line":69,"range":{"start_line":69,"start_character":27,"end_line":69,"end_character":36},"in_reply_to":"9fdfeff1_20481385","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        tap_flows \u003d []"},{"line_number":79,"context_line":"        for i in range(0, count):"},{"line_number":80,"context_line":"            tap_flow \u003d tap_flows.append(FakeTapFlow.create_tap_flow(attrs))"},{"line_number":81,"context_line":"        tap_flows.append(tap_flow)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        return {\u0027tap_flows\u0027: tap_flows}"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_6037fb00","line":81,"updated":"2019-01-31 03:58:11.000000000","message":"Consider:\n\n  tap_flows \u003d [FakeTapFlow.create_tap_flow(attrs) for i in range(count)]\n\nNote that you don\u0027t need to pass 0 to range(). range(N) is enough.","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        tap_flows \u003d []"},{"line_number":79,"context_line":"        for i in range(0, count):"},{"line_number":80,"context_line":"            tap_flow \u003d tap_flows.append(FakeTapFlow.create_tap_flow(attrs))"},{"line_number":81,"context_line":"        tap_flows.append(tap_flow)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        return {\u0027tap_flows\u0027: tap_flows}"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_5cb2ca4a","line":81,"in_reply_to":"9fdfeff1_6037fb00","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        :return:"},{"line_number":124,"context_line":"            A list of dictionaries faking the tap_services"},{"line_number":125,"context_line":"        \"\"\""},{"line_number":126,"context_line":"        tap_services \u003d []"},{"line_number":127,"context_line":"        for i in range(0, count):"},{"line_number":128,"context_line":"            tap_service \u003d tap_services.append("},{"line_number":129,"context_line":"                FakeTapService.create_tap_service(attrs))"},{"line_number":130,"context_line":"        tap_services.append(tap_service)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        return {\u0027tap_services\u0027: tap_services}"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_c027c7c9","line":130,"range":{"start_line":126,"start_character":8,"end_line":130,"end_character":40},"updated":"2019-01-31 03:58:11.000000000","message":"same as above","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        :return:"},{"line_number":124,"context_line":"            A list of dictionaries faking the tap_services"},{"line_number":125,"context_line":"        \"\"\""},{"line_number":126,"context_line":"        tap_services \u003d []"},{"line_number":127,"context_line":"        for i in range(0, count):"},{"line_number":128,"context_line":"            tap_service \u003d tap_services.append("},{"line_number":129,"context_line":"                FakeTapService.create_tap_service(attrs))"},{"line_number":130,"context_line":"        tap_services.append(tap_service)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        return {\u0027tap_services\u0027: tap_services}"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_9cacb2ed","line":130,"range":{"start_line":126,"start_character":8,"end_line":130,"end_character":40},"in_reply_to":"9fdfeff1_c027c7c9","updated":"2019-02-01 15:39:22.000000000","message":"Done","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"}],"neutronclient/tests/unit/osc/v2/taas/test_tap_flow.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        self.assertEqual(self.columns, columns)"},{"line_number":178,"context_line":"        self.assertEqual(self.data, data)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def test_create_tap_flow_all_options(self):"},{"line_number":181,"context_line":"        self._test_create_tap_flow_all_options()"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_create_tap_flow_all_options_mpls(self):"},{"line_number":184,"context_line":"        self._test_create_tap_flow_all_options()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"class TestDeleteTapFlow(fakes.TestNeutronClientOSCV2):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_00138f67","line":184,"range":{"start_line":180,"start_character":3,"end_line":184,"end_character":48},"updated":"2019-01-31 03:58:11.000000000","message":"These two calls the same method. What is the difference?","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        self.assertEqual(self.columns, columns)"},{"line_number":178,"context_line":"        self.assertEqual(self.data, data)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def test_create_tap_flow_all_options(self):"},{"line_number":181,"context_line":"        self._test_create_tap_flow_all_options()"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_create_tap_flow_all_options_mpls(self):"},{"line_number":184,"context_line":"        self._test_create_tap_flow_all_options()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"class TestDeleteTapFlow(fakes.TestNeutronClientOSCV2):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_9cda7275","line":184,"range":{"start_line":180,"start_character":3,"end_line":184,"end_character":48},"in_reply_to":"9fdfeff1_00138f67","updated":"2019-02-01 15:39:22.000000000","message":"This is by mistake. Will remove the duplicate case.","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"}],"neutronclient/tests/unit/osc/v2/taas/test_tap_service.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6847768f31f6f6d155cf38c7a7c1e0ce050b1bc3","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.assertEqual(self.columns, columns)"},{"line_number":148,"context_line":"        self.assertEqual(self.data, data)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def test_create_tap_service_all_options(self):"},{"line_number":151,"context_line":"        self._test_create_tap_service_all_options()"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def test_create_tap_service_all_options_mpls(self):"},{"line_number":154,"context_line":"        self._test_create_tap_service_all_options()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"class TestDeleteTapService(fakes.TestNeutronClientOSCV2):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_6305c510","line":154,"range":{"start_line":150,"start_character":3,"end_line":154,"end_character":51},"updated":"2019-01-31 03:58:11.000000000","message":"What is the difference of these two tests?","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"852d4698c1097ea3e6d025a0921d9657d5ec8fed","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.assertEqual(self.columns, columns)"},{"line_number":148,"context_line":"        self.assertEqual(self.data, data)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def test_create_tap_service_all_options(self):"},{"line_number":151,"context_line":"        self._test_create_tap_service_all_options()"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def test_create_tap_service_all_options_mpls(self):"},{"line_number":154,"context_line":"        self._test_create_tap_service_all_options()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"class TestDeleteTapService(fakes.TestNeutronClientOSCV2):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_bcf17603","line":154,"range":{"start_line":150,"start_character":3,"end_line":154,"end_character":51},"in_reply_to":"9fdfeff1_6305c510","updated":"2019-02-01 15:39:22.000000000","message":"This is by mistake. Will remove the duplicate case.","commit_id":"27f252a98d6e45c1256c4988ffb168469bf99d6a"}],"neutronclient/v2_0/client.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d3aa51e9b796e6d7bb64b71d85874f14045e2657","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation."},{"line_number":2,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# Copyright 2017 FUJITSU LIMITED"},{"line_number":4,"context_line":"# Copyright 2018 AT\u0026T Intellectual Property."},{"line_number":5,"context_line":"# All Rights Reserved"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_28b7473d","line":4,"range":{"start_line":4,"start_character":12,"end_line":4,"end_character":16},"updated":"2019-10-02 21:41:32.000000000","message":"nit: shouldn\u0027t be 2019?","commit_id":"fcebe2e71bf439ca7f72851b14ed84597df4c6bb"},{"author":{"_account_id":27589,"name":"Deepak Tiwari","email":"deepak.tiwari@aricent.com","username":"deepak.tiwari"},"change_message_id":"c3668a63684c52ed72606872fd7a1ec2bf12eb8b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation."},{"line_number":2,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# Copyright 2017 FUJITSU LIMITED"},{"line_number":4,"context_line":"# Copyright 2018 AT\u0026T Intellectual Property."},{"line_number":5,"context_line":"# All Rights Reserved"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_e6038172","line":4,"range":{"start_line":4,"start_character":12,"end_line":4,"end_character":16},"in_reply_to":"3fa7e38b_28b7473d","updated":"2019-10-04 15:29:43.000000000","message":"we started last year so this comment was added since then. Will update it....","commit_id":"fcebe2e71bf439ca7f72851b14ed84597df4c6bb"}]}
