)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"62c5b45a96f4cdba84f45b65902c1ca2ef25bf1e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"number is specified it retains the older behavior and checks"},{"line_number":15,"context_line":"only if it is within the range."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This patch is dependent on"},{"line_number":18,"context_line":"https://review.openstack.org/#/c/252155/"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: If4ad684e961433b8d9d3ec8fe2810585d3f6a093"},{"line_number":21,"context_line":"Depends-On: Ib6aa468673af304f6a7328531eb290e4c4fecdb7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7af24918_2843246e","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":40},"updated":"2016-03-04 20:41:54.000000000","message":"Why does this need to be specified explicitly here?","commit_id":"7421c91dbf72f5a72a58d4d38617f3848abfdcfe"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"0fcebe11e4b86a446d7733296549e7839cbf9cad","unresolved":false,"context_lines":[{"line_number":14,"context_line":"number is specified it retains the older behavior and checks"},{"line_number":15,"context_line":"only if it is within the range."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This patch is dependent on"},{"line_number":18,"context_line":"https://review.openstack.org/#/c/252155/"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: If4ad684e961433b8d9d3ec8fe2810585d3f6a093"},{"line_number":21,"context_line":"Depends-On: Ib6aa468673af304f6a7328531eb290e4c4fecdb7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5aef4532_d20f8486","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":40},"in_reply_to":"7af24918_2843246e","updated":"2016-03-08 15:16:53.000000000","message":"Done. Removed.","commit_id":"7421c91dbf72f5a72a58d4d38617f3848abfdcfe"}],"neutron/common/constants.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0bdf678a4cb983e502b02aa9daa3a9b6edf50a31","unresolved":false,"context_lines":[{"line_number":169,"context_line":"PROTO_NUM_UDPLITE \u003d 136"},{"line_number":170,"context_line":"PROTO_NUM_VRRP \u003d 112"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"IP_PROTOCOL_MAP \u003d {PROTO_NAME_AH: PROTO_NUM_AH,"},{"line_number":173,"context_line":"                   PROTO_NAME_DCCP: PROTO_NUM_DCCP,"},{"line_number":174,"context_line":"                   PROTO_NAME_EGP: PROTO_NUM_EGP,"},{"line_number":175,"context_line":"                   PROTO_NAME_ESP: PROTO_NUM_ESP,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_12b7093b","line":172,"updated":"2016-01-23 05:04:00.000000000","message":"How about renaming this to IP_PROTOCOL_NAME_TO_NUM_MAP","commit_id":"418ef9f43bb1a5801871efb3bcf1410ab996f1b4"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"382101df7677c1a2a2d5b98215bc93dd114b3282","unresolved":false,"context_lines":[{"line_number":169,"context_line":"PROTO_NUM_UDPLITE \u003d 136"},{"line_number":170,"context_line":"PROTO_NUM_VRRP \u003d 112"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"IP_PROTOCOL_MAP \u003d {PROTO_NAME_AH: PROTO_NUM_AH,"},{"line_number":173,"context_line":"                   PROTO_NAME_DCCP: PROTO_NUM_DCCP,"},{"line_number":174,"context_line":"                   PROTO_NAME_EGP: PROTO_NUM_EGP,"},{"line_number":175,"context_line":"                   PROTO_NAME_ESP: PROTO_NUM_ESP,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_f461e6d3","line":172,"in_reply_to":"9a68dd71_12b7093b","updated":"2016-01-25 05:07:28.000000000","message":"Should I do this?; During earlier reviews with other patches some reviewers have come back to me asking not to make mods outside of what I am doing :-). If that\u0027s fine, I\u0027ll do it with a subsequent patch.","commit_id":"418ef9f43bb1a5801871efb3bcf1410ab996f1b4"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"c14f2582590d08dca38f8d91225ca2be7f879131","unresolved":false,"context_lines":[{"line_number":169,"context_line":"PROTO_NUM_UDPLITE \u003d 136"},{"line_number":170,"context_line":"PROTO_NUM_VRRP \u003d 112"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"IP_PROTOCOL_MAP \u003d {PROTO_NAME_AH: PROTO_NUM_AH,"},{"line_number":173,"context_line":"                   PROTO_NAME_DCCP: PROTO_NUM_DCCP,"},{"line_number":174,"context_line":"                   PROTO_NAME_EGP: PROTO_NUM_EGP,"},{"line_number":175,"context_line":"                   PROTO_NAME_ESP: PROTO_NUM_ESP,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_1e2a9490","line":172,"in_reply_to":"9a68dd71_3471be0f","updated":"2016-01-25 07:51:24.000000000","message":"Done","commit_id":"418ef9f43bb1a5801871efb3bcf1410ab996f1b4"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"208733c0509490cd0f63d3493bc1209e8d6dea17","unresolved":false,"context_lines":[{"line_number":169,"context_line":"PROTO_NUM_UDPLITE \u003d 136"},{"line_number":170,"context_line":"PROTO_NUM_VRRP \u003d 112"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"IP_PROTOCOL_MAP \u003d {PROTO_NAME_AH: PROTO_NUM_AH,"},{"line_number":173,"context_line":"                   PROTO_NAME_DCCP: PROTO_NUM_DCCP,"},{"line_number":174,"context_line":"                   PROTO_NAME_EGP: PROTO_NUM_EGP,"},{"line_number":175,"context_line":"                   PROTO_NAME_ESP: PROTO_NUM_ESP,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_3471be0f","line":172,"in_reply_to":"9a68dd71_f461e6d3","updated":"2016-01-25 05:27:37.000000000","message":"Do write a comment for both the Maps , as to what they are doing.\nSo that even if the name of this map is not changed, any new/future developer can understand what is happening here","commit_id":"418ef9f43bb1a5801871efb3bcf1410ab996f1b4"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0bdf678a4cb983e502b02aa9daa3a9b6edf50a31","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                   PROTO_NAME_UDPLITE: PROTO_NUM_UDPLITE,"},{"line_number":192,"context_line":"                   PROTO_NAME_VRRP: PROTO_NUM_VRRP}"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"IP_PROTOCOL_MAP_REV \u003d {PROTO_NUM_AH: PROTO_NAME_AH,"},{"line_number":195,"context_line":"                       PROTO_NUM_DCCP: PROTO_NAME_DCCP,"},{"line_number":196,"context_line":"                       PROTO_NUM_EGP: PROTO_NAME_EGP,"},{"line_number":197,"context_line":"                       PROTO_NUM_ESP: PROTO_NAME_ESP,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_32b48d33","line":194,"updated":"2016-01-23 05:04:00.000000000","message":"How about renaming this to IP_PROTOCOL_NUM_TO_NAME_MAP","commit_id":"418ef9f43bb1a5801871efb3bcf1410ab996f1b4"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"382101df7677c1a2a2d5b98215bc93dd114b3282","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                   PROTO_NAME_UDPLITE: PROTO_NUM_UDPLITE,"},{"line_number":192,"context_line":"                   PROTO_NAME_VRRP: PROTO_NUM_VRRP}"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"IP_PROTOCOL_MAP_REV \u003d {PROTO_NUM_AH: PROTO_NAME_AH,"},{"line_number":195,"context_line":"                       PROTO_NUM_DCCP: PROTO_NAME_DCCP,"},{"line_number":196,"context_line":"                       PROTO_NUM_EGP: PROTO_NAME_EGP,"},{"line_number":197,"context_line":"                       PROTO_NUM_ESP: PROTO_NAME_ESP,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_74089628","line":194,"in_reply_to":"9a68dd71_32b48d33","updated":"2016-01-25 05:07:28.000000000","message":"Done","commit_id":"418ef9f43bb1a5801871efb3bcf1410ab996f1b4"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"62c5b45a96f4cdba84f45b65902c1ca2ef25bf1e","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                   PROTO_NAME_VRRP: PROTO_NUM_VRRP}"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"# Protocol number to name map"},{"line_number":201,"context_line":"IP_PROTOCOL_NUM_TO_NAME_MAP \u003d {PROTO_NUM_AH: PROTO_NAME_AH,"},{"line_number":202,"context_line":"                               PROTO_NUM_DCCP: PROTO_NAME_DCCP,"},{"line_number":203,"context_line":"                               PROTO_NUM_EGP: PROTO_NAME_EGP,"},{"line_number":204,"context_line":"                               PROTO_NUM_ESP: PROTO_NAME_ESP,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7af24918_bb50200c","line":201,"range":{"start_line":201,"start_character":0,"end_line":201,"end_character":27},"updated":"2016-03-04 20:41:54.000000000","message":"This can be created using a dict comprehension to avoid duplication:\n\n  IP_PROTOCOL_NUM_TO_NAME_MAP \u003d {\n      v: k for k, v in IP_PROTOCOL_MAP.items()}","commit_id":"7421c91dbf72f5a72a58d4d38617f3848abfdcfe"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"0fcebe11e4b86a446d7733296549e7839cbf9cad","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                   PROTO_NAME_VRRP: PROTO_NUM_VRRP}"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"# Protocol number to name map"},{"line_number":201,"context_line":"IP_PROTOCOL_NUM_TO_NAME_MAP \u003d {PROTO_NUM_AH: PROTO_NAME_AH,"},{"line_number":202,"context_line":"                               PROTO_NUM_DCCP: PROTO_NAME_DCCP,"},{"line_number":203,"context_line":"                               PROTO_NUM_EGP: PROTO_NAME_EGP,"},{"line_number":204,"context_line":"                               PROTO_NUM_ESP: PROTO_NAME_ESP,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_32550850","line":201,"range":{"start_line":201,"start_character":0,"end_line":201,"end_character":27},"in_reply_to":"7af24918_bb50200c","updated":"2016-03-08 15:16:53.000000000","message":"Done","commit_id":"7421c91dbf72f5a72a58d4d38617f3848abfdcfe"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"62c5b45a96f4cdba84f45b65902c1ca2ef25bf1e","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"# Protocol number to name map"},{"line_number":201,"context_line":"IP_PROTOCOL_NUM_TO_NAME_MAP \u003d {PROTO_NUM_AH: PROTO_NAME_AH,"},{"line_number":202,"context_line":"                               PROTO_NUM_DCCP: PROTO_NAME_DCCP,"},{"line_number":203,"context_line":"                               PROTO_NUM_EGP: PROTO_NAME_EGP,"},{"line_number":204,"context_line":"                               PROTO_NUM_ESP: PROTO_NAME_ESP,"},{"line_number":205,"context_line":"                               PROTO_NUM_GRE: PROTO_NAME_GRE,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7af24918_5be63c17","line":202,"updated":"2016-03-04 20:41:54.000000000","message":"Should this also be added to neutron-lib?","commit_id":"7421c91dbf72f5a72a58d4d38617f3848abfdcfe"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"0fcebe11e4b86a446d7733296549e7839cbf9cad","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"# Protocol number to name map"},{"line_number":201,"context_line":"IP_PROTOCOL_NUM_TO_NAME_MAP \u003d {PROTO_NUM_AH: PROTO_NAME_AH,"},{"line_number":202,"context_line":"                               PROTO_NUM_DCCP: PROTO_NAME_DCCP,"},{"line_number":203,"context_line":"                               PROTO_NUM_EGP: PROTO_NAME_EGP,"},{"line_number":204,"context_line":"                               PROTO_NUM_ESP: PROTO_NAME_ESP,"},{"line_number":205,"context_line":"                               PROTO_NUM_GRE: PROTO_NAME_GRE,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_92ca1c19","line":202,"in_reply_to":"7af24918_5be63c17","updated":"2016-03-08 15:16:53.000000000","message":"It is just for cross validation purposes!","commit_id":"7421c91dbf72f5a72a58d4d38617f3848abfdcfe"}],"neutron/db/securitygroups_db.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"85956cd55822930078b580095f0c8cd1f9388c57","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            protocol \u003d constants.IP_PROTOCOL_NAME_ALIASES[protocol]"},{"line_number":425,"context_line":"        return int(constants.IP_PROTOCOL_MAP.get(protocol, protocol))"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _get_ip_proto_name_and_num(self, protocol):"},{"line_number":428,"context_line":"        if protocol is None:"},{"line_number":429,"context_line":"            return"},{"line_number":430,"context_line":"        return [str(constants.IP_PROTOCOL_MAP.get(protocol, protocol)),"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_0aa2ee4a","line":427,"range":{"start_line":427,"start_character":8,"end_line":427,"end_character":34},"updated":"2016-03-24 02:32:23.000000000","message":"I can\u0027t help but notice that this returns [\u003cnum\u003e, \u003cname\u003e]  but the name leads me to believe it should return [\u003cname\u003e, \u003cnum\u003e]","commit_id":"4b7a657608da10034505ac543f5e6a5a0d54a954"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"29e64987f5dbfd4850123b4a78452aff9bb96dc9","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            protocol \u003d constants.IP_PROTOCOL_NAME_ALIASES[protocol]"},{"line_number":425,"context_line":"        return int(constants.IP_PROTOCOL_MAP.get(protocol, protocol))"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _get_ip_proto_name_and_num(self, protocol):"},{"line_number":428,"context_line":"        if protocol is None:"},{"line_number":429,"context_line":"            return"},{"line_number":430,"context_line":"        return [str(constants.IP_PROTOCOL_MAP.get(protocol, protocol)),"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_a3879ab3","line":427,"range":{"start_line":427,"start_character":8,"end_line":427,"end_character":34},"in_reply_to":"fa0719c6_0aa2ee4a","updated":"2016-03-24 10:58:44.000000000","message":"Done","commit_id":"4b7a657608da10034505ac543f5e6a5a0d54a954"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"85956cd55822930078b580095f0c8cd1f9388c57","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    def _get_ip_proto_name_and_num(self, protocol):"},{"line_number":428,"context_line":"        if protocol is None:"},{"line_number":429,"context_line":"            return"},{"line_number":430,"context_line":"        return [str(constants.IP_PROTOCOL_MAP.get(protocol, protocol)),"},{"line_number":431,"context_line":"                constants.IP_PROTOCOL_NUM_TO_NAME_MAP.get(protocol, protocol)]"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def _validate_port_range(self, rule):"},{"line_number":434,"context_line":"        \"\"\"Check that port_range is valid.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_6add6adf","line":431,"range":{"start_line":430,"start_character":15,"end_line":431,"end_character":78},"updated":"2016-03-24 02:32:23.000000000","message":"nit:  I get this.  But, I\u0027m a big fan of code that is readable.  I wouldn\u0027t require it, but consider something like this as an alternative (I reversed name and num per my comment on L427):\n\n  protocol \u003d str(protocol)\n  if protocol in constants.IP_PROTOCOL_MAP:\n      return [protocol, constants.IP_PROTOCOL_MAP[protocol]]\n  elif protocol in constants.IP_PROTOCOL_NUM_TO_NAME_MAP:\n      return [constants.IP_PROTOCOL_NUM_TO_NAME_MAP[protocol], protocol]\n  return [protocol, protocol]","commit_id":"4b7a657608da10034505ac543f5e6a5a0d54a954"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"29e64987f5dbfd4850123b4a78452aff9bb96dc9","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    def _get_ip_proto_name_and_num(self, protocol):"},{"line_number":428,"context_line":"        if protocol is None:"},{"line_number":429,"context_line":"            return"},{"line_number":430,"context_line":"        return [str(constants.IP_PROTOCOL_MAP.get(protocol, protocol)),"},{"line_number":431,"context_line":"                constants.IP_PROTOCOL_NUM_TO_NAME_MAP.get(protocol, protocol)]"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def _validate_port_range(self, rule):"},{"line_number":434,"context_line":"        \"\"\"Check that port_range is valid.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_43bf9e60","line":431,"range":{"start_line":430,"start_character":15,"end_line":431,"end_character":78},"in_reply_to":"fa0719c6_6add6adf","updated":"2016-03-24 10:58:44.000000000","message":"Done. Expanded logic is much easier to follow. Also order is preserved [name, num].","commit_id":"4b7a657608da10034505ac543f5e6a5a0d54a954"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"85956cd55822930078b580095f0c8cd1f9388c57","unresolved":false,"context_lines":[{"line_number":586,"context_line":"                security_group_rule[\u0027security_group_rule\u0027].pop(\u0027protocol\u0027,"},{"line_number":587,"context_line":"                                                               None))"},{"line_number":588,"context_line":"            is_protocol_matching \u003d ("},{"line_number":589,"context_line":"                (db_protocol \u003d\u003d sg_protocol) or"},{"line_number":590,"context_line":"                (str(constants.IP_PROTOCOL_MAP.get(db_protocol,"},{"line_number":591,"context_line":"                                                   db_protocol)) \u003d\u003d"},{"line_number":592,"context_line":"                 str(constants.IP_PROTOCOL_MAP.get(sg_protocol,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_d23f0cb2","line":589,"range":{"start_line":589,"start_character":16,"end_line":589,"end_character":44},"updated":"2016-03-24 02:32:23.000000000","message":"nit:  Isn\u0027t this redundant?","commit_id":"4b7a657608da10034505ac543f5e6a5a0d54a954"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"85956cd55822930078b580095f0c8cd1f9388c57","unresolved":false,"context_lines":[{"line_number":587,"context_line":"                                                               None))"},{"line_number":588,"context_line":"            is_protocol_matching \u003d ("},{"line_number":589,"context_line":"                (db_protocol \u003d\u003d sg_protocol) or"},{"line_number":590,"context_line":"                (str(constants.IP_PROTOCOL_MAP.get(db_protocol,"},{"line_number":591,"context_line":"                                                   db_protocol)) \u003d\u003d"},{"line_number":592,"context_line":"                 str(constants.IP_PROTOCOL_MAP.get(sg_protocol,"},{"line_number":593,"context_line":"                                                   sg_protocol))))"},{"line_number":594,"context_line":"            if (is_protocol_matching and"},{"line_number":595,"context_line":"                security_group_rule[\u0027security_group_rule\u0027] \u003d\u003d db_rule):"},{"line_number":596,"context_line":"                raise ext_sg.SecurityGroupRuleExists(rule_id\u003drule_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_ca3756fd","line":593,"range":{"start_line":590,"start_character":17,"end_line":593,"end_character":65},"updated":"2016-03-24 02:32:23.000000000","message":"I\u0027d recommend reusing _get_ip_proto_name_and_num here instead of using this str(MAP.get(protocol, protocol)) stuff.\n\n  is_protocol_matching \u003d (\n      self._get_ip_proto_name_and_num(db_protocol) \u003d\u003d\n      self._get_ip_proto_name_and_num(sg_protocol))","commit_id":"4b7a657608da10034505ac543f5e6a5a0d54a954"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"29e64987f5dbfd4850123b4a78452aff9bb96dc9","unresolved":false,"context_lines":[{"line_number":587,"context_line":"                                                               None))"},{"line_number":588,"context_line":"            is_protocol_matching \u003d ("},{"line_number":589,"context_line":"                (db_protocol \u003d\u003d sg_protocol) or"},{"line_number":590,"context_line":"                (str(constants.IP_PROTOCOL_MAP.get(db_protocol,"},{"line_number":591,"context_line":"                                                   db_protocol)) \u003d\u003d"},{"line_number":592,"context_line":"                 str(constants.IP_PROTOCOL_MAP.get(sg_protocol,"},{"line_number":593,"context_line":"                                                   sg_protocol))))"},{"line_number":594,"context_line":"            if (is_protocol_matching and"},{"line_number":595,"context_line":"                security_group_rule[\u0027security_group_rule\u0027] \u003d\u003d db_rule):"},{"line_number":596,"context_line":"                raise ext_sg.SecurityGroupRuleExists(rule_id\u003drule_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_4334befa","line":593,"range":{"start_line":590,"start_character":17,"end_line":593,"end_character":65},"in_reply_to":"fa0719c6_ca3756fd","updated":"2016-03-24 10:58:44.000000000","message":"Done","commit_id":"4b7a657608da10034505ac543f5e6a5a0d54a954"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"85956cd55822930078b580095f0c8cd1f9388c57","unresolved":false,"context_lines":[{"line_number":595,"context_line":"                security_group_rule[\u0027security_group_rule\u0027] \u003d\u003d db_rule):"},{"line_number":596,"context_line":"                raise ext_sg.SecurityGroupRuleExists(rule_id\u003drule_id)"},{"line_number":597,"context_line":"            # reinstate protocol field for further processing"},{"line_number":598,"context_line":"            if sg_protocol:"},{"line_number":599,"context_line":"                security_group_rule[\u0027security_group_rule\u0027][\u0027protocol\u0027] \u003d ("},{"line_number":600,"context_line":"                    sg_protocol)"},{"line_number":601,"context_line":""},{"line_number":602,"context_line":"    def _validate_ip_prefix(self, rule):"},{"line_number":603,"context_line":"        \"\"\"Check that a valid cidr was specified as remote_ip_prefix"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_78d6e128","line":600,"range":{"start_line":598,"start_character":12,"end_line":600,"end_character":32},"updated":"2016-03-24 02:32:23.000000000","message":"Do be really pedant, since security_group_rule was passed in as a parameter, you should probably reinstate the protocol field before L594 so that it is already done before you raise an exception.","commit_id":"4b7a657608da10034505ac543f5e6a5a0d54a954"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"29e64987f5dbfd4850123b4a78452aff9bb96dc9","unresolved":false,"context_lines":[{"line_number":595,"context_line":"                security_group_rule[\u0027security_group_rule\u0027] \u003d\u003d db_rule):"},{"line_number":596,"context_line":"                raise ext_sg.SecurityGroupRuleExists(rule_id\u003drule_id)"},{"line_number":597,"context_line":"            # reinstate protocol field for further processing"},{"line_number":598,"context_line":"            if sg_protocol:"},{"line_number":599,"context_line":"                security_group_rule[\u0027security_group_rule\u0027][\u0027protocol\u0027] \u003d ("},{"line_number":600,"context_line":"                    sg_protocol)"},{"line_number":601,"context_line":""},{"line_number":602,"context_line":"    def _validate_ip_prefix(self, rule):"},{"line_number":603,"context_line":"        \"\"\"Check that a valid cidr was specified as remote_ip_prefix"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_032f66a1","line":600,"range":{"start_line":598,"start_character":12,"end_line":600,"end_character":32},"in_reply_to":"fa0719c6_78d6e128","updated":"2016-03-24 10:58:44.000000000","message":"Done. Since there is comparison of rules, the field cannot be reinstated before that. So I refactored it slightly.","commit_id":"4b7a657608da10034505ac543f5e6a5a0d54a954"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c68fecf61b0fbec94a1f5de93b8439806d1bae75","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            protocol \u003d constants.IP_PROTOCOL_NAME_ALIASES[protocol]"},{"line_number":425,"context_line":"        return int(constants.IP_PROTOCOL_MAP.get(protocol, protocol))"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _get_ip_proto_name_and_num(self, protocol):"},{"line_number":428,"context_line":"        if protocol is None:"},{"line_number":429,"context_line":"            return None"},{"line_number":430,"context_line":"        protocol \u003d str(protocol)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_c78733b3","line":427,"updated":"2016-03-24 12:43:11.000000000","message":"where is this tested?","commit_id":"1bc03039eb2ce791cac6f61f21003e22f8c40983"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"3bdb0ac8dfc0129609422a226c9d492b2ad8025e","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            protocol \u003d constants.IP_PROTOCOL_NAME_ALIASES[protocol]"},{"line_number":425,"context_line":"        return int(constants.IP_PROTOCOL_MAP.get(protocol, protocol))"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _get_ip_proto_name_and_num(self, protocol):"},{"line_number":428,"context_line":"        if protocol is None:"},{"line_number":429,"context_line":"            return None"},{"line_number":430,"context_line":"        protocol \u003d str(protocol)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da0c15f0_62742cfd","line":427,"in_reply_to":"fa0719c6_c78733b3","updated":"2016-03-24 18:09:27.000000000","message":"Done. Added new test case to test this.","commit_id":"1bc03039eb2ce791cac6f61f21003e22f8c40983"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c68fecf61b0fbec94a1f5de93b8439806d1bae75","unresolved":false,"context_lines":[{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _get_ip_proto_name_and_num(self, protocol):"},{"line_number":428,"context_line":"        if protocol is None:"},{"line_number":429,"context_line":"            return None"},{"line_number":430,"context_line":"        protocol \u003d str(protocol)"},{"line_number":431,"context_line":"        if protocol in constants.IP_PROTOCOL_MAP:"},{"line_number":432,"context_line":"            return [protocol, str(constants.IP_PROTOCOL_MAP.get(protocol))]"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_e7deb7db","line":429,"updated":"2016-03-24 12:43:11.000000000","message":"you do not need the None here","commit_id":"1bc03039eb2ce791cac6f61f21003e22f8c40983"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"3bdb0ac8dfc0129609422a226c9d492b2ad8025e","unresolved":false,"context_lines":[{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _get_ip_proto_name_and_num(self, protocol):"},{"line_number":428,"context_line":"        if protocol is None:"},{"line_number":429,"context_line":"            return None"},{"line_number":430,"context_line":"        protocol \u003d str(protocol)"},{"line_number":431,"context_line":"        if protocol in constants.IP_PROTOCOL_MAP:"},{"line_number":432,"context_line":"            return [protocol, str(constants.IP_PROTOCOL_MAP.get(protocol))]"}],"source_content_type":"text/x-python","patch_set":13,"id":"da0c15f0_e2d5dcb9","line":429,"in_reply_to":"fa0719c6_e7deb7db","updated":"2016-03-24 18:09:27.000000000","message":"Done. I added this to make it more explicit. Removed now.","commit_id":"1bc03039eb2ce791cac6f61f21003e22f8c40983"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c68fecf61b0fbec94a1f5de93b8439806d1bae75","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        for key in include_if_present:"},{"line_number":550,"context_line":"            value \u003d sgr.get(key)"},{"line_number":551,"context_line":"            if value:"},{"line_number":552,"context_line":"                if key \u003d\u003d \u0027protocol\u0027:"},{"line_number":553,"context_line":"                    res[key] \u003d self._get_ip_proto_name_and_num(value)"},{"line_number":554,"context_line":"                else:"},{"line_number":555,"context_line":"                    res[key] \u003d [value]"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_e78cf7db","line":552,"updated":"2016-03-24 12:43:11.000000000","message":"this is really ugly for each iteration of the loop we are checking if the key is protocol. Why not just take this case out of the loop?","commit_id":"1bc03039eb2ce791cac6f61f21003e22f8c40983"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"3bdb0ac8dfc0129609422a226c9d492b2ad8025e","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        for key in include_if_present:"},{"line_number":550,"context_line":"            value \u003d sgr.get(key)"},{"line_number":551,"context_line":"            if value:"},{"line_number":552,"context_line":"                if key \u003d\u003d \u0027protocol\u0027:"},{"line_number":553,"context_line":"                    res[key] \u003d self._get_ip_proto_name_and_num(value)"},{"line_number":554,"context_line":"                else:"},{"line_number":555,"context_line":"                    res[key] \u003d [value]"}],"source_content_type":"text/x-python","patch_set":13,"id":"da0c15f0_a2992422","line":552,"in_reply_to":"fa0719c6_e78cf7db","updated":"2016-03-24 18:09:27.000000000","message":"Yes, that\u0027s bad. Corrected.","commit_id":"1bc03039eb2ce791cac6f61f21003e22f8c40983"}],"neutron/extensions/securitygroup.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"62c5b45a96f4cdba84f45b65902c1ca2ef25bf1e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            # Set value of protocol number to string due to bug 1381379,"},{"line_number":149,"context_line":"            # PostgreSQL fails when it tries to compare integer with string,"},{"line_number":150,"context_line":"            # that exists in db."},{"line_number":151,"context_line":"            return const.IP_PROTOCOL_NUM_TO_NAME_MAP.get(val, str(value))"},{"line_number":152,"context_line":"        raise SecurityGroupRuleInvalidProtocol("},{"line_number":153,"context_line":"            protocol\u003dvalue, values\u003dsg_supported_protocols)"},{"line_number":154,"context_line":"    except (ValueError, TypeError):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7af24918_dbdb6c20","line":151,"range":{"start_line":151,"start_character":19,"end_line":151,"end_character":52},"updated":"2016-03-04 20:41:54.000000000","message":"Will this now store protocols by name where it storing number before?\n\nI might be missing something here but might we already have these stored in the DB as numbers?  This converts known ones to name which might not match the number stored in the DB.  Wouldn\u0027t we have the same problem allowing duplicates depending on what is the in the DB before upgrade?\n\nIt seems we need to be consistent about what we store in the DB, the name or the number.  And, it seems that will need a migration to make it all uniform.  Since protocol names seem to have been added over time, I\u0027d strongly prefer standardizing on storing the number.","commit_id":"7421c91dbf72f5a72a58d4d38617f3848abfdcfe"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"22ca32729d6fe85a64213d473f3f0844fcbbbc8c","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            # Set value of protocol number to string due to bug 1381379,"},{"line_number":149,"context_line":"            # PostgreSQL fails when it tries to compare integer with string,"},{"line_number":150,"context_line":"            # that exists in db."},{"line_number":151,"context_line":"            return const.IP_PROTOCOL_NUM_TO_NAME_MAP.get(val, str(value))"},{"line_number":152,"context_line":"        raise SecurityGroupRuleInvalidProtocol("},{"line_number":153,"context_line":"            protocol\u003dvalue, values\u003dsg_supported_protocols)"},{"line_number":154,"context_line":"    except (ValueError, TypeError):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_8aa8be78","line":151,"range":{"start_line":151,"start_character":19,"end_line":151,"end_character":52},"in_reply_to":"5aef4532_d2eb0477","updated":"2016-03-23 23:24:19.000000000","message":"A separate patch is fine if at all.  Mostly I was just worried that we\u0027d end up with the same problem in some cases due to the opposite condition.","commit_id":"7421c91dbf72f5a72a58d4d38617f3848abfdcfe"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"0fcebe11e4b86a446d7733296549e7839cbf9cad","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            # Set value of protocol number to string due to bug 1381379,"},{"line_number":149,"context_line":"            # PostgreSQL fails when it tries to compare integer with string,"},{"line_number":150,"context_line":"            # that exists in db."},{"line_number":151,"context_line":"            return const.IP_PROTOCOL_NUM_TO_NAME_MAP.get(val, str(value))"},{"line_number":152,"context_line":"        raise SecurityGroupRuleInvalidProtocol("},{"line_number":153,"context_line":"            protocol\u003dvalue, values\u003dsg_supported_protocols)"},{"line_number":154,"context_line":"    except (ValueError, TypeError):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_d2eb0477","line":151,"range":{"start_line":151,"start_character":19,"end_line":151,"end_character":52},"in_reply_to":"7af24918_dbdb6c20","updated":"2016-03-08 15:16:53.000000000","message":"Done. To avoid all these issues I\u0027ve changed the validation so that both protocol name or number is validated when a new SG rule is created. This allows for the user to keep adding rules with either protocol number or name.\n\nMay be the standardization in DB needs to be picked up as a separate issue and patch???","commit_id":"7421c91dbf72f5a72a58d4d38617f3848abfdcfe"}],"neutron/tests/api/test_security_groups.py":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"6387feb1c763f83dca5a1c472569fd062746718c","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        )"},{"line_number":238,"context_line":"        sec_group_rule \u003d rule_create_body[\u0027security_group_rule\u0027]"},{"line_number":239,"context_line":"        self.assertEqual(sec_group_rule[\u0027direction\u0027], direction)"},{"line_number":240,"context_line":"        self.assertEqual(sec_group_rule[\u0027protocol\u0027], const.PROTO_NAME_UDP)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"class SecGroupIPv6Test(SecGroupTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_ade68cad","line":240,"range":{"start_line":240,"start_character":8,"end_line":240,"end_character":74},"updated":"2016-02-02 06:46:19.000000000","message":"nit: Can you use the pattern \"self.assertEqual(expected, observed)\" although I understand it\u0027s not related to this patch? And also L239.","commit_id":"0bc13dae0ffcec392f908e331668262bc7a63ce7"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"0232d558c2537b85e939acc80a4665f1c89145b4","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        )"},{"line_number":238,"context_line":"        sec_group_rule \u003d rule_create_body[\u0027security_group_rule\u0027]"},{"line_number":239,"context_line":"        self.assertEqual(sec_group_rule[\u0027direction\u0027], direction)"},{"line_number":240,"context_line":"        self.assertEqual(sec_group_rule[\u0027protocol\u0027], const.PROTO_NAME_UDP)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"class SecGroupIPv6Test(SecGroupTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_0bc228e9","line":240,"range":{"start_line":240,"start_character":8,"end_line":240,"end_character":74},"in_reply_to":"7a5de9d1_ade68cad","updated":"2016-02-02 07:47:30.000000000","message":"Done","commit_id":"0bc13dae0ffcec392f908e331668262bc7a63ce7"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"62c5b45a96f4cdba84f45b65902c1ca2ef25bf1e","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            protocol\u003dprotocol"},{"line_number":237,"context_line":"        )"},{"line_number":238,"context_line":"        sec_group_rule \u003d rule_create_body[\u0027security_group_rule\u0027]"},{"line_number":239,"context_line":"        self.assertEqual(direction, sec_group_rule[\u0027direction\u0027])"},{"line_number":240,"context_line":"        self.assertEqual(const.PROTO_NAME_UDP, sec_group_rule[\u0027protocol\u0027])"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7af24918_fb44681c","line":239,"range":{"start_line":239,"start_character":25,"end_line":239,"end_character":34},"updated":"2016-03-04 20:41:54.000000000","message":"This change is strictly not related to this patch set.","commit_id":"7421c91dbf72f5a72a58d4d38617f3848abfdcfe"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"0fcebe11e4b86a446d7733296549e7839cbf9cad","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            protocol\u003dprotocol"},{"line_number":237,"context_line":"        )"},{"line_number":238,"context_line":"        sec_group_rule \u003d rule_create_body[\u0027security_group_rule\u0027]"},{"line_number":239,"context_line":"        self.assertEqual(direction, sec_group_rule[\u0027direction\u0027])"},{"line_number":240,"context_line":"        self.assertEqual(const.PROTO_NAME_UDP, sec_group_rule[\u0027protocol\u0027])"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_320d083f","line":239,"range":{"start_line":239,"start_character":25,"end_line":239,"end_character":34},"in_reply_to":"7af24918_fb44681c","updated":"2016-03-08 15:16:53.000000000","message":"Done","commit_id":"7421c91dbf72f5a72a58d4d38617f3848abfdcfe"}],"neutron/tests/unit/extensions/test_securitygroup.py":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"97604f1de6d85e3b90cb1912084353af6b69261e","unresolved":false,"context_lines":[{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"    def test_convert_numeric_protocol_to_protocol_type(self):"},{"line_number":1581,"context_line":"        res \u003d list(const.IP_PROTOCOL_MAP.keys()) +\\"},{"line_number":1582,"context_line":"            list(const.IP_PROTOCOL_MAP.keys())"},{"line_number":1583,"context_line":"        req \u003d [str(val) for val in const.IP_PROTOCOL_MAP.values()] +\\"},{"line_number":1584,"context_line":"            list(const.IP_PROTOCOL_MAP.values())"},{"line_number":1585,"context_line":"        for i, val in enumerate(req):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_da97e738","line":1582,"range":{"start_line":1582,"start_character":12,"end_line":1582,"end_character":46},"updated":"2016-02-02 14:19:32.000000000","message":"Anyway, I guess that we don\u0027t need to test this and L1584.","commit_id":"f32820258bbe50adebce4c77351ff9364079a0a3"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"695f42d537fea87283cd74a6e7e721e10bd055c8","unresolved":false,"context_lines":[{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"    def test_convert_numeric_protocol_to_protocol_type(self):"},{"line_number":1581,"context_line":"        res \u003d list(const.IP_PROTOCOL_MAP.keys()) +\\"},{"line_number":1582,"context_line":"            list(const.IP_PROTOCOL_MAP.keys())"},{"line_number":1583,"context_line":"        req \u003d [str(val) for val in const.IP_PROTOCOL_MAP.values()] +\\"},{"line_number":1584,"context_line":"            list(const.IP_PROTOCOL_MAP.values())"},{"line_number":1585,"context_line":"        for i, val in enumerate(req):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_290913de","line":1582,"range":{"start_line":1582,"start_character":12,"end_line":1582,"end_character":46},"in_reply_to":"7a5de9d1_1d625917","updated":"2016-02-02 15:28:10.000000000","message":"Do we need to test \"[str(val) for val in const.IP_PROTOCOL_MAP.values()]\" and \"list(const.IP_PROTOCOL_MAP.values())\" separately? I look almost the same.","commit_id":"f32820258bbe50adebce4c77351ff9364079a0a3"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"4e41e5ec59476fb36617f10925cb58e258066e5a","unresolved":false,"context_lines":[{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"    def test_convert_numeric_protocol_to_protocol_type(self):"},{"line_number":1581,"context_line":"        res \u003d list(const.IP_PROTOCOL_MAP.keys()) +\\"},{"line_number":1582,"context_line":"            list(const.IP_PROTOCOL_MAP.keys())"},{"line_number":1583,"context_line":"        req \u003d [str(val) for val in const.IP_PROTOCOL_MAP.values()] +\\"},{"line_number":1584,"context_line":"            list(const.IP_PROTOCOL_MAP.values())"},{"line_number":1585,"context_line":"        for i, val in enumerate(req):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_91a07f92","line":1582,"range":{"start_line":1582,"start_character":12,"end_line":1582,"end_character":46},"in_reply_to":"7a5de9d1_290913de","updated":"2016-02-03 04:37:56.000000000","message":"The way the parameter validation Is done, I believe it is required. Please see the ones above which tests it with str and int inputs.","commit_id":"f32820258bbe50adebce4c77351ff9364079a0a3"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"4e73be477664ca27117f8c79f0f502569b5f67b0","unresolved":false,"context_lines":[{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"    def test_convert_numeric_protocol_to_protocol_type(self):"},{"line_number":1581,"context_line":"        res \u003d list(const.IP_PROTOCOL_MAP.keys()) +\\"},{"line_number":1582,"context_line":"            list(const.IP_PROTOCOL_MAP.keys())"},{"line_number":1583,"context_line":"        req \u003d [str(val) for val in const.IP_PROTOCOL_MAP.values()] +\\"},{"line_number":1584,"context_line":"            list(const.IP_PROTOCOL_MAP.values())"},{"line_number":1585,"context_line":"        for i, val in enumerate(req):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_1d625917","line":1582,"range":{"start_line":1582,"start_character":12,"end_line":1582,"end_character":46},"in_reply_to":"7a5de9d1_da97e738","updated":"2016-02-02 14:38:45.000000000","message":"I didn\u0027t understand? Can you explain?","commit_id":"f32820258bbe50adebce4c77351ff9364079a0a3"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"97604f1de6d85e3b90cb1912084353af6b69261e","unresolved":false,"context_lines":[{"line_number":1583,"context_line":"        req \u003d [str(val) for val in const.IP_PROTOCOL_MAP.values()] +\\"},{"line_number":1584,"context_line":"            list(const.IP_PROTOCOL_MAP.values())"},{"line_number":1585,"context_line":"        for i, val in enumerate(req):"},{"line_number":1586,"context_line":"            self.assertEqual(ext_sg.convert_protocol(val), res[i])"},{"line_number":1587,"context_line":""},{"line_number":1588,"context_line":""},{"line_number":1589,"context_line":"class TestConvertEtherType(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_f7f67cf8","line":1586,"range":{"start_line":1586,"start_character":12,"end_line":1586,"end_character":66},"updated":"2016-02-02 14:19:32.000000000","message":"Sorry. I missed it. It\u0027s better to use self.assertEqual(res[i], ext_sg.convert_protocol(val))","commit_id":"f32820258bbe50adebce4c77351ff9364079a0a3"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"baf36d1cb7abfb679bb0ccdc8de90b422c84fadd","unresolved":false,"context_lines":[{"line_number":1583,"context_line":"        req \u003d [str(val) for val in const.IP_PROTOCOL_MAP.values()] +\\"},{"line_number":1584,"context_line":"            list(const.IP_PROTOCOL_MAP.values())"},{"line_number":1585,"context_line":"        for i, val in enumerate(req):"},{"line_number":1586,"context_line":"            self.assertEqual(ext_sg.convert_protocol(val), res[i])"},{"line_number":1587,"context_line":""},{"line_number":1588,"context_line":""},{"line_number":1589,"context_line":"class TestConvertEtherType(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_454bdd87","line":1586,"range":{"start_line":1586,"start_character":12,"end_line":1586,"end_character":66},"in_reply_to":"7a5de9d1_f7f67cf8","updated":"2016-02-04 07:47:48.000000000","message":"Done","commit_id":"f32820258bbe50adebce4c77351ff9364079a0a3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6630dd06dde23aafc245ed1747c81e212830d0dc","unresolved":false,"context_lines":[{"line_number":1578,"context_line":"        self.assertIsInstance(ext_sg.convert_protocol(2), str)"},{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"    def test_convert_numeric_protocol_to_protocol_type(self):"},{"line_number":1581,"context_line":"        res \u003d list(const.IP_PROTOCOL_MAP.keys()) +\\"},{"line_number":1582,"context_line":"            list(const.IP_PROTOCOL_MAP.keys())"},{"line_number":1583,"context_line":"        req \u003d [str(val) for val in const.IP_PROTOCOL_MAP.values()] +\\"},{"line_number":1584,"context_line":"            list(const.IP_PROTOCOL_MAP.values())"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_13c0c1df","line":1581,"updated":"2016-02-04 12:57:27.000000000","message":"For line continuation, use parenthesis, instead of backslash.","commit_id":"6076de6fb934c2dde63da4f1596129933f310e36"},{"author":{"_account_id":18289,"name":"Sreekumar S","email":"sreesiv@gmail.com","username":"sreesiv"},"change_message_id":"feff053efe7534c917a52b436104efbf4afab7b8","unresolved":false,"context_lines":[{"line_number":1578,"context_line":"        self.assertIsInstance(ext_sg.convert_protocol(2), str)"},{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"    def test_convert_numeric_protocol_to_protocol_type(self):"},{"line_number":1581,"context_line":"        res \u003d list(const.IP_PROTOCOL_MAP.keys()) +\\"},{"line_number":1582,"context_line":"            list(const.IP_PROTOCOL_MAP.keys())"},{"line_number":1583,"context_line":"        req \u003d [str(val) for val in const.IP_PROTOCOL_MAP.values()] +\\"},{"line_number":1584,"context_line":"            list(const.IP_PROTOCOL_MAP.values())"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_038cbdd8","line":1581,"in_reply_to":"5a5ae5dd_13c0c1df","updated":"2016-02-05 09:44:09.000000000","message":"Done","commit_id":"6076de6fb934c2dde63da4f1596129933f310e36"}]}
