)]}'
{"neutron/api/v2/attributes.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"afe842f56275610c684301a74d89d9b487daa759","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        return [data]"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"def convert_ip_prefix_cidr(ip_prefix\u003dNone):"},{"line_number":516,"context_line":"    if ip_prefix is None:"},{"line_number":517,"context_line":"        return"},{"line_number":518,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2F6SQ%3D","line":515,"updated":"2014-03-03 13:52:03.000000000","message":"convert_to_ip_prefix_cidr sounds better to me.","commit_id":"3cc5355f5053a81c4beb14820549f6b08f941366"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"34129cfb8a22318b50cf38c74692d02076287335","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        return [data]"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"def convert_ip_prefix_cidr(ip_prefix\u003dNone):"},{"line_number":516,"context_line":"    if ip_prefix is None:"},{"line_number":517,"context_line":"        return"},{"line_number":518,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2FtzI%3D","line":515,"in_reply_to":"AAAAVn%2F%2F6SQ%3D","updated":"2014-03-04 15:04:13.000000000","message":"Done \n(convert_ip_prefix_to_cidr)","commit_id":"3cc5355f5053a81c4beb14820549f6b08f941366"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"afe842f56275610c684301a74d89d9b487daa759","unresolved":false,"context_lines":[{"line_number":519,"context_line":"        cidr \u003d netaddr.IPNetwork(ip_prefix)"},{"line_number":520,"context_line":"        return str(cidr)"},{"line_number":521,"context_line":"    except netaddr.AddrFormatError:"},{"line_number":522,"context_line":"        raise q_exc.InvalidCIDR(input\u003dstr(ip_prefix))"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"HOSTNAME_PATTERN \u003d (\"(?\u003d^.{1,254}$)(^(?:(?!\\d+\\.|-)[a-zA-Z0-9_\\-]\""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2F6R8%3D","line":522,"updated":"2014-03-03 13:52:03.000000000","message":"Please add unit tests to cover this method.\nThough test_extension_security_group covers most of this method, I believe we should have test cases in the corresponding module (test_attributes for this case).","commit_id":"3cc5355f5053a81c4beb14820549f6b08f941366"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"34129cfb8a22318b50cf38c74692d02076287335","unresolved":false,"context_lines":[{"line_number":519,"context_line":"        cidr \u003d netaddr.IPNetwork(ip_prefix)"},{"line_number":520,"context_line":"        return str(cidr)"},{"line_number":521,"context_line":"    except netaddr.AddrFormatError:"},{"line_number":522,"context_line":"        raise q_exc.InvalidCIDR(input\u003dstr(ip_prefix))"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"HOSTNAME_PATTERN \u003d (\"(?\u003d^.{1,254}$)(^(?:(?!\\d+\\.|-)[a-zA-Z0-9_\\-]\""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2Fty8%3D","line":522,"in_reply_to":"AAAAVn%2F%2F6R8%3D","updated":"2014-03-04 15:04:13.000000000","message":"Done","commit_id":"3cc5355f5053a81c4beb14820549f6b08f941366"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"b6127beb7653350f224e28aad4125934adc8b0b7","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        return [data]"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"def convert_ip_prefix_to_cidr(ip_prefix\u003dNone):"},{"line_number":534,"context_line":"    if ip_prefix is None:"},{"line_number":535,"context_line":"        return"},{"line_number":536,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2B024%3D","line":533,"updated":"2014-03-24 00:36:58.000000000","message":"Looks like netaddr.IPNetwork works for ipv6 as well. Would it be worthwhile commenting on it?","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"1474e6401f45001b53b0b14b0fd98fd92a636478","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        return [data]"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"def convert_ip_prefix_to_cidr(ip_prefix\u003dNone):"},{"line_number":534,"context_line":"    if ip_prefix is None:"},{"line_number":535,"context_line":"        return"},{"line_number":536,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FW94%3D","line":533,"updated":"2014-03-18 11:58:46.000000000","message":"Why do you specify None as default value for ip_prefix? I\u0027d remove it","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        return [data]"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"def convert_ip_prefix_to_cidr(ip_prefix\u003dNone):"},{"line_number":534,"context_line":"    if ip_prefix is None:"},{"line_number":535,"context_line":"        return"},{"line_number":536,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BCb4%3D","line":533,"in_reply_to":"AAAAWH%2F%2B024%3D","updated":"2014-04-01 09:08:47.000000000","message":"sure will revisit the test cases","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        return [data]"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"def convert_ip_prefix_to_cidr(ip_prefix\u003dNone):"},{"line_number":534,"context_line":"    if ip_prefix is None:"},{"line_number":535,"context_line":"        return"},{"line_number":536,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FEn4%3D","line":533,"in_reply_to":"AAAAWH%2F%2FW94%3D","updated":"2014-04-01 09:08:47.000000000","message":"Done","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"45995007119d1ddf9377cba8bb2be11008916862","unresolved":false,"context_lines":[{"line_number":531,"context_line":""},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"def convert_ip_prefix_to_cidr(ip_prefix\u003dNone):"},{"line_number":534,"context_line":"    if ip_prefix is None:"},{"line_number":535,"context_line":"        return"},{"line_number":536,"context_line":"    try:"},{"line_number":537,"context_line":"        cidr \u003d netaddr.IPNetwork(ip_prefix)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FMMY%3D","line":534,"updated":"2014-03-19 15:44:45.000000000","message":"if not ip_prefix","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":531,"context_line":""},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"def convert_ip_prefix_to_cidr(ip_prefix\u003dNone):"},{"line_number":534,"context_line":"    if ip_prefix is None:"},{"line_number":535,"context_line":"        return"},{"line_number":536,"context_line":"    try:"},{"line_number":537,"context_line":"        cidr \u003d netaddr.IPNetwork(ip_prefix)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BClA%3D","line":534,"in_reply_to":"AAAAWH%2F%2FMMY%3D","updated":"2014-04-01 09:08:47.000000000","message":"Done","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"1474e6401f45001b53b0b14b0fd98fd92a636478","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        cidr \u003d netaddr.IPNetwork(ip_prefix)"},{"line_number":538,"context_line":"        return str(cidr)"},{"line_number":539,"context_line":"    except netaddr.AddrFormatError:"},{"line_number":540,"context_line":"        raise n_exc.InvalidCIDR(input\u003dstr(ip_prefix))"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"HOSTNAME_PATTERN \u003d (\"(?\u003d^.{1,254}$)(^(?:(?!\\d+\\.|-)[a-zA-Z0-9_\\-]\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FW%2BE%3D","line":540,"updated":"2014-03-18 11:58:46.000000000","message":"I think str is unnecessary","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        cidr \u003d netaddr.IPNetwork(ip_prefix)"},{"line_number":538,"context_line":"        return str(cidr)"},{"line_number":539,"context_line":"    except netaddr.AddrFormatError:"},{"line_number":540,"context_line":"        raise n_exc.InvalidCIDR(input\u003dstr(ip_prefix))"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"HOSTNAME_PATTERN \u003d (\"(?\u003d^.{1,254}$)(^(?:(?!\\d+\\.|-)[a-zA-Z0-9_\\-]\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BCfU%3D","line":540,"in_reply_to":"AAAAWH%2F%2FW%2BE%3D","updated":"2014-04-01 09:08:47.000000000","message":"sure, though imo doesn\u0027t really cost anything to be explicit about what we pass into InvalidCIDR (as it is effectively expecting a string there)\n\n(done)\n\nEDIT: in looking at this I discovered the need to add str to the argument passed to netaddr.IPNetwork or you get a TypeError (unexpected type int, for example)\nfor line 537 above. will fix. thanks!","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":1119,"name":"Christoph Thiel","email":"ct@kki.org","username":"cthiel-suse"},"change_message_id":"decc04fb21fbc7a93f7519aae3da5a0ead884b69","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    if not ip_prefix:"},{"line_number":535,"context_line":"        return"},{"line_number":536,"context_line":"    try:"},{"line_number":537,"context_line":"        cidr \u003d netaddr.IPNetwork(str(ip_prefix))"},{"line_number":538,"context_line":"        return str(cidr)"},{"line_number":539,"context_line":"    except netaddr.AddrFormatError:"},{"line_number":540,"context_line":"        raise n_exc.InvalidCIDR(input\u003dip_prefix)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F94Sk%3D","line":537,"updated":"2014-04-01 13:37:32.000000000","message":"Is casting to str really needed here?","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"ba6c2ea94fe8a22da47d522a3a7dee941da7d747","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    if not ip_prefix:"},{"line_number":535,"context_line":"        return"},{"line_number":536,"context_line":"    try:"},{"line_number":537,"context_line":"        cidr \u003d netaddr.IPNetwork(str(ip_prefix))"},{"line_number":538,"context_line":"        return str(cidr)"},{"line_number":539,"context_line":"    except netaddr.AddrFormatError:"},{"line_number":540,"context_line":"        raise n_exc.InvalidCIDR(input\u003dip_prefix)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9yJQ%3D","line":537,"in_reply_to":"AAAAWH%2F94Sk%3D","updated":"2014-04-02 07:31:32.000000000","message":"imo, yes:\n\nIPNetwork expects addr to be string, tuple or object ( see http://pythonhosted.org//netaddr/api.html#netaddr.IPNetwork.__init__ )\n\nThis is about creation of a security group rule via the Neutron v2 API (security groups extension).  In this case I think we can exclude the \u0027object\u0027 case, and imo the \u0027tuple\u0027 case isn\u0027t so widely used. \n\nbut:\n\nThe alternative is to just pass the ip_prefix through as is and catch the TypeError. OK I guess this may be better, I will change to this for next revision.","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"e6335c5adc25538b320a051983039b58f0d69a33","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        return [data]"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"def convert_ip_prefix_to_cidr(ip_prefix):"},{"line_number":541,"context_line":"    if not ip_prefix:"},{"line_number":542,"context_line":"        return"},{"line_number":543,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2FORY%3D","line":540,"updated":"2014-04-16 00:05:52.000000000","message":"Please add a doc string with an example or two.\n\nAlso, this seems a little out of place.  This function isn\u0027t used in this file.  Other convert functions used in the security groups extension are defined in neutron/extensions/securitygroup.py.\n\nI guess this convert function could be more generically applicable but it isn\u0027t being used that way yet.\n\nWhat do you think?","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"db4b74a83707ca7b4648cf58b449fec227195f5f","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        return [data]"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"def convert_ip_prefix_to_cidr(ip_prefix):"},{"line_number":541,"context_line":"    if not ip_prefix:"},{"line_number":542,"context_line":"        return"},{"line_number":543,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAXH%2F%2F56s%3D","line":540,"in_reply_to":"AAAAW3%2F%2FORY%3D","updated":"2014-04-16 16:15:50.000000000","message":"thanks Carl. I think it\u0027s getting hard to remember/track down the history of an almost 5 month old review ;) it *was* initially in securitygroup.py but was moved after a review suggestion by Sylvain  ( v6 @ https://review.openstack.org/#/c/59212/6/neutron/extensions/securitygroup.py )  . I will move it back, I agree it makes more sense to be there.\n\nnot sure what value a docstring brings here though. This will take the input, and invoke netaddr.IPNetwork on it, catching exceptions.\n\nThe move does however bring an added complication... what to do with the test cases in test_attributes.py ( I am going to move them into the test_extension_security_group file)","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"}],"neutron/common/exceptions.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"fadd0880f99528bbbacf3d168b42c1c3b4276860","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"class InvalidCIDR(BadRequest):"},{"line_number":316,"context_line":"    message \u003d _(\"Invalid CIDR \\\u0027%(input)s\\\u0027 given as IP prefix\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Fnss%3D","line":316,"updated":"2014-01-10 12:12:45.000000000","message":"I don\u0027t think you need to use backslashed to escape the single quote here... do you?","commit_id":"7d562d3df65dd39ec781774d39cea83266955fbc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7d00565880903ba554432f397baadbf02561017b","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"class InvalidCIDR(BadRequest):"},{"line_number":316,"context_line":"    message \u003d _(\"Invalid CIDR \\\u0027%(input)s\\\u0027 given as IP prefix\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUX%2F%2BqOc%3D","line":316,"in_reply_to":"AAAAUH%2F%2Fnss%3D","updated":"2014-02-19 23:21:03.000000000","message":"No the escaping can be removed.","commit_id":"7d562d3df65dd39ec781774d39cea83266955fbc"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"474fd3d1cb8e451a47a646ea7e3f7e0465093458","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"class InvalidCIDR(BadRequest):"},{"line_number":316,"context_line":"    message \u003d _(\"Invalid CIDR \\\u0027%(input)s\\\u0027 given as IP prefix\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FdPQ%3D","line":316,"in_reply_to":"AAAAUX%2F%2BqOc%3D","updated":"2014-02-26 14:37:57.000000000","message":"Done","commit_id":"7d562d3df65dd39ec781774d39cea83266955fbc"}],"neutron/db/securitygroups_db.py":[{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"change_message_id":"4c66ee1713ad516010dedb59850b1c7e0d56ef94","unresolved":false,"context_lines":[{"line_number":269,"context_line":"                raise ext_sg.SecurityGroupNotFound(id\u003dsecurity_group_id)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            self._check_for_duplicate_rules(context, r)"},{"line_number":272,"context_line":"            self._check_valid_ip_prefixes(context, r)"},{"line_number":273,"context_line":"            ret \u003d []"},{"line_number":274,"context_line":"            for rule_dict in r:"},{"line_number":275,"context_line":"                rule \u003d rule_dict[\u0027security_group_rule\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BKG4%3D","line":272,"updated":"2013-11-30 18:38:46.000000000","message":"Why isn\u0027t the this method called from _validate_security_group_rules (line 322)?","commit_id":"3d8efe944abf3f047e48d6b61cf55faa39e8c9f7"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"ca0e3c367eeb4edbc46e6dd99f391c21d8f50183","unresolved":false,"context_lines":[{"line_number":269,"context_line":"                raise ext_sg.SecurityGroupNotFound(id\u003dsecurity_group_id)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            self._check_for_duplicate_rules(context, r)"},{"line_number":272,"context_line":"            self._check_valid_ip_prefixes(context, r)"},{"line_number":273,"context_line":"            ret \u003d []"},{"line_number":274,"context_line":"            for rule_dict in r:"},{"line_number":275,"context_line":"                rule \u003d rule_dict[\u0027security_group_rule\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F96uw%3D","line":272,"in_reply_to":"AAAATn%2F%2BKG4%3D","updated":"2013-12-04 14:18:20.000000000","message":"Done","commit_id":"3d8efe944abf3f047e48d6b61cf55faa39e8c9f7"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"fd20d50c3eca38d301365ad34cbb07a6717b7199","unresolved":false,"context_lines":[{"line_number":407,"context_line":"                rule \u003d rule_dict[\u0027security_group_rule\u0027]"},{"line_number":408,"context_line":"                input_prefix \u003d rule[\u0027remote_ip_prefix\u0027]"},{"line_number":409,"context_line":"                if input_prefix:"},{"line_number":410,"context_line":"                    netaddr.IPAddress(input_prefix)"},{"line_number":411,"context_line":"            except netaddr.AddrFormatError:"},{"line_number":412,"context_line":"                raise ext_sg.InvalidCIDR(input\u003dstr(input_prefix))"},{"line_number":413,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BLJA%3D","line":410,"updated":"2013-11-29 19:16:59.000000000","message":"check _validate_subnet method in neutron.api.v2.attributes","commit_id":"3d8efe944abf3f047e48d6b61cf55faa39e8c9f7"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"ca0e3c367eeb4edbc46e6dd99f391c21d8f50183","unresolved":false,"context_lines":[{"line_number":407,"context_line":"                rule \u003d rule_dict[\u0027security_group_rule\u0027]"},{"line_number":408,"context_line":"                input_prefix \u003d rule[\u0027remote_ip_prefix\u0027]"},{"line_number":409,"context_line":"                if input_prefix:"},{"line_number":410,"context_line":"                    netaddr.IPAddress(input_prefix)"},{"line_number":411,"context_line":"            except netaddr.AddrFormatError:"},{"line_number":412,"context_line":"                raise ext_sg.InvalidCIDR(input\u003dstr(input_prefix))"},{"line_number":413,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F96uc%3D","line":410,"in_reply_to":"AAAATn%2F%2BLJA%3D","updated":"2013-12-04 14:18:20.000000000","message":"thanks ! so _validate_subnet returns a message whereas I\u0027d like to raise exception here. Also, _validate_subnet doesn\u0027t check the ethertype of the rule. It wouldn\u0027t be hard to use_validate_subnet as neutron.api.v2.attributes is already imported here. However I don\u0027t think I can change that method to do what we need here, especially as grep is telling me it is already used in a few places.","commit_id":"3d8efe944abf3f047e48d6b61cf55faa39e8c9f7"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"e0e0a869b23df9bf285c2017e02dc0f1b929eebc","unresolved":false,"context_lines":[{"line_number":407,"context_line":"                rule \u003d rule_dict[\u0027security_group_rule\u0027]"},{"line_number":408,"context_line":"                input_prefix \u003d rule[\u0027remote_ip_prefix\u0027]"},{"line_number":409,"context_line":"                if input_prefix:"},{"line_number":410,"context_line":"                    netaddr.IPAddress(input_prefix)"},{"line_number":411,"context_line":"            except netaddr.AddrFormatError:"},{"line_number":412,"context_line":"                raise ext_sg.InvalidCIDR(input\u003dstr(input_prefix))"},{"line_number":413,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F96rI%3D","line":410,"in_reply_to":"AAAATn%2F96uc%3D","updated":"2013-12-04 14:27:19.000000000","message":"Why do you think it\u0027s better to raise than to use API-layer validation?","commit_id":"3d8efe944abf3f047e48d6b61cf55faa39e8c9f7"},{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"change_message_id":"75e6bff8fcda8754491c90184fc805656250d16e","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                if input_prefix:"},{"line_number":410,"context_line":"                    netaddr.IPAddress(input_prefix)"},{"line_number":411,"context_line":"            except netaddr.AddrFormatError:"},{"line_number":412,"context_line":"                raise ext_sg.InvalidCIDR(input\u003dstr(input_prefix))"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    def get_security_group_rules(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":415,"context_line":"                                 sorts\u003dNone, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BKrM%3D","line":412,"updated":"2013-11-30 03:36:53.000000000","message":"Also need to check whether the cidr matches the ethertype.","commit_id":"3d8efe944abf3f047e48d6b61cf55faa39e8c9f7"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"ca0e3c367eeb4edbc46e6dd99f391c21d8f50183","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                if input_prefix:"},{"line_number":410,"context_line":"                    netaddr.IPAddress(input_prefix)"},{"line_number":411,"context_line":"            except netaddr.AddrFormatError:"},{"line_number":412,"context_line":"                raise ext_sg.InvalidCIDR(input\u003dstr(input_prefix))"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    def get_security_group_rules(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":415,"context_line":"                                 sorts\u003dNone, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F96u0%3D","line":412,"in_reply_to":"AAAATn%2F%2BKHc%3D","updated":"2013-12-04 14:18:20.000000000","message":"Done","commit_id":"3d8efe944abf3f047e48d6b61cf55faa39e8c9f7"},{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"change_message_id":"4c66ee1713ad516010dedb59850b1c7e0d56ef94","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                if input_prefix:"},{"line_number":410,"context_line":"                    netaddr.IPAddress(input_prefix)"},{"line_number":411,"context_line":"            except netaddr.AddrFormatError:"},{"line_number":412,"context_line":"                raise ext_sg.InvalidCIDR(input\u003dstr(input_prefix))"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    def get_security_group_rules(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":415,"context_line":"                                 sorts\u003dNone, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BKHc%3D","line":412,"in_reply_to":"AAAATn%2F%2BKrM%3D","updated":"2013-11-30 18:38:46.000000000","message":"Sorry, my comments should be reworded to say: check that the CIDR is consistent with the ethertype value.","commit_id":"3d8efe944abf3f047e48d6b61cf55faa39e8c9f7"},{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"change_message_id":"d198f0516fe7dbcd2bd536e2eb6815fb49b95d34","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                raise ext_sg.SecurityGroupNotFound(id\u003dsecurity_group_id)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"            self._check_for_duplicate_rules(context, r)"},{"line_number":273,"context_line":"            self._check_valid_ip_prefixes(context, r)"},{"line_number":274,"context_line":"            ret \u003d []"},{"line_number":275,"context_line":"            for rule_dict in r:"},{"line_number":276,"context_line":"                rule \u003d rule_dict[\u0027security_group_rule\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F96SY%3D","line":273,"updated":"2013-12-04 15:58:33.000000000","message":"Since the _check_valid_ip_prefixes has already been called from _validate_security_group_rules in line 265, it does not need to be called again here.","commit_id":"8dd47fe6f2afac7d3380e5da7dc27cd4366f5fc0"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"8557399676f0a3e99614be650697338bb64f00de","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    #check consistency of ethertype with addr version"},{"line_number":419,"context_line":"                    if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"},{"line_number":420,"context_line":"                        raise ext_sg.SecurityGroupRuleParameterConflict("},{"line_number":421,"context_line":"                            ethertype\u003dstr(rule[\u0027ethertype\u0027]),"},{"line_number":422,"context_line":"                            cidr\u003dstr(input_prefix))"},{"line_number":423,"context_line":"            except netaddr.AddrFormatError:"},{"line_number":424,"context_line":"                raise ext_sg.InvalidCIDR(input\u003dstr(input_prefix))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9v64%3D","line":421,"updated":"2013-12-06 12:41:10.000000000","message":"nit: str is unnecessary here, on the next line and on line 424","commit_id":"31db9957a34abf0035e37b354c07104939498f4b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"71d5ec34e354ecea863b125f8eabc1dfca76ef19","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        security_group_id \u003d self._validate_security_group_rules("},{"line_number":266,"context_line":"            context, security_group_rule)"},{"line_number":267,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"            if not self.get_security_group(context, security_group_id):"},{"line_number":270,"context_line":"                raise ext_sg.SecurityGroupNotFound(id\u003dsecurity_group_id)"},{"line_number":271,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9p%2Bc%3D","line":268,"updated":"2013-12-09 08:17:49.000000000","message":"nit: unrelated","commit_id":"2e8038f2aff8fc462d5380b20b88f2dcddfaa998"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"7b94377324538ca18d455b657c540b50479df32f","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        security_group_id \u003d self._validate_security_group_rules("},{"line_number":266,"context_line":"            context, security_group_rule)"},{"line_number":267,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"            if not self.get_security_group(context, security_group_id):"},{"line_number":270,"context_line":"                raise ext_sg.SecurityGroupNotFound(id\u003dsecurity_group_id)"},{"line_number":271,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9jjU%3D","line":268,"in_reply_to":"AAAATn%2F9p%2Bc%3D","updated":"2013-12-10 10:32:46.000000000","message":"Done","commit_id":"2e8038f2aff8fc462d5380b20b88f2dcddfaa998"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"71d5ec34e354ecea863b125f8eabc1dfca76ef19","unresolved":false,"context_lines":[{"line_number":403,"context_line":"            if rules:"},{"line_number":404,"context_line":"                raise ext_sg.SecurityGroupRuleExists(id\u003dstr(rules[0][\u0027id\u0027]))"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    #check valid cidr specified as remote_ip_prefix"},{"line_number":407,"context_line":"    #check that the rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":408,"context_line":"    #add mask to remote_ip_prefix if absent (\"192.168.1.10\"\u003d\u003e\"192.168.1.10/32\""},{"line_number":409,"context_line":"    def _check_valid_ip_prefixes(self, context, security_group_rules):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9p%2BM%3D","line":406,"updated":"2013-12-09 08:17:49.000000000","message":"please make a docstring","commit_id":"2e8038f2aff8fc462d5380b20b88f2dcddfaa998"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"7b94377324538ca18d455b657c540b50479df32f","unresolved":false,"context_lines":[{"line_number":403,"context_line":"            if rules:"},{"line_number":404,"context_line":"                raise ext_sg.SecurityGroupRuleExists(id\u003dstr(rules[0][\u0027id\u0027]))"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    #check valid cidr specified as remote_ip_prefix"},{"line_number":407,"context_line":"    #check that the rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":408,"context_line":"    #add mask to remote_ip_prefix if absent (\"192.168.1.10\"\u003d\u003e\"192.168.1.10/32\""},{"line_number":409,"context_line":"    def _check_valid_ip_prefixes(self, context, security_group_rules):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9jjA%3D","line":406,"in_reply_to":"AAAATn%2F9p%2BM%3D","updated":"2013-12-10 10:32:46.000000000","message":"Done","commit_id":"2e8038f2aff8fc462d5380b20b88f2dcddfaa998"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"f0a6e71c45daef3a8e73c67b09569453579ba68c","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                rule \u003d rule_dict[\u0027security_group_rule\u0027]"},{"line_number":413,"context_line":"                input_prefix \u003d rule[\u0027remote_ip_prefix\u0027]"},{"line_number":414,"context_line":"                if input_prefix:"},{"line_number":415,"context_line":"                    addr \u003d netaddr.IPNetwork(input_prefix)"},{"line_number":416,"context_line":"                    #set input_prefix to always include the netmask:"},{"line_number":417,"context_line":"                    rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":418,"context_line":"                    #check consistency of ethertype with addr version"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9rgg%3D","line":415,"updated":"2013-12-08 06:02:49.000000000","message":"shouldn\u0027t you be using\n\n  attr._validate_subnet(input_prefix)\n\nhere?","commit_id":"2e8038f2aff8fc462d5380b20b88f2dcddfaa998"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"0d6adf7c75719b2e67ec331d4b1c22daf6329ff7","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                rule \u003d rule_dict[\u0027security_group_rule\u0027]"},{"line_number":413,"context_line":"                input_prefix \u003d rule[\u0027remote_ip_prefix\u0027]"},{"line_number":414,"context_line":"                if input_prefix:"},{"line_number":415,"context_line":"                    addr \u003d netaddr.IPNetwork(input_prefix)"},{"line_number":416,"context_line":"                    #set input_prefix to always include the netmask:"},{"line_number":417,"context_line":"                    rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":418,"context_line":"                    #check consistency of ethertype with addr version"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9iuA%3D","line":415,"in_reply_to":"AAAATn%2F9jbE%3D","updated":"2013-12-10 12:32:20.000000000","message":"My initial suggestion was to refactor both attr._validate_subnet and this method to extract the common part into a separate utility method and use it in both.\nI still think it would be better to do so.","commit_id":"2e8038f2aff8fc462d5380b20b88f2dcddfaa998"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"7b94377324538ca18d455b657c540b50479df32f","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                rule \u003d rule_dict[\u0027security_group_rule\u0027]"},{"line_number":413,"context_line":"                input_prefix \u003d rule[\u0027remote_ip_prefix\u0027]"},{"line_number":414,"context_line":"                if input_prefix:"},{"line_number":415,"context_line":"                    addr \u003d netaddr.IPNetwork(input_prefix)"},{"line_number":416,"context_line":"                    #set input_prefix to always include the netmask:"},{"line_number":417,"context_line":"                    rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":418,"context_line":"                    #check consistency of ethertype with addr version"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9jbE%3D","line":415,"in_reply_to":"AAAATn%2F9rgg%3D","updated":"2013-12-10 10:32:46.000000000","message":"Hi Sumit. Thanks for the comment and review; did you see the discussion on patch set 1 about this issue?\n\nhttps://review.openstack.org/#/c/59212/1/neutron/db/securitygroups_db.py\n\nBasically it is easy to just replace:\n\n  addr \u003d netaddr.IPNetwork(input_prefix)\n\nwith\n\n  msg \u003d attr._validate_subnet(input_prefix)\n\n\nmy main concern is that _validate_subnet will return a message if input_prefix _is_ a valid address, but not a CIDR (i.e. missing the netmask). I would then have to parse the message to determine if \n\n1) this actually is a bad prefix OR\n2) is ok, just missing the netmask\n\nIn the case of 2), I would then just add the netmask, in the way I am currently doing (line 417 below). IMO this is just messy.\n\nSince this point has been raised before, if the general consensus here is it is better to use _validate_subnet then I will make the change. But IMO just calling \nnetaddr.IPNetwork(input_prefix) directly here is cleaner.\n\nthanks! marios","commit_id":"2e8038f2aff8fc462d5380b20b88f2dcddfaa998"},{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"change_message_id":"38b74531b6584237b163bc4f75285d0e66c405f9","unresolved":false,"context_lines":[{"line_number":419,"context_line":"    check valid cidr specified as remote_ip_prefix"},{"line_number":420,"context_line":"    check that the rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":421,"context_line":"    add mask to remote_ip_prefix if absent (\"192.168.1.10\"\u003d\u003e\"192.168.1.10/32\""},{"line_number":422,"context_line":"    \"\"\""},{"line_number":423,"context_line":"    def _check_valid_ip_prefixes(self, context, security_group_rules):"},{"line_number":424,"context_line":"        for rule_dict in security_group_rules:"},{"line_number":425,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9hC0%3D","line":422,"updated":"2013-12-10 17:53:22.000000000","message":"The above lines should be below line 423.","commit_id":"fdf44ff034c8e5a9c0901507654925c8712a441f"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"ae1b2ef00a0a085119ca7c384ec00390b0124b10","unresolved":false,"context_lines":[{"line_number":419,"context_line":"    check valid cidr specified as remote_ip_prefix"},{"line_number":420,"context_line":"    check that the rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":421,"context_line":"    add mask to remote_ip_prefix if absent (\"192.168.1.10\"\u003d\u003e\"192.168.1.10/32\""},{"line_number":422,"context_line":"    \"\"\""},{"line_number":423,"context_line":"    def _check_valid_ip_prefixes(self, context, security_group_rules):"},{"line_number":424,"context_line":"        for rule_dict in security_group_rules:"},{"line_number":425,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9gqc%3D","line":422,"in_reply_to":"AAAATn%2F9hC0%3D","updated":"2013-12-10 19:27:24.000000000","message":"Done","commit_id":"fdf44ff034c8e5a9c0901507654925c8712a441f"},{"author":{"_account_id":2711,"name":"Zhang Hua","display_name":"Zhang Hua","email":"joshua.zhang@canonical.com","username":"zhhuabj"},"change_message_id":"b5d94c76d2a208f61a0df04182901efa726999ed","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Aaron Rosen, Nicira, Inc"},{"line_number":18,"context_line":"import netaddr"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FghM%3D","line":17,"updated":"2014-01-13 07:57:17.000000000","message":"nit, insert a blank line here","commit_id":"7d562d3df65dd39ec781774d39cea83266955fbc"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"474fd3d1cb8e451a47a646ea7e3f7e0465093458","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Aaron Rosen, Nicira, Inc"},{"line_number":18,"context_line":"import netaddr"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FdPM%3D","line":17,"in_reply_to":"AAAAUH%2F%2FghM%3D","updated":"2014-02-26 14:37:57.000000000","message":"Done","commit_id":"7d562d3df65dd39ec781774d39cea83266955fbc"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"fadd0880f99528bbbacf3d168b42c1c3b4276860","unresolved":false,"context_lines":[{"line_number":419,"context_line":"        \"\"\""},{"line_number":420,"context_line":"        check valid cidr specified as remote_ip_prefix"},{"line_number":421,"context_line":"        check that rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":422,"context_line":"        add mask to ip_prefix if absent (\"192.168.1.10\"\u003d\u003e\"192.168.1.10/32\""},{"line_number":423,"context_line":"        \"\"\""},{"line_number":424,"context_line":"        for rule_dict in security_group_rules:"},{"line_number":425,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Fnsg%3D","line":422,"updated":"2014-01-10 12:12:45.000000000","message":"perhaps there is a missing closed quote in the docstring","commit_id":"7d562d3df65dd39ec781774d39cea83266955fbc"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"474fd3d1cb8e451a47a646ea7e3f7e0465093458","unresolved":false,"context_lines":[{"line_number":419,"context_line":"        \"\"\""},{"line_number":420,"context_line":"        check valid cidr specified as remote_ip_prefix"},{"line_number":421,"context_line":"        check that rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":422,"context_line":"        add mask to ip_prefix if absent (\"192.168.1.10\"\u003d\u003e\"192.168.1.10/32\""},{"line_number":423,"context_line":"        \"\"\""},{"line_number":424,"context_line":"        for rule_dict in security_group_rules:"},{"line_number":425,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FdOc%3D","line":422,"in_reply_to":"AAAAUH%2F%2Fnsg%3D","updated":"2014-02-26 14:37:57.000000000","message":"(may be the missing bracket close)","commit_id":"7d562d3df65dd39ec781774d39cea83266955fbc"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"93f4b44e2e0508a3b86bbfc171997c189171c97c","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        \"\"\""},{"line_number":421,"context_line":"        check valid cidr specified as remote_ip_prefix"},{"line_number":422,"context_line":"        check that rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":423,"context_line":"        add mask to ip_prefix if absent (192.168.1.10 -\u003e 192.168.1.10/32)"},{"line_number":424,"context_line":"        \"\"\""},{"line_number":425,"context_line":"        for rule_dict in security_group_rules:"},{"line_number":426,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVn%2F%2F95Y%3D","line":423,"updated":"2014-03-03 04:54:47.000000000","message":"could you also add a test case for this?","commit_id":"469e6a16715cf0f498011eb529358e521f315f10"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"1f717bbdb23a9f959665d2d2328c9acee4ee6822","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        \"\"\""},{"line_number":421,"context_line":"        check valid cidr specified as remote_ip_prefix"},{"line_number":422,"context_line":"        check that rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":423,"context_line":"        add mask to ip_prefix if absent (192.168.1.10 -\u003e 192.168.1.10/32)"},{"line_number":424,"context_line":"        \"\"\""},{"line_number":425,"context_line":"        for rule_dict in security_group_rules:"},{"line_number":426,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVn%2F%2F6g4%3D","line":423,"in_reply_to":"AAAAVn%2F%2F95Y%3D","updated":"2014-03-03 13:25:08.000000000","message":"Done","commit_id":"469e6a16715cf0f498011eb529358e521f315f10"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"afe842f56275610c684301a74d89d9b487daa759","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        \"\"\""},{"line_number":417,"context_line":"        check valid cidr specified as remote_ip_prefix"},{"line_number":418,"context_line":"        check that rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":419,"context_line":"        add mask to ip_prefix if absent (192.168.1.10 -\u003e 192.168.1.10/32)"},{"line_number":420,"context_line":"        \"\"\""},{"line_number":421,"context_line":"        for rule_dict in security_group_rules:"},{"line_number":422,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2F6aA%3D","line":419,"updated":"2014-03-03 13:52:03.000000000","message":"Please follow docstring convention: summary line, blank line and detail lines.","commit_id":"3cc5355f5053a81c4beb14820549f6b08f941366"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"34129cfb8a22318b50cf38c74692d02076287335","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        \"\"\""},{"line_number":417,"context_line":"        check valid cidr specified as remote_ip_prefix"},{"line_number":418,"context_line":"        check that rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":419,"context_line":"        add mask to ip_prefix if absent (192.168.1.10 -\u003e 192.168.1.10/32)"},{"line_number":420,"context_line":"        \"\"\""},{"line_number":421,"context_line":"        for rule_dict in security_group_rules:"},{"line_number":422,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2FtxQ%3D","line":419,"in_reply_to":"AAAAVn%2F%2F6aA%3D","updated":"2014-03-04 15:04:13.000000000","message":"Done","commit_id":"3cc5355f5053a81c4beb14820549f6b08f941366"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"45995007119d1ddf9377cba8bb2be11008916862","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import netaddr"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import sqlalchemy as sa"},{"line_number":18,"context_line":"from sqlalchemy import orm"},{"line_number":19,"context_line":"from sqlalchemy.orm import exc"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FMLo%3D","line":16,"updated":"2014-03-19 15:44:45.000000000","message":"white line not needed","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import netaddr"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import sqlalchemy as sa"},{"line_number":18,"context_line":"from sqlalchemy import orm"},{"line_number":19,"context_line":"from sqlalchemy.orm import exc"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FEoc%3D","line":16,"in_reply_to":"AAAAWH%2F%2FMLo%3D","updated":"2014-04-01 09:08:47.000000000","message":"Done","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"74fd81f7c6f656068ba4199db0fcc77b8500dbb2","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        tenant_ids \u003d set()"},{"line_number":328,"context_line":"        self._check_valid_ip_prefixes(context, security_group_rule["},{"line_number":329,"context_line":"                                      \u0027security_group_rules\u0027])"},{"line_number":330,"context_line":"        for rules in security_group_rule[\u0027security_group_rules\u0027]:"},{"line_number":331,"context_line":"            rule \u003d rules.get(\u0027security_group_rule\u0027)"},{"line_number":332,"context_line":"            new_rules.add(rule[\u0027security_group_id\u0027])"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BzAM%3D","line":330,"updated":"2014-03-24 09:37:24.000000000","message":"currently you have a method that iterates through all the rules and checks each one. But this loop already iterates through the rules. You could simplify your method to check just one rule, and call it from here - just like _validate_port_range is.","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        tenant_ids \u003d set()"},{"line_number":328,"context_line":"        self._check_valid_ip_prefixes(context, security_group_rule["},{"line_number":329,"context_line":"                                      \u0027security_group_rules\u0027])"},{"line_number":330,"context_line":"        for rules in security_group_rule[\u0027security_group_rules\u0027]:"},{"line_number":331,"context_line":"            rule \u003d rules.get(\u0027security_group_rule\u0027)"},{"line_number":332,"context_line":"            new_rules.add(rule[\u0027security_group_id\u0027])"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F96h4%3D","line":330,"in_reply_to":"AAAAWH%2F%2BzAM%3D","updated":"2014-04-01 09:08:47.000000000","message":"Done","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"b6127beb7653350f224e28aad4125934adc8b0b7","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                if (i[\u0027security_group_rule\u0027] \u003d\u003d db_rule):"},{"line_number":413,"context_line":"                    raise ext_sg.SecurityGroupRuleExists(id\u003did)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _check_valid_ip_prefixes(self, context, security_group_rules):"},{"line_number":416,"context_line":"        \"\"\"Check that a valid cidr was specified as remote_ip_prefix"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        check that it is in fact an IP address"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2B00U%3D","line":415,"updated":"2014-03-24 00:36:58.000000000","message":"Name_validate_ip_prefixes would look more consistent with other validation functions.","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"74fd81f7c6f656068ba4199db0fcc77b8500dbb2","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                if (i[\u0027security_group_rule\u0027] \u003d\u003d db_rule):"},{"line_number":413,"context_line":"                    raise ext_sg.SecurityGroupRuleExists(id\u003did)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _check_valid_ip_prefixes(self, context, security_group_rules):"},{"line_number":416,"context_line":"        \"\"\"Check that a valid cidr was specified as remote_ip_prefix"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        check that it is in fact an IP address"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2B1vw%3D","line":415,"updated":"2014-03-24 09:37:24.000000000","message":"context is not used.","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                if (i[\u0027security_group_rule\u0027] \u003d\u003d db_rule):"},{"line_number":413,"context_line":"                    raise ext_sg.SecurityGroupRuleExists(id\u003did)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _check_valid_ip_prefixes(self, context, security_group_rules):"},{"line_number":416,"context_line":"        \"\"\"Check that a valid cidr was specified as remote_ip_prefix"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        check that it is in fact an IP address"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F96hw%3D","line":415,"in_reply_to":"AAAAWH%2F%2B00U%3D","updated":"2014-04-01 09:08:47.000000000","message":"Done","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                if (i[\u0027security_group_rule\u0027] \u003d\u003d db_rule):"},{"line_number":413,"context_line":"                    raise ext_sg.SecurityGroupRuleExists(id\u003did)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _check_valid_ip_prefixes(self, context, security_group_rules):"},{"line_number":416,"context_line":"        \"\"\"Check that a valid cidr was specified as remote_ip_prefix"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        check that it is in fact an IP address"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F96ho%3D","line":415,"in_reply_to":"AAAAWH%2F%2B1vw%3D","updated":"2014-04-01 09:08:47.000000000","message":"Done","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"b6127beb7653350f224e28aad4125934adc8b0b7","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        check that it is in fact an IP address"},{"line_number":419,"context_line":"        check that rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":420,"context_line":"        add mask to ip_prefix if absent (192.168.1.10 -\u003e 192.168.1.10/32)"},{"line_number":421,"context_line":"        \"\"\""},{"line_number":422,"context_line":"        for rule_dict in security_group_rules:"},{"line_number":423,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2B02A%3D","line":420,"updated":"2014-03-24 00:36:58.000000000","message":"Would it be worthwhile commenting on ipv6 as well?","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        check that it is in fact an IP address"},{"line_number":419,"context_line":"        check that rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":420,"context_line":"        add mask to ip_prefix if absent (192.168.1.10 -\u003e 192.168.1.10/32)"},{"line_number":421,"context_line":"        \"\"\""},{"line_number":422,"context_line":"        for rule_dict in security_group_rules:"},{"line_number":423,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F96hU%3D","line":420,"in_reply_to":"AAAAWH%2F%2B02A%3D","updated":"2014-04-01 09:08:47.000000000","message":"sure will revisit the tests with this in mind","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"74fd81f7c6f656068ba4199db0fcc77b8500dbb2","unresolved":false,"context_lines":[{"line_number":426,"context_line":"                if input_prefix:"},{"line_number":427,"context_line":"                    addr \u003d netaddr.IPNetwork(input_prefix)"},{"line_number":428,"context_line":"                    #set input_prefix to always include the netmask:"},{"line_number":429,"context_line":"                    rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":430,"context_line":"                    #check consistency of ethertype with addr version"},{"line_number":431,"context_line":"                    if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"},{"line_number":432,"context_line":"                        raise ext_sg.SecurityGroupRuleParameterConflict("}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2B1uA%3D","line":429,"updated":"2014-03-24 09:37:24.000000000","message":"this was already done in convert_ip_prefix_to_cidr","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":426,"context_line":"                if input_prefix:"},{"line_number":427,"context_line":"                    addr \u003d netaddr.IPNetwork(input_prefix)"},{"line_number":428,"context_line":"                    #set input_prefix to always include the netmask:"},{"line_number":429,"context_line":"                    rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":430,"context_line":"                    #check consistency of ethertype with addr version"},{"line_number":431,"context_line":"                    if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"},{"line_number":432,"context_line":"                        raise ext_sg.SecurityGroupRuleParameterConflict("}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F96hQ%3D","line":429,"in_reply_to":"AAAAWH%2F%2B1uA%3D","updated":"2014-04-01 09:08:47.000000000","message":"Done","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"74fd81f7c6f656068ba4199db0fcc77b8500dbb2","unresolved":false,"context_lines":[{"line_number":432,"context_line":"                        raise ext_sg.SecurityGroupRuleParameterConflict("},{"line_number":433,"context_line":"                            ethertype\u003drule[\u0027ethertype\u0027],"},{"line_number":434,"context_line":"                            cidr\u003dinput_prefix)"},{"line_number":435,"context_line":"            except netaddr.AddrFormatError:"},{"line_number":436,"context_line":"                raise nc_exception.InvalidCIDR(input\u003dinput_prefix)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def get_security_group_rules(self, context, filters\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2B1t8%3D","line":435,"updated":"2014-03-24 09:37:24.000000000","message":"this was already done in convert_ip_prefix_to_cidr. I think this method should be changed to only validate that the cidr and ip version correspond.","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":432,"context_line":"                        raise ext_sg.SecurityGroupRuleParameterConflict("},{"line_number":433,"context_line":"                            ethertype\u003drule[\u0027ethertype\u0027],"},{"line_number":434,"context_line":"                            cidr\u003dinput_prefix)"},{"line_number":435,"context_line":"            except netaddr.AddrFormatError:"},{"line_number":436,"context_line":"                raise nc_exception.InvalidCIDR(input\u003dinput_prefix)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def get_security_group_rules(self, context, filters\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F96go%3D","line":435,"in_reply_to":"AAAAWH%2F%2B1t8%3D","updated":"2014-04-01 09:08:47.000000000","message":"Done","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"b6127beb7653350f224e28aad4125934adc8b0b7","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                            ethertype\u003drule[\u0027ethertype\u0027],"},{"line_number":434,"context_line":"                            cidr\u003dinput_prefix)"},{"line_number":435,"context_line":"            except netaddr.AddrFormatError:"},{"line_number":436,"context_line":"                raise nc_exception.InvalidCIDR(input\u003dinput_prefix)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def get_security_group_rules(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":439,"context_line":"                                 sorts\u003dNone, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2B01I%3D","line":436,"updated":"2014-03-24 00:36:58.000000000","message":"I see duplicate for validating address in attribute.py. May want to consider refactoring to have a single validator function.","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"6740ee70a7f19de880ee8df2ec0971dabfc5ab48","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                            ethertype\u003drule[\u0027ethertype\u0027],"},{"line_number":434,"context_line":"                            cidr\u003dinput_prefix)"},{"line_number":435,"context_line":"            except netaddr.AddrFormatError:"},{"line_number":436,"context_line":"                raise nc_exception.InvalidCIDR(input\u003dinput_prefix)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def get_security_group_rules(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":439,"context_line":"                                 sorts\u003dNone, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F96e4%3D","line":436,"in_reply_to":"AAAAWH%2F%2B01I%3D","updated":"2014-04-01 09:08:47.000000000","message":"yeah see your point. i have removed the \u0027try/catch\u0027 for the AddrFormatError as by now this is already validated as an IP address","commit_id":"bea78c3348a1ba0bf18a42183098a591a9072b59"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"1079ef4688c8e8772c89ad143cf58dfdb2e9b226","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        no need to check that it is in fact an IP address as this is"},{"line_number":416,"context_line":"        already validated by attribute validators"},{"line_number":417,"context_line":"        check that rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":418,"context_line":"        add mask to ip_prefix if absent (192.168.1.10 -\u003e 192.168.1.10/32)"},{"line_number":419,"context_line":"        \"\"\""},{"line_number":420,"context_line":"        input_prefix \u003d rule[\u0027remote_ip_prefix\u0027]"},{"line_number":421,"context_line":"        if input_prefix:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F93K8%3D","line":418,"updated":"2014-04-01 15:30:48.000000000","message":"As this is a multi-line comment, it would be easier to read if the sentences started with capitals and ended with fullstops.","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"ba6c2ea94fe8a22da47d522a3a7dee941da7d747","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        no need to check that it is in fact an IP address as this is"},{"line_number":416,"context_line":"        already validated by attribute validators"},{"line_number":417,"context_line":"        check that rule ethertype is consistent with remote_ip_prefix ip type"},{"line_number":418,"context_line":"        add mask to ip_prefix if absent (192.168.1.10 -\u003e 192.168.1.10/32)"},{"line_number":419,"context_line":"        \"\"\""},{"line_number":420,"context_line":"        input_prefix \u003d rule[\u0027remote_ip_prefix\u0027]"},{"line_number":421,"context_line":"        if input_prefix:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9yFI%3D","line":418,"in_reply_to":"AAAAWH%2F93K8%3D","updated":"2014-04-02 07:31:32.000000000","message":"Done","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"1079ef4688c8e8772c89ad143cf58dfdb2e9b226","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        input_prefix \u003d rule[\u0027remote_ip_prefix\u0027]"},{"line_number":421,"context_line":"        if input_prefix:"},{"line_number":422,"context_line":"            addr \u003d netaddr.IPNetwork(input_prefix)"},{"line_number":423,"context_line":"            #set input_prefix to always include the netmask:"},{"line_number":424,"context_line":"            rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":425,"context_line":"            #check consistency of ethertype with addr version"},{"line_number":426,"context_line":"            if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F93Kk%3D","line":423,"updated":"2014-04-01 15:30:48.000000000","message":"a space after the # would help here","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"ba6c2ea94fe8a22da47d522a3a7dee941da7d747","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        input_prefix \u003d rule[\u0027remote_ip_prefix\u0027]"},{"line_number":421,"context_line":"        if input_prefix:"},{"line_number":422,"context_line":"            addr \u003d netaddr.IPNetwork(input_prefix)"},{"line_number":423,"context_line":"            #set input_prefix to always include the netmask:"},{"line_number":424,"context_line":"            rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":425,"context_line":"            #check consistency of ethertype with addr version"},{"line_number":426,"context_line":"            if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9yFA%3D","line":423,"in_reply_to":"AAAAWH%2F93Kk%3D","updated":"2014-04-02 07:31:32.000000000","message":"Done","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"1079ef4688c8e8772c89ad143cf58dfdb2e9b226","unresolved":false,"context_lines":[{"line_number":422,"context_line":"            addr \u003d netaddr.IPNetwork(input_prefix)"},{"line_number":423,"context_line":"            #set input_prefix to always include the netmask:"},{"line_number":424,"context_line":"            rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":425,"context_line":"            #check consistency of ethertype with addr version"},{"line_number":426,"context_line":"            if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"},{"line_number":427,"context_line":"                raise ext_sg.SecurityGroupRuleParameterConflict("},{"line_number":428,"context_line":"                    ethertype\u003drule[\u0027ethertype\u0027], cidr\u003dinput_prefix)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F93Kg%3D","line":425,"updated":"2014-04-01 15:30:48.000000000","message":"ditto","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"ba6c2ea94fe8a22da47d522a3a7dee941da7d747","unresolved":false,"context_lines":[{"line_number":422,"context_line":"            addr \u003d netaddr.IPNetwork(input_prefix)"},{"line_number":423,"context_line":"            #set input_prefix to always include the netmask:"},{"line_number":424,"context_line":"            rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":425,"context_line":"            #check consistency of ethertype with addr version"},{"line_number":426,"context_line":"            if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"},{"line_number":427,"context_line":"                raise ext_sg.SecurityGroupRuleParameterConflict("},{"line_number":428,"context_line":"                    ethertype\u003drule[\u0027ethertype\u0027], cidr\u003dinput_prefix)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9yEo%3D","line":425,"in_reply_to":"AAAAWH%2F93Kg%3D","updated":"2014-04-02 07:31:32.000000000","message":"Done","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"1079ef4688c8e8772c89ad143cf58dfdb2e9b226","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            #set input_prefix to always include the netmask:"},{"line_number":424,"context_line":"            rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":425,"context_line":"            #check consistency of ethertype with addr version"},{"line_number":426,"context_line":"            if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"},{"line_number":427,"context_line":"                raise ext_sg.SecurityGroupRuleParameterConflict("},{"line_number":428,"context_line":"                    ethertype\u003drule[\u0027ethertype\u0027], cidr\u003dinput_prefix)"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F93KI%3D","line":426,"updated":"2014-04-01 15:30:48.000000000","message":"%d is more common and so more readable than %i","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":1119,"name":"Christoph Thiel","email":"ct@kki.org","username":"cthiel-suse"},"change_message_id":"decc04fb21fbc7a93f7519aae3da5a0ead884b69","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            #set input_prefix to always include the netmask:"},{"line_number":424,"context_line":"            rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":425,"context_line":"            #check consistency of ethertype with addr version"},{"line_number":426,"context_line":"            if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"},{"line_number":427,"context_line":"                raise ext_sg.SecurityGroupRuleParameterConflict("},{"line_number":428,"context_line":"                    ethertype\u003drule[\u0027ethertype\u0027], cidr\u003dinput_prefix)"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F94MU%3D","line":426,"updated":"2014-04-01 13:37:32.000000000","message":"Isn\u0027t ethertype downcased in convert_ethertype_to_case_insensitive? so this check would need to be for \"ipv%i\" instead of \"IPv%i\"?","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":1119,"name":"Christoph Thiel","email":"ct@kki.org","username":"cthiel-suse"},"change_message_id":"9de3b1ada0c82f868677702ad5321dfa15100af6","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            #set input_prefix to always include the netmask:"},{"line_number":424,"context_line":"            rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":425,"context_line":"            #check consistency of ethertype with addr version"},{"line_number":426,"context_line":"            if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"},{"line_number":427,"context_line":"                raise ext_sg.SecurityGroupRuleParameterConflict("},{"line_number":428,"context_line":"                    ethertype\u003drule[\u0027ethertype\u0027], cidr\u003dinput_prefix)"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F91IU%3D","line":426,"in_reply_to":"AAAAWH%2F92TU%3D","updated":"2014-04-01 20:18:35.000000000","message":"True! Sorry for the noise. The convert_ethertype_to_case_insensitive was a bit misleading.","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"ba6c2ea94fe8a22da47d522a3a7dee941da7d747","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            #set input_prefix to always include the netmask:"},{"line_number":424,"context_line":"            rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":425,"context_line":"            #check consistency of ethertype with addr version"},{"line_number":426,"context_line":"            if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"},{"line_number":427,"context_line":"                raise ext_sg.SecurityGroupRuleParameterConflict("},{"line_number":428,"context_line":"                    ethertype\u003drule[\u0027ethertype\u0027], cidr\u003dinput_prefix)"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9yDI%3D","line":426,"in_reply_to":"AAAAWH%2F93KI%3D","updated":"2014-04-02 07:31:32.000000000","message":"sure, will do, but can you explain what the difference between the two is please, as I believe there isn\u0027t any","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"change_message_id":"19687be669267406647c535438f1d8a359bd1c05","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            #set input_prefix to always include the netmask:"},{"line_number":424,"context_line":"            rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":425,"context_line":"            #check consistency of ethertype with addr version"},{"line_number":426,"context_line":"            if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"},{"line_number":427,"context_line":"                raise ext_sg.SecurityGroupRuleParameterConflict("},{"line_number":428,"context_line":"                    ethertype\u003drule[\u0027ethertype\u0027], cidr\u003dinput_prefix)"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F92TU%3D","line":426,"in_reply_to":"AAAAWH%2F94MU%3D","updated":"2014-04-01 17:26:18.000000000","message":"Actually convert_ethertype_to_case_insensitive returns either \u0027IPv4\u0027 or \u0027IPv6\u0027.","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"810dbb116ec2bda5d9186e0b112ea34c2319a90a","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            #set input_prefix to always include the netmask:"},{"line_number":424,"context_line":"            rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":425,"context_line":"            #check consistency of ethertype with addr version"},{"line_number":426,"context_line":"            if rule[\u0027ethertype\u0027] !\u003d \"IPv%i\" % (addr.version):"},{"line_number":427,"context_line":"                raise ext_sg.SecurityGroupRuleParameterConflict("},{"line_number":428,"context_line":"                    ethertype\u003drule[\u0027ethertype\u0027], cidr\u003dinput_prefix)"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9wbw%3D","line":426,"in_reply_to":"AAAAWH%2F9yDI%3D","updated":"2014-04-02 10:33:56.000000000","message":"I don\u0027t think there is any difference. But because %i is uncommon, it was a distraction for me to find out just that. Also %d stands out better than %i visually.","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"466f3fbf647d2d0f14c2fc60844a19c2df5e7a79","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                if (i[\u0027security_group_rule\u0027] \u003d\u003d db_rule):"},{"line_number":414,"context_line":"                    raise ext_sg.SecurityGroupRuleExists(id\u003did)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def _validate_ip_prefix(self, rule):"},{"line_number":417,"context_line":"        \"\"\"Check that a valid cidr was specified as remote_ip_prefix"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        No need to check that it is in fact an IP address as this is already"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAXH%2F%2F5IM%3D","line":416,"updated":"2014-04-16 16:42:01.000000000","message":"I think we should just use this method to validate that ethertype and ip are the same version","commit_id":"65aa92b0348b7ab8413f359b00825610cdf66607"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"466f3fbf647d2d0f14c2fc60844a19c2df5e7a79","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        \"\"\""},{"line_number":424,"context_line":"        input_prefix \u003d rule[\u0027remote_ip_prefix\u0027]"},{"line_number":425,"context_line":"        if input_prefix:"},{"line_number":426,"context_line":"            addr \u003d netaddr.IPNetwork(input_prefix)"},{"line_number":427,"context_line":"            # set input_prefix to always include the netmask:"},{"line_number":428,"context_line":"            rule[\u0027remote_ip_prefix\u0027] \u003d str(addr)"},{"line_number":429,"context_line":"            # check consistency of ethertype with addr version"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAXH%2F%2F5H0%3D","line":426,"updated":"2014-04-16 16:42:01.000000000","message":"why don\u0027t you do this conversion in neutron/extensions/securitygroup.py in def convert_ip_prefix_to_cidr(ip_prefix)?","commit_id":"65aa92b0348b7ab8413f359b00825610cdf66607"}],"neutron/extensions/securitygroup.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"71d5ec34e354ecea863b125f8eabc1dfca76ef19","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        \u0027remote_ip_prefix\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":235,"context_line":"                             \u0027default\u0027: None, \u0027is_visible\u0027: True,"},{"line_number":236,"context_line":"                             \u0027convert_to\u0027: _convert_ip_prefix_cidr,"},{"line_number":237,"context_line":"                             \u0027validate\u0027: {\u0027type:validate_ip_prefix\u0027: None}},"},{"line_number":238,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":239,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":240,"context_line":"                      \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9p9Q%3D","line":237,"updated":"2013-12-09 08:17:49.000000000","message":"validation seems redundant after convertion, both are using netaddr.IPNetwork(ip_prefix). Am I missing smth?","commit_id":"2e8038f2aff8fc462d5380b20b88f2dcddfaa998"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"7b94377324538ca18d455b657c540b50479df32f","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        \u0027remote_ip_prefix\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":235,"context_line":"                             \u0027default\u0027: None, \u0027is_visible\u0027: True,"},{"line_number":236,"context_line":"                             \u0027convert_to\u0027: _convert_ip_prefix_cidr,"},{"line_number":237,"context_line":"                             \u0027validate\u0027: {\u0027type:validate_ip_prefix\u0027: None}},"},{"line_number":238,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":239,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":240,"context_line":"                      \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9jWo%3D","line":237,"in_reply_to":"AAAATn%2F9p9Q%3D","updated":"2013-12-10 10:32:46.000000000","message":"Thanks Oleg: you are right. I tidied up a bit and removed the validation method. The convert method will now raise the exception if it isn\u0027t possible to convert to cidr.\n\nthanks!","commit_id":"2e8038f2aff8fc462d5380b20b88f2dcddfaa998"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"13b185fdea602aac03bb683741f75b256147e0c1","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class InvalidCIDR(qexception.InvalidInput):"},{"line_number":108,"context_line":"    message \u003d _(\"Invalid CIDR \\\u0027%(input)s\\\u0027 given as IP prefix\")"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class SecurityGroupRuleParameterConflict(qexception.InvalidInput):"},{"line_number":112,"context_line":"    message \u003d _(\"Conflicting value ethertype %(ethertype)s for CIDR %(cidr)s\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9i1Y%3D","line":109,"updated":"2013-12-10 12:08:59.000000000","message":"IMHO,  I think this should be moved to a common place so that we could use this for many purposes. Maybe here: neutron/common/exceptions.py","commit_id":"056c9cd95f64292e7caf2adf3e62788ddf8ae9d5"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"c734d3ccb7bf63b4573b92e7fe6a098ccce8755e","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class InvalidCIDR(qexception.InvalidInput):"},{"line_number":108,"context_line":"    message \u003d _(\"Invalid CIDR \\\u0027%(input)s\\\u0027 given as IP prefix\")"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class SecurityGroupRuleParameterConflict(qexception.InvalidInput):"},{"line_number":112,"context_line":"    message \u003d _(\"Conflicting value ethertype %(ethertype)s for CIDR %(cidr)s\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9iug%3D","line":109,"in_reply_to":"AAAATn%2F9i1Y%3D","updated":"2013-12-10 12:32:26.000000000","message":"+1","commit_id":"056c9cd95f64292e7caf2adf3e62788ddf8ae9d5"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"47ab363b9bc9e0eee51a22d6abbe0abdbeee70d4","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class InvalidCIDR(qexception.InvalidInput):"},{"line_number":108,"context_line":"    message \u003d _(\"Invalid CIDR \\\u0027%(input)s\\\u0027 given as IP prefix\")"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class SecurityGroupRuleParameterConflict(qexception.InvalidInput):"},{"line_number":112,"context_line":"    message \u003d _(\"Conflicting value ethertype %(ethertype)s for CIDR %(cidr)s\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9icE%3D","line":109,"in_reply_to":"AAAATn%2F9i1Y%3D","updated":"2013-12-10 14:21:29.000000000","message":"thanks, still learning my way around the code ;)","commit_id":"056c9cd95f64292e7caf2adf3e62788ddf8ae9d5"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"13b185fdea602aac03bb683741f75b256147e0c1","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        raise SecurityGroupDefaultAlreadyExists()"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"def _convert_ip_prefix_cidr(ip_prefix\u003dNone):"},{"line_number":171,"context_line":"    if ip_prefix \u003d\u003d None:"},{"line_number":172,"context_line":"        return"},{"line_number":173,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9i0w%3D","line":170,"updated":"2013-12-10 12:08:59.000000000","message":"And this one here: neutron/api/v2/attributes.py ?","commit_id":"056c9cd95f64292e7caf2adf3e62788ddf8ae9d5"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"47ab363b9bc9e0eee51a22d6abbe0abdbeee70d4","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        raise SecurityGroupDefaultAlreadyExists()"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"def _convert_ip_prefix_cidr(ip_prefix\u003dNone):"},{"line_number":171,"context_line":"    if ip_prefix \u003d\u003d None:"},{"line_number":172,"context_line":"        return"},{"line_number":173,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9iWk%3D","line":170,"in_reply_to":"AAAATn%2F9i0w%3D","updated":"2013-12-10 14:21:29.000000000","message":"Done","commit_id":"056c9cd95f64292e7caf2adf3e62788ddf8ae9d5"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"c734d3ccb7bf63b4573b92e7fe6a098ccce8755e","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"def _convert_ip_prefix_cidr(ip_prefix\u003dNone):"},{"line_number":171,"context_line":"    if ip_prefix \u003d\u003d None:"},{"line_number":172,"context_line":"        return"},{"line_number":173,"context_line":"    try:"},{"line_number":174,"context_line":"        cidr \u003d netaddr.IPNetwork(ip_prefix)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9iuo%3D","line":171,"updated":"2013-12-10 12:32:26.000000000","message":"nit: is None","commit_id":"056c9cd95f64292e7caf2adf3e62788ddf8ae9d5"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"47ab363b9bc9e0eee51a22d6abbe0abdbeee70d4","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"def _convert_ip_prefix_cidr(ip_prefix\u003dNone):"},{"line_number":171,"context_line":"    if ip_prefix \u003d\u003d None:"},{"line_number":172,"context_line":"        return"},{"line_number":173,"context_line":"    try:"},{"line_number":174,"context_line":"        cidr \u003d netaddr.IPNetwork(ip_prefix)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9iWg%3D","line":171,"in_reply_to":"AAAATn%2F9iuo%3D","updated":"2013-12-10 14:21:29.000000000","message":"Done","commit_id":"056c9cd95f64292e7caf2adf3e62788ddf8ae9d5"},{"author":{"_account_id":9560,"name":"Lee Li","email":"lilinguo8212@gmail.com","username":"llg8212"},"change_message_id":"0efee1cc6e717d7df19186338d724b3a96a8f8eb","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                      \u0027validate\u0027: {\u0027type:values\u0027: sg_supported_ethertypes}},"},{"line_number":213,"context_line":"        \u0027remote_ip_prefix\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":214,"context_line":"                             \u0027default\u0027: None, \u0027is_visible\u0027: True,"},{"line_number":215,"context_line":"                             \u0027convert_to\u0027: attr.convert_ip_prefix_to_cidr},"},{"line_number":216,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":217,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":218,"context_line":"                      \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2BzvE%3D","line":215,"updated":"2014-03-12 01:40:43.000000000","message":"I think convert_ip_prefix_to_cidr should be consistent with other convert_XXX functions.","commit_id":"86c13778ed1fef0b56d590fc7746bda7509b1b7b"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"741ed50c787939f37867f4ea929cd083a40f2201","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                      \u0027validate\u0027: {\u0027type:values\u0027: sg_supported_ethertypes}},"},{"line_number":213,"context_line":"        \u0027remote_ip_prefix\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":214,"context_line":"                             \u0027default\u0027: None, \u0027is_visible\u0027: True,"},{"line_number":215,"context_line":"                             \u0027convert_to\u0027: attr.convert_ip_prefix_to_cidr},"},{"line_number":216,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":217,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":218,"context_line":"                      \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2Bxfs%3D","line":215,"in_reply_to":"AAAAVn%2F%2BzvE%3D","updated":"2014-03-12 10:22:40.000000000","message":"hey, not sure what you mean here","commit_id":"86c13778ed1fef0b56d590fc7746bda7509b1b7b"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"1079ef4688c8e8772c89ad143cf58dfdb2e9b226","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"attr.validators[\u0027type:name_not_default\u0027] \u003d _validate_name_not_default"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"sg_supported_protocols \u003d [None, const.PROTO_NAME_TCP,"},{"line_number":164,"context_line":"                          const.PROTO_NAME_UDP, const.PROTO_NAME_ICMP]"},{"line_number":165,"context_line":"sg_supported_ethertypes \u003d [\u0027IPv4\u0027, \u0027IPv6\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F93OE%3D","side":"PARENT","line":162,"updated":"2014-04-01 15:30:48.000000000","message":"I guess this was accidently?","commit_id":"64128cb40a81686e523dedb6afe301647c559979"},{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"change_message_id":"19687be669267406647c535438f1d8a359bd1c05","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"attr.validators[\u0027type:name_not_default\u0027] \u003d _validate_name_not_default"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"sg_supported_protocols \u003d [None, const.PROTO_NAME_TCP,"},{"line_number":164,"context_line":"                          const.PROTO_NAME_UDP, const.PROTO_NAME_ICMP]"},{"line_number":165,"context_line":"sg_supported_ethertypes \u003d [\u0027IPv4\u0027, \u0027IPv6\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F92hw%3D","side":"PARENT","line":162,"updated":"2014-04-01 17:26:18.000000000","message":"Put line 162 back.","commit_id":"64128cb40a81686e523dedb6afe301647c559979"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"ba6c2ea94fe8a22da47d522a3a7dee941da7d747","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"attr.validators[\u0027type:name_not_default\u0027] \u003d _validate_name_not_default"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"sg_supported_protocols \u003d [None, const.PROTO_NAME_TCP,"},{"line_number":164,"context_line":"                          const.PROTO_NAME_UDP, const.PROTO_NAME_ICMP]"},{"line_number":165,"context_line":"sg_supported_ethertypes \u003d [\u0027IPv4\u0027, \u0027IPv6\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9yCA%3D","side":"PARENT","line":162,"in_reply_to":"AAAAWH%2F92hw%3D","updated":"2014-04-02 07:31:32.000000000","message":"Done","commit_id":"64128cb40a81686e523dedb6afe301647c559979"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"e6335c5adc25538b320a051983039b58f0d69a33","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                      \u0027validate\u0027: {\u0027type:values\u0027: sg_supported_ethertypes}},"},{"line_number":212,"context_line":"        \u0027remote_ip_prefix\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":213,"context_line":"                             \u0027default\u0027: None, \u0027is_visible\u0027: True,"},{"line_number":214,"context_line":"                             \u0027convert_to\u0027: attr.convert_ip_prefix_to_cidr},"},{"line_number":215,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":216,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":217,"context_line":"                      \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2FOOY%3D","line":214,"updated":"2014-04-16 00:05:52.000000000","message":"Most of the other convert functions are define in this file.  Why is this one on attr?","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"db4b74a83707ca7b4648cf58b449fec227195f5f","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                      \u0027validate\u0027: {\u0027type:values\u0027: sg_supported_ethertypes}},"},{"line_number":212,"context_line":"        \u0027remote_ip_prefix\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":213,"context_line":"                             \u0027default\u0027: None, \u0027is_visible\u0027: True,"},{"line_number":214,"context_line":"                             \u0027convert_to\u0027: attr.convert_ip_prefix_to_cidr},"},{"line_number":215,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":216,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":217,"context_line":"                      \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAXH%2F%2F5z8%3D","line":214,"in_reply_to":"AAAAW3%2F%2FOOY%3D","updated":"2014-04-16 16:15:50.000000000","message":"done... for the history see my comment @ https://review.openstack.org/#/c/59212/15/neutron/api/v2/attributes.py,unified","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"}],"neutron/tests/unit/test_attributes.py":[{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"741ed50c787939f37867f4ea929cd083a40f2201","unresolved":false,"context_lines":[{"line_number":785,"context_line":"        self.assertEqual(attributes.convert_ip_prefix_to_cidr(addr),"},{"line_number":786,"context_line":"                         \u0027%s/32\u0027 % (addr))"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def test_convert_ip_prefix_with_netmark_to_cidr(self):"},{"line_number":789,"context_line":"        addresses \u003d [\u002710.1.0.0/16\u0027, \u002710.1.2.3/32\u0027]"},{"line_number":790,"context_line":"        for addr in addresses:"},{"line_number":791,"context_line":"            self.assertEqual(attributes.convert_ip_prefix_to_cidr(addr), addr)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2Bxeg%3D","line":788,"updated":"2014-03-12 10:22:40.000000000","message":"s/netmark/netmask","commit_id":"86c13778ed1fef0b56d590fc7746bda7509b1b7b"},{"author":{"_account_id":9560,"name":"Lee Li","email":"lilinguo8212@gmail.com","username":"llg8212"},"change_message_id":"0efee1cc6e717d7df19186338d724b3a96a8f8eb","unresolved":false,"context_lines":[{"line_number":788,"context_line":"    def test_convert_ip_prefix_with_netmark_to_cidr(self):"},{"line_number":789,"context_line":"        addresses \u003d [\u002710.1.0.0/16\u0027, \u002710.1.2.3/32\u0027]"},{"line_number":790,"context_line":"        for addr in addresses:"},{"line_number":791,"context_line":"            self.assertEqual(attributes.convert_ip_prefix_to_cidr(addr), addr)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2BztE%3D","line":791,"updated":"2014-03-12 01:40:43.000000000","message":"Should IPv6 address be considered?","commit_id":"86c13778ed1fef0b56d590fc7746bda7509b1b7b"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"741ed50c787939f37867f4ea929cd083a40f2201","unresolved":false,"context_lines":[{"line_number":788,"context_line":"    def test_convert_ip_prefix_with_netmark_to_cidr(self):"},{"line_number":789,"context_line":"        addresses \u003d [\u002710.1.0.0/16\u0027, \u002710.1.2.3/32\u0027]"},{"line_number":790,"context_line":"        for addr in addresses:"},{"line_number":791,"context_line":"            self.assertEqual(attributes.convert_ip_prefix_to_cidr(addr), addr)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2Bxek%3D","line":791,"in_reply_to":"AAAAVn%2F%2BztE%3D","updated":"2014-03-12 10:22:40.000000000","message":"indeed, though the method is using netaddr so v6 should be covered there\n\ncidr \u003d netaddr.IPNetwork(ip_prefix)","commit_id":"86c13778ed1fef0b56d590fc7746bda7509b1b7b"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"5e50b5dcb438fa9ca96a2dd8ebed77c5dcdf43d9","unresolved":false,"context_lines":[{"line_number":806,"context_line":"        for val in [\u0027bad_ip\u0027, 256, \"2001:db8:a::123/129\"]:"},{"line_number":807,"context_line":"            self.assertRaises(n_exc.InvalidCIDR,"},{"line_number":808,"context_line":"                              attributes.convert_ip_prefix_to_cidr, val)"},{"line_number":809,"context_line":"        self.assertEqual(attributes.convert_ip_prefix_to_cidr(None), None)"},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    def test_convert_ip_prefix_no_netmask_to_cidr(self):"},{"line_number":812,"context_line":"        addr \u003d {\u002710.1.2.3\u0027: \u002732\u0027, \u0027fe80::2677:3ff:fe7d:4c\u0027: \u0027128\u0027}"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2FQlk%3D","line":809,"updated":"2014-04-15 21:03:46.000000000","message":"nit: self.assertIsNone","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"db4b74a83707ca7b4648cf58b449fec227195f5f","unresolved":false,"context_lines":[{"line_number":806,"context_line":"        for val in [\u0027bad_ip\u0027, 256, \"2001:db8:a::123/129\"]:"},{"line_number":807,"context_line":"            self.assertRaises(n_exc.InvalidCIDR,"},{"line_number":808,"context_line":"                              attributes.convert_ip_prefix_to_cidr, val)"},{"line_number":809,"context_line":"        self.assertEqual(attributes.convert_ip_prefix_to_cidr(None), None)"},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    def test_convert_ip_prefix_no_netmask_to_cidr(self):"},{"line_number":812,"context_line":"        addr \u003d {\u002710.1.2.3\u0027: \u002732\u0027, \u0027fe80::2677:3ff:fe7d:4c\u0027: \u0027128\u0027}"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAXH%2F%2F5t0%3D","line":809,"in_reply_to":"AAAAW3%2F%2FQlk%3D","updated":"2014-04-16 16:15:50.000000000","message":"thanks! Will do. Note I will move these test cases to test_extension_security_group because of comments at https://review.openstack.org/#/c/59212/15/neutron/api/v2/attributes.py,unified","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"}],"neutron/tests/unit/test_extension_security_group.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7d00565880903ba554432f397baadbf02561017b","unresolved":false,"context_lines":[{"line_number":416,"context_line":"            sg_id \u003d sg[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":417,"context_line":"            remote_ip_prefix \u003d \"bad_prefix\""},{"line_number":418,"context_line":"            rule \u003d self._build_security_group_rule("},{"line_number":419,"context_line":"                sg_id, \u0027ingress\u0027, const.PROTO_NAME_TCP, \u002722\u0027,"},{"line_number":420,"context_line":"                \u002722\u0027, remote_ip_prefix)"},{"line_number":421,"context_line":"            res \u003d self._create_security_group_rule(self.fmt, rule)"},{"line_number":422,"context_line":"            self.deserialize(self.fmt, res)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUX%2F%2BqOQ%3D","line":419,"updated":"2014-02-19 23:21:03.000000000","message":"For improved readability put each param on a new line.\n\nsg_id,\n\u0027ingress\u0027,\n...","commit_id":"7d562d3df65dd39ec781774d39cea83266955fbc"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"474fd3d1cb8e451a47a646ea7e3f7e0465093458","unresolved":false,"context_lines":[{"line_number":416,"context_line":"            sg_id \u003d sg[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":417,"context_line":"            remote_ip_prefix \u003d \"bad_prefix\""},{"line_number":418,"context_line":"            rule \u003d self._build_security_group_rule("},{"line_number":419,"context_line":"                sg_id, \u0027ingress\u0027, const.PROTO_NAME_TCP, \u002722\u0027,"},{"line_number":420,"context_line":"                \u002722\u0027, remote_ip_prefix)"},{"line_number":421,"context_line":"            res \u003d self._create_security_group_rule(self.fmt, rule)"},{"line_number":422,"context_line":"            self.deserialize(self.fmt, res)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FdNA%3D","line":419,"in_reply_to":"AAAAUX%2F%2BqOQ%3D","updated":"2014-02-26 14:37:57.000000000","message":"Done","commit_id":"7d562d3df65dd39ec781774d39cea83266955fbc"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7d00565880903ba554432f397baadbf02561017b","unresolved":false,"context_lines":[{"line_number":429,"context_line":"            sg_id \u003d sg[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":430,"context_line":"            ethertype \u003d \"IPv6\""},{"line_number":431,"context_line":"            remote_ip_prefix \u003d \"192.168.1.1/24\""},{"line_number":432,"context_line":"            rule \u003d self._build_security_group_rule("},{"line_number":433,"context_line":"                sg_id, \u0027ingress\u0027, const.PROTO_NAME_TCP, \u002722\u0027,"},{"line_number":434,"context_line":"                \u002722\u0027, remote_ip_prefix, None, None, ethertype)"},{"line_number":435,"context_line":"            res \u003d self._create_security_group_rule(self.fmt, rule)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUX%2F%2BqOI%3D","line":432,"updated":"2014-02-19 23:21:03.000000000","message":"same as above","commit_id":"7d562d3df65dd39ec781774d39cea83266955fbc"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"474fd3d1cb8e451a47a646ea7e3f7e0465093458","unresolved":false,"context_lines":[{"line_number":429,"context_line":"            sg_id \u003d sg[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":430,"context_line":"            ethertype \u003d \"IPv6\""},{"line_number":431,"context_line":"            remote_ip_prefix \u003d \"192.168.1.1/24\""},{"line_number":432,"context_line":"            rule \u003d self._build_security_group_rule("},{"line_number":433,"context_line":"                sg_id, \u0027ingress\u0027, const.PROTO_NAME_TCP, \u002722\u0027,"},{"line_number":434,"context_line":"                \u002722\u0027, remote_ip_prefix, None, None, ethertype)"},{"line_number":435,"context_line":"            res \u003d self._create_security_group_rule(self.fmt, rule)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FdNE%3D","line":432,"in_reply_to":"AAAAUX%2F%2BqOI%3D","updated":"2014-02-26 14:37:57.000000000","message":"Done","commit_id":"7d562d3df65dd39ec781774d39cea83266955fbc"},{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"change_message_id":"19687be669267406647c535438f1d8a359bd1c05","unresolved":false,"context_lines":[{"line_number":424,"context_line":"    def test_create_security_group_rule_invalid_ethertype_for_prefix(self):"},{"line_number":425,"context_line":"        name \u003d \u0027webservers\u0027"},{"line_number":426,"context_line":"        description \u003d \u0027my webservers\u0027"},{"line_number":427,"context_line":"        test_addr \u003d {\u0027192.168.1.1/24\u0027: \u0027IPv6\u0027, \u00272001:db8:1234::/48\u0027: \u0027IPv4\u0027}"},{"line_number":428,"context_line":"        for prefix, ether in test_addr.iteritems():"},{"line_number":429,"context_line":"            with self.security_group(name, description) as sg:"},{"line_number":430,"context_line":"                sg_id \u003d sg[\u0027security_group\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F92Yw%3D","line":427,"updated":"2014-04-01 17:26:18.000000000","message":"Also add test inputs where the ethertypes are \u0027ipv4\u0027 and \u0027ipv6\u0027 (for completeness).","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"change_message_id":"19687be669267406647c535438f1d8a359bd1c05","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        name \u003d \u0027webservers\u0027"},{"line_number":448,"context_line":"        description \u003d \u0027my webservers\u0027"},{"line_number":449,"context_line":"        addr \u003d {\u002710.1.2.3\u0027: {\u0027mask\u0027: \u002732\u0027, \u0027ethertype\u0027: \u0027IPv4\u0027},"},{"line_number":450,"context_line":"                \u0027fe80::2677:3ff:fe7d:4c\u0027: {\u0027mask\u0027: \u0027128\u0027, \u0027ethertype\u0027: \u0027IPv6\u0027}}"},{"line_number":451,"context_line":"        for ip in addr:"},{"line_number":452,"context_line":"            with self.security_group(name, description) as sg:"},{"line_number":453,"context_line":"                sg_id \u003d sg[\u0027security_group\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F92Yc%3D","line":450,"updated":"2014-04-01 17:26:18.000000000","message":"same comment as line 427.","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"ba6c2ea94fe8a22da47d522a3a7dee941da7d747","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        name \u003d \u0027webservers\u0027"},{"line_number":448,"context_line":"        description \u003d \u0027my webservers\u0027"},{"line_number":449,"context_line":"        addr \u003d {\u002710.1.2.3\u0027: {\u0027mask\u0027: \u002732\u0027, \u0027ethertype\u0027: \u0027IPv4\u0027},"},{"line_number":450,"context_line":"                \u0027fe80::2677:3ff:fe7d:4c\u0027: {\u0027mask\u0027: \u0027128\u0027, \u0027ethertype\u0027: \u0027IPv6\u0027}}"},{"line_number":451,"context_line":"        for ip in addr:"},{"line_number":452,"context_line":"            with self.security_group(name, description) as sg:"},{"line_number":453,"context_line":"                sg_id \u003d sg[\u0027security_group\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9yAg%3D","line":450,"in_reply_to":"AAAAWH%2F92Yc%3D","updated":"2014-04-02 07:31:32.000000000","message":"not sure it makes sense here though. The previous test is about bad prefix and I added the \u0027ipv4\u0027 \u0027ipv6\u0027 inputs. Here however we are creating valid rules but where prefix is specified without mask (i.e. just \u0027192.168.1.1\u0027). Testing for ipv4 would fail. I could add another test case but seems to me this is covered with the earlier additions as above?","commit_id":"4c3ee6c048cfdca92d07aaaab7294c33e2c7054d"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"5e50b5dcb438fa9ca96a2dd8ebed77c5dcdf43d9","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    \u002722\u0027, \u002722\u0027,"},{"line_number":419,"context_line":"                    remote_ip_prefix)"},{"line_number":420,"context_line":"                res \u003d self._create_security_group_rule(self.fmt, rule)"},{"line_number":421,"context_line":"                self.deserialize(self.fmt, res)"},{"line_number":422,"context_line":"                self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def test_create_security_group_rule_invalid_ethertype_for_prefix(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2FPPY%3D","line":421,"updated":"2014-04-15 21:03:46.000000000","message":"usually res.status_int is checked before deserialization.\nIf expected code is HTTPBadRequest, how does deserialize() even work?\nI think L421 could just be dropped.","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"db4b74a83707ca7b4648cf58b449fec227195f5f","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    \u002722\u0027, \u002722\u0027,"},{"line_number":419,"context_line":"                    remote_ip_prefix)"},{"line_number":420,"context_line":"                res \u003d self._create_security_group_rule(self.fmt, rule)"},{"line_number":421,"context_line":"                self.deserialize(self.fmt, res)"},{"line_number":422,"context_line":"                self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def test_create_security_group_rule_invalid_ethertype_for_prefix(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAXH%2F%2F5Yw%3D","line":421,"in_reply_to":"AAAAW3%2F%2FPPY%3D","updated":"2014-04-16 16:15:50.000000000","message":"Done","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"5e50b5dcb438fa9ca96a2dd8ebed77c5dcdf43d9","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                    None,"},{"line_number":443,"context_line":"                    ethertype)"},{"line_number":444,"context_line":"                res \u003d self._create_security_group_rule(self.fmt, rule)"},{"line_number":445,"context_line":"                self.deserialize(self.fmt, res)"},{"line_number":446,"context_line":"                self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def test_create_security_group_rule_with_unmasked_prefix(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2FPOw%3D","line":445,"updated":"2014-04-15 21:03:46.000000000","message":"same as above","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"db4b74a83707ca7b4648cf58b449fec227195f5f","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                    None,"},{"line_number":443,"context_line":"                    ethertype)"},{"line_number":444,"context_line":"                res \u003d self._create_security_group_rule(self.fmt, rule)"},{"line_number":445,"context_line":"                self.deserialize(self.fmt, res)"},{"line_number":446,"context_line":"                self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def test_create_security_group_rule_with_unmasked_prefix(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAXH%2F%2F5YU%3D","line":445,"in_reply_to":"AAAAW3%2F%2FPOw%3D","updated":"2014-04-16 16:15:50.000000000","message":"Done","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"5e50b5dcb438fa9ca96a2dd8ebed77c5dcdf43d9","unresolved":false,"context_lines":[{"line_number":468,"context_line":"                res_sg \u003d self.deserialize(self.fmt, res)"},{"line_number":469,"context_line":"                prefix \u003d res_sg[\u0027security_group_rule\u0027][\u0027remote_ip_prefix\u0027]"},{"line_number":470,"context_line":"                self.assertEqual(prefix, \u0027%s/%s\u0027 % (ip, addr[ip][\u0027mask\u0027]))"},{"line_number":471,"context_line":"                self.assertEqual(res.status_int, 201)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    def test_create_security_group_rule_tcp_protocol_as_number(self):"},{"line_number":474,"context_line":"        name \u003d \u0027webservers\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2FPPA%3D","line":471,"updated":"2014-04-15 21:03:46.000000000","message":"I suggest to move this line after L467","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"db4b74a83707ca7b4648cf58b449fec227195f5f","unresolved":false,"context_lines":[{"line_number":468,"context_line":"                res_sg \u003d self.deserialize(self.fmt, res)"},{"line_number":469,"context_line":"                prefix \u003d res_sg[\u0027security_group_rule\u0027][\u0027remote_ip_prefix\u0027]"},{"line_number":470,"context_line":"                self.assertEqual(prefix, \u0027%s/%s\u0027 % (ip, addr[ip][\u0027mask\u0027]))"},{"line_number":471,"context_line":"                self.assertEqual(res.status_int, 201)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    def test_create_security_group_rule_tcp_protocol_as_number(self):"},{"line_number":474,"context_line":"        name \u003d \u0027webservers\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAXH%2F%2F5YA%3D","line":471,"in_reply_to":"AAAAW3%2F%2FPPA%3D","updated":"2014-04-16 16:15:50.000000000","message":"Done","commit_id":"561ecea59f6b331756b42e643a5d0ff6ac192b29"}]}
