)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"d16c9151c458993a5d3b6a5eca78a21b31eff9c7","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch introduces the oslo versioned objects"},{"line_number":10,"context_line":"needed for the security group extension and adds"},{"line_number":11,"context_line":"required test cases for the same."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I2d43ad79eb004e68866050fbd63d166920b9f2b0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9a061dce_ad11425f","line":12,"updated":"2016-04-07 16:19:41.000000000","message":"please add the bug number we use to track the ovo work","commit_id":"c1662f6b6515bdfd63208a557714142794a4cce8"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"bbd8dffe37e8bdcb7a765e81b1e3ca3e1fc01801","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch introduces the oslo versioned objects"},{"line_number":10,"context_line":"needed for the security group extension and adds"},{"line_number":11,"context_line":"required test cases for the same."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I2d43ad79eb004e68866050fbd63d166920b9f2b0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9a061dce_a029208c","line":12,"in_reply_to":"9a061dce_ad11425f","updated":"2016-04-08 08:03:55.000000000","message":"Done","commit_id":"c1662f6b6515bdfd63208a557714142794a4cce8"}],"neutron/common/constants.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"763a1f5579485764662bd84232369864ac3d29a2","unresolved":false,"context_lines":[{"line_number":236,"context_line":"IPV6_MAX_PREFIXLEN \u003d 128"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"PORT_MIN \u003d 1"},{"line_number":239,"context_line":"PORT_MAX \u003d 65535"},{"line_number":240,"context_line":"# Neutron-lib migration shim. This will wrap any constants that are moved"},{"line_number":241,"context_line":"# to that library in a deprecation warning, until they can be updated to"},{"line_number":242,"context_line":"# import directly from their new location."}],"source_content_type":"text/x-python","patch_set":18,"id":"9a061dce_a194b88a","line":239,"updated":"2016-04-07 12:59:25.000000000","message":"New line after that one would be welcomed.","commit_id":"08a64cdfa9559aeb10494ee4b06afc1e9e0dea72"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"fff30cccec235a989cf07982dffcac0a716b8935","unresolved":false,"context_lines":[{"line_number":236,"context_line":"IPV6_MAX_PREFIXLEN \u003d 128"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"PORT_MIN \u003d 1"},{"line_number":239,"context_line":"PORT_MAX \u003d 65535"},{"line_number":240,"context_line":"# Neutron-lib migration shim. This will wrap any constants that are moved"},{"line_number":241,"context_line":"# to that library in a deprecation warning, until they can be updated to"},{"line_number":242,"context_line":"# import directly from their new location."}],"source_content_type":"text/x-python","patch_set":18,"id":"9a061dce_01f2c499","line":239,"in_reply_to":"9a061dce_a194b88a","updated":"2016-04-07 13:06:20.000000000","message":"Done","commit_id":"08a64cdfa9559aeb10494ee4b06afc1e9e0dea72"},{"author":{"_account_id":11255,"name":"Dustin Lundquist","username":"dustin.lundquist","inactive":true},"change_message_id":"be072a3953e4da66dc9d568b066fd98a6279ec41","unresolved":false,"context_lines":[{"line_number":235,"context_line":"IPV4_MAX_PREFIXLEN \u003d 32"},{"line_number":236,"context_line":"IPV6_MAX_PREFIXLEN \u003d 128"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"PORT_MIN \u003d 1"},{"line_number":239,"context_line":"PORT_MAX \u003d 65535"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"# Neutron-lib migration shim. This will wrap any constants that are moved"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a1b2928_8b8df333","line":238,"updated":"2016-04-11 18:09:22.000000000","message":"\u0027port\u0027 is a rather overloaded term, how about L4_PORT?","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"87a0febb71c35ec95ce324495da42914f39f65f3","unresolved":false,"context_lines":[{"line_number":235,"context_line":"IPV4_MAX_PREFIXLEN \u003d 32"},{"line_number":236,"context_line":"IPV6_MAX_PREFIXLEN \u003d 128"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"PORT_MIN \u003d 1"},{"line_number":239,"context_line":"PORT_MAX \u003d 65535"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"# Neutron-lib migration shim. This will wrap any constants that are moved"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_306087ce","line":238,"in_reply_to":"5a18252c_83317def","updated":"2016-04-13 11:19:41.000000000","message":"Done","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ab561b5f6ee3b4136dd8dd4c778a26287bae962f","unresolved":false,"context_lines":[{"line_number":235,"context_line":"IPV4_MAX_PREFIXLEN \u003d 32"},{"line_number":236,"context_line":"IPV6_MAX_PREFIXLEN \u003d 128"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"PORT_MIN \u003d 1"},{"line_number":239,"context_line":"PORT_MAX \u003d 65535"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"# Neutron-lib migration shim. This will wrap any constants that are moved"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_83317def","line":238,"in_reply_to":"7a1b2928_8b8df333","updated":"2016-04-12 09:49:05.000000000","message":"I\u0027d rather go with PORT_RANGE_MIN and PORT_RANGE_MAX. It\u0027s used in security groups api.","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":19591,"name":"Saisrikiran Mudigonda","email":"saisrikiran.mudigonda@intel.com","username":"saisrikiran"},"change_message_id":"ac098bd09379bafb6e47d2d289b9e99a692af2e1","unresolved":false,"context_lines":[{"line_number":242,"context_line":""},{"line_number":243,"context_line":"PORT_RANGE_MIN \u003d 1"},{"line_number":244,"context_line":"PORT_RANGE_MAX \u003d 65535"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"# Some components communicate using private address ranges, define"},{"line_number":248,"context_line":"# them all here. These address ranges should not cause any issues"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_2906c21f","line":245,"range":{"start_line":245,"start_character":0,"end_line":245,"end_character":0},"updated":"2016-04-20 18:39:01.000000000","message":"nit: remove blank line","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"067d5fe19fd2891ebd39a54f585b11e286574f28","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"IP_ALLOWED_VERSIONS \u003d [lib_constants.IP_VERSION_4, lib_constants.IP_VERSION_6]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"IPV4_MAX_PREFIXLEN \u003d 32"},{"line_number":136,"context_line":"IPV6_MAX_PREFIXLEN \u003d 128"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"PORT_RANGE_MIN \u003d 1"},{"line_number":139,"context_line":"PORT_RANGE_MAX \u003d 65535"}],"source_content_type":"text/x-python","patch_set":45,"id":"bacf61ea_893187ef","line":136,"range":{"start_line":135,"start_character":0,"end_line":136,"end_character":24},"updated":"2016-07-27 21:23:54.000000000","message":"Can\u0027t we just use the IPv[4|]_BITS const from neutron-lib?\n\nhttps://github.com/openstack/neutron-lib/blob/0.2.0/neutron_lib/constants.py#L84","commit_id":"73ce92147d3fa3c279065a2373529c19199c8633"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7f6d594423c1573694e1a903be09909cb6524760","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"IP_ALLOWED_VERSIONS \u003d [lib_constants.IP_VERSION_4, lib_constants.IP_VERSION_6]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"IPV4_MAX_PREFIXLEN \u003d 32"},{"line_number":136,"context_line":"IPV6_MAX_PREFIXLEN \u003d 128"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"PORT_RANGE_MIN \u003d 1"},{"line_number":139,"context_line":"PORT_RANGE_MAX \u003d 65535"}],"source_content_type":"text/x-python","patch_set":45,"id":"bacf61ea_7d191488","line":136,"range":{"start_line":135,"start_character":0,"end_line":136,"end_character":24},"in_reply_to":"bacf61ea_893187ef","updated":"2016-07-29 09:52:50.000000000","message":"Yeah, sorry. The patch is still on the move, so I could miss some. I will get back to comments once it is closer to passing the gate.","commit_id":"73ce92147d3fa3c279065a2373529c19199c8633"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"697e3a0b90a02302bf31c3b2f7fc9431bf467b0a","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"IP_ALLOWED_VERSIONS \u003d [lib_constants.IP_VERSION_4, lib_constants.IP_VERSION_6]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"IPV4_MAX_PREFIXLEN \u003d 32"},{"line_number":136,"context_line":"IPV6_MAX_PREFIXLEN \u003d 128"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"PORT_RANGE_MIN \u003d 1"},{"line_number":139,"context_line":"PORT_RANGE_MAX \u003d 65535"}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_a229c88b","line":136,"range":{"start_line":135,"start_character":0,"end_line":136,"end_character":24},"updated":"2016-07-28 18:39:32.000000000","message":"Did you see my previous comment on these?\n\nhttps://review.openstack.org/#/c/284738/45/neutron/common/constants.py","commit_id":"49e753800b9c00374ee05b116f116e3cee10a258"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f8d58253be6bf758d3eebe5ca3835a713e04d1a2","unresolved":false,"context_lines":[{"line_number":127,"context_line":"# protocol for Type and Code respectively.  Therefore, the Echo Reply message"},{"line_number":128,"context_line":"# which has the type 0 is valid according to"},{"line_number":129,"context_line":"# RFC792 (http://www.faqs.org/rfcs/rfc792.html). As consequence port range min"},{"line_number":130,"context_line":"# has to start from 0."},{"line_number":131,"context_line":"PORT_RANGE_MIN \u003d 0"},{"line_number":132,"context_line":"PORT_RANGE_MAX \u003d 65535"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"ba5201f7_299d65bc","line":130,"updated":"2017-01-04 20:02:12.000000000","message":"Nice comment.","commit_id":"86e213249472f790f435f09abe1ff7a9fb79d7ef"}],"neutron/db/securitygroups_db.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"c0ec823389f0370c87fa0422d6debee23b3cf3da","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        pager \u003d base_obj.Pager("},{"line_number":186,"context_line":"            sorts\u003dsorts, limit\u003dlimit, marker\u003dmarker, page_reverse\u003dpage_reverse)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        filters \u003d _adopt_filters(filters)"},{"line_number":189,"context_line":"        sg_objs \u003d sg_obj.SecurityGroup.get_objects("},{"line_number":190,"context_line":"            context, _pager\u003dpager, **filters"},{"line_number":191,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":48,"id":"bacf61ea_1f03e943","line":188,"range":{"start_line":188,"start_character":18,"end_line":188,"end_character":32},"updated":"2016-07-28 10:57:37.000000000","message":"Nice one, we may need it in some common tools, it would be helpful not only here, for other resources also.","commit_id":"c145a7c6e1ad8b11f85f757501c69fba07d6591e"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"da45b2b51cb9c167485d4f10a7e8396158888383","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                            lazy\u003d\u0027joined\u0027, cascade\u003d\u0027delete\u0027))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def _adopt_filters(filters):"},{"line_number":64,"context_line":"    filters \u003d filters.copy()"},{"line_number":65,"context_line":"    if \u0027tenant_id\u0027 in filters:"},{"line_number":66,"context_line":"        filters[\u0027project_id\u0027] \u003d filters[\u0027tenant_id\u0027]"}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_79ac7aa0","line":63,"updated":"2016-07-29 14:30:00.000000000","message":"this will probably be needed by other classes too, it\u0027s worth moving it to a common place?","commit_id":"49e753800b9c00374ee05b116f116e3cee10a258"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"da45b2b51cb9c167485d4f10a7e8396158888383","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        remote_ip_prefix \u003d rule_dict.get(\u0027remote_ip_prefix\u0027)"},{"line_number":363,"context_line":"        if remote_ip_prefix:"},{"line_number":364,"context_line":"            remote_ip_prefix \u003d utils.AuthenticIPNetwork(remote_ip_prefix)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        protocol \u003d rule_dict.get(\u0027protocol\u0027)"},{"line_number":367,"context_line":"        if protocol:"}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_39de8211","line":364,"updated":"2016-07-29 14:30:00.000000000","message":"this should be moved to _validate_security_group_rule","commit_id":"49e753800b9c00374ee05b116f116e3cee10a258"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"810e0da213f3e90eeb7d0aa98f226607ee1a5048","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        remote_ip_prefix \u003d rule_dict.get(\u0027remote_ip_prefix\u0027)"},{"line_number":363,"context_line":"        if remote_ip_prefix:"},{"line_number":364,"context_line":"            remote_ip_prefix \u003d utils.AuthenticIPNetwork(remote_ip_prefix)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        protocol \u003d rule_dict.get(\u0027protocol\u0027)"},{"line_number":367,"context_line":"        if protocol:"}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_bfe6c812","line":364,"in_reply_to":"bacf61ea_39de8211","updated":"2016-07-29 18:09:43.000000000","message":"I am not sure: validation functions are usually perceived as not having side effects except potential exceptions raised, isn\u0027t it? I will need to check.","commit_id":"49e753800b9c00374ee05b116f116e3cee10a258"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"da45b2b51cb9c167485d4f10a7e8396158888383","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        protocol \u003d rule_dict.get(\u0027protocol\u0027)"},{"line_number":367,"context_line":"        if protocol:"},{"line_number":368,"context_line":"            # object expects strings only"},{"line_number":369,"context_line":"            protocol \u003d str(protocol)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        args \u003d {"},{"line_number":372,"context_line":"            \u0027id\u0027: (rule_dict.get(\u0027id\u0027) or uuidutils.generate_uuid()),"}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_99696e28","line":369,"updated":"2016-07-29 14:30:00.000000000","message":"just curious, what were you getting here that forced you to add a conversion? can we move it in the validation method?","commit_id":"49e753800b9c00374ee05b116f116e3cee10a258"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"810e0da213f3e90eeb7d0aa98f226607ee1a5048","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        protocol \u003d rule_dict.get(\u0027protocol\u0027)"},{"line_number":367,"context_line":"        if protocol:"},{"line_number":368,"context_line":"            # object expects strings only"},{"line_number":369,"context_line":"            protocol \u003d str(protocol)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        args \u003d {"},{"line_number":372,"context_line":"            \u0027id\u0027: (rule_dict.get(\u0027id\u0027) or uuidutils.generate_uuid()),"}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_7f857005","line":369,"in_reply_to":"bacf61ea_99696e28","updated":"2016-07-29 18:09:43.000000000","message":"I think it was an integer passed by some test. I think API layer will always convert to a string, it only happens when you call the plugin directly. Maybe it\u0027s a call to modify the test?","commit_id":"49e753800b9c00374ee05b116f116e3cee10a258"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"da45b2b51cb9c167485d4f10a7e8396158888383","unresolved":false,"context_lines":[{"line_number":380,"context_line":"            \u0027description\u0027: rule_dict.get(\u0027description\u0027),"},{"line_number":381,"context_line":"        }"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        port_range_min \u003d _safe_int(rule_dict[\u0027port_range_min\u0027])"},{"line_number":384,"context_line":"        if port_range_min:"},{"line_number":385,"context_line":"            args[\u0027port_range_min\u0027] \u003d port_range_min"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        port_range_max \u003d _safe_int(rule_dict[\u0027port_range_max\u0027])"},{"line_number":388,"context_line":"        if port_range_max:"},{"line_number":389,"context_line":"            args[\u0027port_range_max\u0027] \u003d port_range_max"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":392,"context_line":"            sg_rule \u003d sg_obj.SecurityGroupRule(context, **args)"}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_f9e6aab2","line":389,"range":{"start_line":383,"start_character":0,"end_line":389,"end_character":51},"updated":"2016-07-29 14:30:00.000000000","message":"move to _validate_port_range?","commit_id":"49e753800b9c00374ee05b116f116e3cee10a258"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"810e0da213f3e90eeb7d0aa98f226607ee1a5048","unresolved":false,"context_lines":[{"line_number":380,"context_line":"            \u0027description\u0027: rule_dict.get(\u0027description\u0027),"},{"line_number":381,"context_line":"        }"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        port_range_min \u003d _safe_int(rule_dict[\u0027port_range_min\u0027])"},{"line_number":384,"context_line":"        if port_range_min:"},{"line_number":385,"context_line":"            args[\u0027port_range_min\u0027] \u003d port_range_min"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        port_range_max \u003d _safe_int(rule_dict[\u0027port_range_max\u0027])"},{"line_number":388,"context_line":"        if port_range_max:"},{"line_number":389,"context_line":"            args[\u0027port_range_max\u0027] \u003d port_range_max"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":392,"context_line":"            sg_rule \u003d sg_obj.SecurityGroupRule(context, **args)"}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_1fac348b","line":389,"range":{"start_line":383,"start_character":0,"end_line":389,"end_character":51},"in_reply_to":"bacf61ea_f9e6aab2","updated":"2016-07-29 18:09:43.000000000","message":"ditto as above. But there is a place for modularity, I agree.","commit_id":"49e753800b9c00374ee05b116f116e3cee10a258"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"da45b2b51cb9c167485d4f10a7e8396158888383","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        remote_ip_prefix \u003d rule_dict.get(\u0027remote_ip_prefix\u0027)"},{"line_number":593,"context_line":"        if remote_ip_prefix:"},{"line_number":594,"context_line":"            rule_dict[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":595,"context_line":"                netaddr.IPNetwork(rule_dict[\u0027remote_ip_prefix\u0027])"},{"line_number":596,"context_line":"            )"},{"line_number":597,"context_line":"        for db_rule in db_rules:"},{"line_number":598,"context_line":"            rule_id \u003d db_rule.pop(\u0027id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_d451ebd9","line":595,"updated":"2016-07-29 14:30:00.000000000","message":"i wonder if we should add this conversion in the object then...instead of having it in this file multiple times.","commit_id":"49e753800b9c00374ee05b116f116e3cee10a258"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"810e0da213f3e90eeb7d0aa98f226607ee1a5048","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        remote_ip_prefix \u003d rule_dict.get(\u0027remote_ip_prefix\u0027)"},{"line_number":593,"context_line":"        if remote_ip_prefix:"},{"line_number":594,"context_line":"            rule_dict[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":595,"context_line":"                netaddr.IPNetwork(rule_dict[\u0027remote_ip_prefix\u0027])"},{"line_number":596,"context_line":"            )"},{"line_number":597,"context_line":"        for db_rule in db_rules:"},{"line_number":598,"context_line":"            rule_id \u003d db_rule.pop(\u0027id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_1fc39439","line":595,"in_reply_to":"bacf61ea_d451ebd9","updated":"2016-07-29 18:09:43.000000000","message":"we should consider being more forgiving I guess.","commit_id":"49e753800b9c00374ee05b116f116e3cee10a258"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"3086d85744b501e24c0ca4d05c39fa55ca745c98","unresolved":false,"context_lines":[{"line_number":640,"context_line":"    def get_security_group_rules_count(self, context, filters\u003dNone):"},{"line_number":641,"context_line":"        filters \u003d _adopt_filters(filters)"},{"line_number":642,"context_line":"        # TODO(ihrachys) expose count through objects API"},{"line_number":643,"context_line":"        return len(sg_obj.SecurityGroupRule.get_objects(context, **filters))"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"    def get_security_group_rule(self, context, id, fields\u003dNone):"},{"line_number":646,"context_line":"        security_group_rule \u003d self._get_security_group_rule(context, id)"}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_2a7b78c2","line":643,"updated":"2016-08-01 13:47:44.000000000","message":"In subnet adoption patch [1] I have left the get_collection_count in place, I guess it can be faster than doing len()... What do you think?\n\n[1] https://review.openstack.org/#/c/321001/13/neutron/db/db_base_plugin_v2.py@930","commit_id":"49e753800b9c00374ee05b116f116e3cee10a258"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f8d58253be6bf758d3eebe5ca3835a713e04d1a2","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        protocol \u003d rule_dict.get(\u0027protocol\u0027)"},{"line_number":341,"context_line":"        if protocol:"},{"line_number":342,"context_line":"            # object expects strings only"},{"line_number":343,"context_line":"            protocol \u003d str(protocol)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        args \u003d {"},{"line_number":346,"context_line":"            \u0027id\u0027: (rule_dict.get(\u0027id\u0027) or uuidutils.generate_uuid()),"}],"source_content_type":"text/x-python","patch_set":59,"id":"ba5201f7_6924cd5f","line":343,"updated":"2017-01-04 20:02:12.000000000","message":"Should this be six.text_type, or should this actually be two different types in py2 and py3?","commit_id":"86e213249472f790f435f09abe1ff7a9fb79d7ef"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"5cbdce449aabb081c981e3676846f88b8f35b174","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        protocol \u003d rule_dict.get(\u0027protocol\u0027)"},{"line_number":341,"context_line":"        if protocol:"},{"line_number":342,"context_line":"            # object expects strings only"},{"line_number":343,"context_line":"            protocol \u003d str(protocol)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        args \u003d {"},{"line_number":346,"context_line":"            \u0027id\u0027: (rule_dict.get(\u0027id\u0027) or uuidutils.generate_uuid()),"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_b748df88","line":343,"in_reply_to":"ba5201f7_6924cd5f","updated":"2017-01-20 18:17:24.000000000","message":"Done","commit_id":"86e213249472f790f435f09abe1ff7a9fb79d7ef"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f8d58253be6bf758d3eebe5ca3835a713e04d1a2","unresolved":false,"context_lines":[{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        :returns: the default security group id for given tenant."},{"line_number":687,"context_line":"        \"\"\""},{"line_number":688,"context_line":"        default_group \u003d sg_obj.SecurityGroup.get_objects("},{"line_number":689,"context_line":"            context,"},{"line_number":690,"context_line":"            project_id\u003dtenant_id,"},{"line_number":691,"context_line":"            is_default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":59,"id":"ba5201f7_8f71f1aa","line":688,"updated":"2017-01-04 20:02:12.000000000","message":"Why get_objects() instead of get_object() ? Should there be a composite key including is_default?","commit_id":"86e213249472f790f435f09abe1ff7a9fb79d7ef"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"5cbdce449aabb081c981e3676846f88b8f35b174","unresolved":false,"context_lines":[{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        :returns: the default security group id for given tenant."},{"line_number":687,"context_line":"        \"\"\""},{"line_number":688,"context_line":"        default_group \u003d sg_obj.SecurityGroup.get_objects("},{"line_number":689,"context_line":"            context,"},{"line_number":690,"context_line":"            project_id\u003dtenant_id,"},{"line_number":691,"context_line":"            is_default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":59,"id":"5a3905b3_976e83ff","line":688,"in_reply_to":"ba5201f7_8f71f1aa","updated":"2017-01-20 18:17:24.000000000","message":"This is because the primary key of securitygroups is id, so there is no warranty to get an unique object here.","commit_id":"86e213249472f790f435f09abe1ff7a9fb79d7ef"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c5b8ddeb01aae3462950c66f726470998d7b45e7","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                direction\u003d\u0027egress\u0027, ethertype\u003dethertype)"},{"line_number":117,"context_line":"            egress_rule.create()"},{"line_number":118,"context_line":"            sg.rules.append(egress_rule)"},{"line_number":119,"context_line":"        sg.obj_reset_changes([\u0027rules\u0027])"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        self._registry_notify(resources.SECURITY_GROUP,"},{"line_number":122,"context_line":"                              events.PRECOMMIT_CREATE,"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba2be162_50b439d0","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":39},"updated":"2017-03-01 21:48:15.000000000","message":"I wonder why sg.update() is not called to update db ?","commit_id":"3a7d1b7200dfb883b35515bd192e8354b9368b03"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"00b94c5c03c9c75e57736be7d47c4c693f9ea73d","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                direction\u003d\u0027egress\u0027, ethertype\u003dethertype)"},{"line_number":117,"context_line":"            egress_rule.create()"},{"line_number":118,"context_line":"            sg.rules.append(egress_rule)"},{"line_number":119,"context_line":"        sg.obj_reset_changes([\u0027rules\u0027])"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        self._registry_notify(resources.SECURITY_GROUP,"},{"line_number":122,"context_line":"                              events.PRECOMMIT_CREATE,"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba2be162_0e6184d3","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":39},"in_reply_to":"ba2be162_50b439d0","updated":"2017-03-02 20:45:22.000000000","message":"Maybe in order to reduce calls to the DB.  Forcing an update here will result in delete remove all the rules and create a new ones with the exact same data and fetching the rows to populate the synthetic fields from the DB.  I can drop the lines 110 and 117 to use an update here, what do you think?","commit_id":"3a7d1b7200dfb883b35515bd192e8354b9368b03"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c5b8ddeb01aae3462950c66f726470998d7b45e7","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":160,"context_line":"    def get_security_groups_count(self, context, filters\u003dNone):"},{"line_number":161,"context_line":"        # TODO(ihrachys) expose count through objects API"},{"line_number":162,"context_line":"        return len(sg_obj.SecurityGroup.get_objects("},{"line_number":163,"context_line":"            context, validate_filters\u003dFalse, **filters))"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":166,"context_line":"    def get_security_group(self, context, id, fields\u003dNone, tenant_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba2be162_30a0a543","line":163,"range":{"start_line":161,"start_character":7,"end_line":163,"end_character":56},"updated":"2017-03-01 21:48:15.000000000","message":"count is already in object/db/api.py so might want to use that instead of len","commit_id":"3a7d1b7200dfb883b35515bd192e8354b9368b03"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"00b94c5c03c9c75e57736be7d47c4c693f9ea73d","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":160,"context_line":"    def get_security_groups_count(self, context, filters\u003dNone):"},{"line_number":161,"context_line":"        # TODO(ihrachys) expose count through objects API"},{"line_number":162,"context_line":"        return len(sg_obj.SecurityGroup.get_objects("},{"line_number":163,"context_line":"            context, validate_filters\u003dFalse, **filters))"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":166,"context_line":"    def get_security_group(self, context, id, fields\u003dNone, tenant_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba2be162_2ee3a834","line":163,"range":{"start_line":161,"start_character":7,"end_line":163,"end_character":56},"in_reply_to":"ba2be162_30a0a543","updated":"2017-03-02 20:45:22.000000000","message":"Done","commit_id":"3a7d1b7200dfb883b35515bd192e8354b9368b03"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c5b8ddeb01aae3462950c66f726470998d7b45e7","unresolved":false,"context_lines":[{"line_number":363,"context_line":"            \u0027description\u0027: rule_dict.get(\u0027description\u0027),"},{"line_number":364,"context_line":"        }"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        port_range_min \u003d _safe_int(rule_dict[\u0027port_range_min\u0027])"},{"line_number":367,"context_line":"        if port_range_min is not None:"},{"line_number":368,"context_line":"            args[\u0027port_range_min\u0027] \u003d port_range_min"},{"line_number":369,"context_line":""}],"source_content_type":"text/x-python","patch_set":62,"id":"ba2be162_2b9f5ab5","line":366,"range":{"start_line":366,"start_character":25,"end_line":366,"end_character":34},"updated":"2017-03-01 21:48:15.000000000","message":"i doubt if it is needed, correct me if I am wrong, this will be validated in client and I see it catches exception on if it is not and pass, how should it proceed if value is not int ??","commit_id":"3a7d1b7200dfb883b35515bd192e8354b9368b03"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"00b94c5c03c9c75e57736be7d47c4c693f9ea73d","unresolved":false,"context_lines":[{"line_number":363,"context_line":"            \u0027description\u0027: rule_dict.get(\u0027description\u0027),"},{"line_number":364,"context_line":"        }"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        port_range_min \u003d _safe_int(rule_dict[\u0027port_range_min\u0027])"},{"line_number":367,"context_line":"        if port_range_min is not None:"},{"line_number":368,"context_line":"            args[\u0027port_range_min\u0027] \u003d port_range_min"},{"line_number":369,"context_line":""}],"source_content_type":"text/x-python","patch_set":62,"id":"ba2be162_4e2e1c44","line":366,"range":{"start_line":366,"start_character":25,"end_line":366,"end_character":34},"in_reply_to":"ba2be162_2b9f5ab5","updated":"2017-03-02 20:45:22.000000000","message":"I need to verify why this was created but if the value is not an integer then will be parsed as None value","commit_id":"3a7d1b7200dfb883b35515bd192e8354b9368b03"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c5b8ddeb01aae3462950c66f726470998d7b45e7","unresolved":false,"context_lines":[{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        :returns: the default security group id for given tenant."},{"line_number":709,"context_line":"        \"\"\""},{"line_number":710,"context_line":"        default_group \u003d sg_obj.SecurityGroup.get_objects("},{"line_number":711,"context_line":"            context,"},{"line_number":712,"context_line":"            project_id\u003dtenant_id,"},{"line_number":713,"context_line":"            is_default\u003dTrue,"},{"line_number":714,"context_line":"        )"},{"line_number":715,"context_line":"        if default_group:"},{"line_number":716,"context_line":"            return default_group[0].id"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        security_group \u003d {"},{"line_number":719,"context_line":"            \u0027security_group\u0027:"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba2be162_6baf9294","line":716,"range":{"start_line":710,"start_character":7,"end_line":716,"end_character":38},"updated":"2017-03-01 21:48:15.000000000","message":"instead of repeating I guess _get_default_sg_id can be used here","commit_id":"3a7d1b7200dfb883b35515bd192e8354b9368b03"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"00b94c5c03c9c75e57736be7d47c4c693f9ea73d","unresolved":false,"context_lines":[{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        :returns: the default security group id for given tenant."},{"line_number":709,"context_line":"        \"\"\""},{"line_number":710,"context_line":"        default_group \u003d sg_obj.SecurityGroup.get_objects("},{"line_number":711,"context_line":"            context,"},{"line_number":712,"context_line":"            project_id\u003dtenant_id,"},{"line_number":713,"context_line":"            is_default\u003dTrue,"},{"line_number":714,"context_line":"        )"},{"line_number":715,"context_line":"        if default_group:"},{"line_number":716,"context_line":"            return default_group[0].id"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        security_group \u003d {"},{"line_number":719,"context_line":"            \u0027security_group\u0027:"}],"source_content_type":"text/x-python","patch_set":62,"id":"ba2be162_0e9ee462","line":716,"range":{"start_line":710,"start_character":7,"end_line":716,"end_character":38},"in_reply_to":"ba2be162_6baf9294","updated":"2017-03-02 20:45:22.000000000","message":"Make sense, the only case to continue with this flow is when there is no default_group associated","commit_id":"3a7d1b7200dfb883b35515bd192e8354b9368b03"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4f1e1605a1fc7b0058cd26361c970fbe26a0582d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from neutron.objects import securitygroup as sg_obj"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def _safe_int(val):"},{"line_number":43,"context_line":"    try:"},{"line_number":44,"context_line":"        return int(val)"},{"line_number":45,"context_line":"    except (ValueError, TypeError):"}],"source_content_type":"text/x-python","patch_set":69,"id":"5ff73747_ef6649bb","line":42,"updated":"2017-05-01 08:03:47.000000000","message":"this should be a common utility method","commit_id":"fb2ea31c685772fc7809259fc90a2e3c0849f548"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5df914f34be653e5f879c1a0e75deaab1786c544","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from neutron.objects import securitygroup as sg_obj"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def _safe_int(val):"},{"line_number":43,"context_line":"    try:"},{"line_number":44,"context_line":"        return int(val)"},{"line_number":45,"context_line":"    except (ValueError, TypeError):"}],"source_content_type":"text/x-python","patch_set":69,"id":"1f013ff3_66af9be3","line":42,"in_reply_to":"5ff73747_ef6649bb","updated":"2017-05-16 22:01:43.000000000","message":"Done","commit_id":"fb2ea31c685772fc7809259fc90a2e3c0849f548"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4f1e1605a1fc7b0058cd26361c970fbe26a0582d","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":248,"context_line":"            sg \u003d self._get_security_group(context, id)"},{"line_number":249,"context_line":"            if sg[\u0027name\u0027] \u003d\u003d \u0027default\u0027 and \u0027name\u0027 in s:"},{"line_number":250,"context_line":"                raise ext_sg.SecurityGroupCannotUpdateDefault()"},{"line_number":251,"context_line":"            self._registry_notify("},{"line_number":252,"context_line":"                    resources.SECURITY_GROUP,"}],"source_content_type":"text/x-python","patch_set":69,"id":"5ff73747_0f53b5e3","line":249,"range":{"start_line":249,"start_character":39,"end_line":249,"end_character":54},"updated":"2017-05-01 08:03:47.000000000","message":"once this is an object this is no longer relevant","commit_id":"fb2ea31c685772fc7809259fc90a2e3c0849f548"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4f1e1605a1fc7b0058cd26361c970fbe26a0582d","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":248,"context_line":"            sg \u003d self._get_security_group(context, id)"},{"line_number":249,"context_line":"            if sg[\u0027name\u0027] \u003d\u003d \u0027default\u0027 and \u0027name\u0027 in s:"},{"line_number":250,"context_line":"                raise ext_sg.SecurityGroupCannotUpdateDefault()"},{"line_number":251,"context_line":"            self._registry_notify("},{"line_number":252,"context_line":"                    resources.SECURITY_GROUP,"}],"source_content_type":"text/x-python","patch_set":69,"id":"5ff73747_2f48b12a","line":249,"range":{"start_line":249,"start_character":15,"end_line":249,"end_character":25},"updated":"2017-05-01 08:03:47.000000000","message":"this is now an object can we use . ?","commit_id":"fb2ea31c685772fc7809259fc90a2e3c0849f548"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5df914f34be653e5f879c1a0e75deaab1786c544","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":248,"context_line":"            sg \u003d self._get_security_group(context, id)"},{"line_number":249,"context_line":"            if sg[\u0027name\u0027] \u003d\u003d \u0027default\u0027 and \u0027name\u0027 in s:"},{"line_number":250,"context_line":"                raise ext_sg.SecurityGroupCannotUpdateDefault()"},{"line_number":251,"context_line":"            self._registry_notify("},{"line_number":252,"context_line":"                    resources.SECURITY_GROUP,"}],"source_content_type":"text/x-python","patch_set":69,"id":"1f013ff3_06d697f2","line":249,"range":{"start_line":249,"start_character":15,"end_line":249,"end_character":25},"in_reply_to":"5ff73747_2f48b12a","updated":"2017-05-16 22:01:43.000000000","message":"s is still dictionary, for sg if think it can be sg.name.","commit_id":"fb2ea31c685772fc7809259fc90a2e3c0849f548"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04d50cf1d0d75a21d3c3de00ba333913140442e5","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import six"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import netaddr"},{"line_number":18,"context_line":"from neutron_lib.api import validators"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_fb6addea","line":15,"updated":"2017-05-22 20:15:43.000000000","message":"nit: should have probably gone to line 25-26.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5227aecc07079301a7d07460b4a9f0bcc943bc03","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import six"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import netaddr"},{"line_number":18,"context_line":"from neutron_lib.api import validators"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_7feeb2b4","line":15,"in_reply_to":"ff0f0b1f_fb6addea","updated":"2017-05-22 23:45:50.000000000","message":"Done","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04d50cf1d0d75a21d3c3de00ba333913140442e5","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                                  exc_cls\u003dext_sg.SecurityGroupConflict,"},{"line_number":121,"context_line":"                                  **kwargs)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        secgroup_dict \u003d self._make_security_group_dict(sg)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        kwargs[\u0027security_group\u0027] \u003d secgroup_dict"},{"line_number":126,"context_line":"        registry.notify(resources.SECURITY_GROUP, events.AFTER_CREATE, self,"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_be99f3c4","line":123,"updated":"2017-05-22 20:15:43.000000000","message":"Note that this may break some external consumers who rely on a model being passed into plugin extensions. We originally implemented obj.db_obj exactly for this use case. Is there a reason not to pass a model here?","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"d2405981438b29028013d23389fb30dd4b3c7505","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                                  exc_cls\u003dext_sg.SecurityGroupConflict,"},{"line_number":121,"context_line":"                                  **kwargs)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        secgroup_dict \u003d self._make_security_group_dict(sg)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        kwargs[\u0027security_group\u0027] \u003d secgroup_dict"},{"line_number":126,"context_line":"        registry.notify(resources.SECURITY_GROUP, events.AFTER_CREATE, self,"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_c70d5de9","line":123,"in_reply_to":"ff0f0b1f_7693e95d","updated":"2017-05-26 20:37:21.000000000","message":"that works","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5d66bda2aa1bb88c080ce9f56b77f7692e21c548","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                                  exc_cls\u003dext_sg.SecurityGroupConflict,"},{"line_number":121,"context_line":"                                  **kwargs)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        secgroup_dict \u003d self._make_security_group_dict(sg)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        kwargs[\u0027security_group\u0027] \u003d secgroup_dict"},{"line_number":126,"context_line":"        registry.notify(resources.SECURITY_GROUP, events.AFTER_CREATE, self,"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_93485d5c","line":123,"in_reply_to":"ff0f0b1f_8d5eff41","updated":"2017-05-23 02:37:58.000000000","message":"Yes, this. In the past, we tried to pass a db model into extensions. I think we haven\u0027t made any policy changes to justify passing OVO yet.\n\nThe db model is available as obj.db_obj, though considering you create rules after initial group object, you may need to refetch the model (probably via refetching group OVO once again) before passing it through.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"547c06d775fb7934142f8bccaac073030d194157","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                                  exc_cls\u003dext_sg.SecurityGroupConflict,"},{"line_number":121,"context_line":"                                  **kwargs)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        secgroup_dict \u003d self._make_security_group_dict(sg)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        kwargs[\u0027security_group\u0027] \u003d secgroup_dict"},{"line_number":126,"context_line":"        registry.notify(resources.SECURITY_GROUP, events.AFTER_CREATE, self,"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_fd4a3c81","line":123,"in_reply_to":"ff0f0b1f_93485d5c","updated":"2017-05-26 16:57:59.000000000","message":"sg.db_obj doesn\u0027t have rules loaded right after creation, we are returning serurity_groups dict not sg object.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5227aecc07079301a7d07460b4a9f0bcc943bc03","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                                  exc_cls\u003dext_sg.SecurityGroupConflict,"},{"line_number":121,"context_line":"                                  **kwargs)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        secgroup_dict \u003d self._make_security_group_dict(sg)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        kwargs[\u0027security_group\u0027] \u003d secgroup_dict"},{"line_number":126,"context_line":"        registry.notify(resources.SECURITY_GROUP, events.AFTER_CREATE, self,"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_8d5eff41","line":123,"in_reply_to":"ff0f0b1f_be99f3c4","updated":"2017-05-22 23:45:50.000000000","message":"I didn\u0027t get this, we replaced the model fetch with ovo fetch ? do you mean we should rebuild model from object and pass it ?","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2e8393b38a8c1789107dd799b7af8d548f651da0","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                                  exc_cls\u003dext_sg.SecurityGroupConflict,"},{"line_number":121,"context_line":"                                  **kwargs)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        secgroup_dict \u003d self._make_security_group_dict(sg)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        kwargs[\u0027security_group\u0027] \u003d secgroup_dict"},{"line_number":126,"context_line":"        registry.notify(resources.SECURITY_GROUP, events.AFTER_CREATE, self,"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_7693e95d","line":123,"in_reply_to":"ff0f0b1f_fd4a3c81","updated":"2017-05-26 18:12:22.000000000","message":"Maybe we then need to refetch it with rules included; or make the object exposing the actual state of the model, including all relationships reloaded.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04d50cf1d0d75a21d3c3de00ba333913140442e5","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            sorts\u003dsorts, limit\u003dlimit, marker\u003dmarker, page_reverse\u003dpage_reverse)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        sg_objs \u003d sg_obj.SecurityGroup.get_objects("},{"line_number":151,"context_line":"            context, _pager\u003dpager, validate_filters\u003dFalse, **filters)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        return [self._make_security_group_dict(obj, fields) for obj in sg_objs]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_3e6283af","line":151,"range":{"start_line":151,"start_character":68,"end_line":151,"end_character":69},"updated":"2017-05-22 20:15:43.000000000","message":"filters may be None (see line 131), then it will raise an exception. Consider doing filters \u003d filters or {} before unpacking the variable.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5227aecc07079301a7d07460b4a9f0bcc943bc03","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            sorts\u003dsorts, limit\u003dlimit, marker\u003dmarker, page_reverse\u003dpage_reverse)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        sg_objs \u003d sg_obj.SecurityGroup.get_objects("},{"line_number":151,"context_line":"            context, _pager\u003dpager, validate_filters\u003dFalse, **filters)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        return [self._make_security_group_dict(obj, fields) for obj in sg_objs]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_4d290799","line":151,"range":{"start_line":151,"start_character":68,"end_line":151,"end_character":69},"in_reply_to":"ff0f0b1f_3e6283af","updated":"2017-05-22 23:45:50.000000000","message":"Done","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04d50cf1d0d75a21d3c3de00ba333913140442e5","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":156,"context_line":"    def get_security_groups_count(self, context, filters\u003dNone):"},{"line_number":157,"context_line":"        return sg_obj.SecurityGroup.count("},{"line_number":158,"context_line":"            context, validate_filters\u003dFalse, **filters)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":161,"context_line":"    def get_security_group(self, context, id, fields\u003dNone, tenant_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_9e206f4a","line":158,"updated":"2017-05-22 20:15:43.000000000","message":"ditto","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5227aecc07079301a7d07460b4a9f0bcc943bc03","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":156,"context_line":"    def get_security_groups_count(self, context, filters\u003dNone):"},{"line_number":157,"context_line":"        return sg_obj.SecurityGroup.count("},{"line_number":158,"context_line":"            context, validate_filters\u003dFalse, **filters)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":161,"context_line":"    def get_security_group(self, context, id, fields\u003dNone, tenant_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_4d02270d","line":158,"in_reply_to":"ff0f0b1f_9e206f4a","updated":"2017-05-22 23:45:50.000000000","message":"Done","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04d50cf1d0d75a21d3c3de00ba333913140442e5","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            \u0027description\u0027: rule_dict.get(\u0027description\u0027),"},{"line_number":367,"context_line":"        }"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        port_range_min \u003d utils.safe_int(rule_dict[\u0027port_range_min\u0027])"},{"line_number":370,"context_line":"        if port_range_min is not None:"},{"line_number":371,"context_line":"            args[\u0027port_range_min\u0027] \u003d port_range_min"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_3ef28371","line":369,"updated":"2017-05-22 20:15:43.000000000","message":"before the change, if port_range_min (or _max) were some garbage, like \u0027dsdsagfdg\u0027, then the request would fail, because the db model defines the column as an integer. But now, safe_int will return None, and we will just ignore the field, still creating a rule. I think it\u0027s wrong, we should keep the original behavior (fail on bad input).","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5227aecc07079301a7d07460b4a9f0bcc943bc03","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            \u0027description\u0027: rule_dict.get(\u0027description\u0027),"},{"line_number":367,"context_line":"        }"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        port_range_min \u003d utils.safe_int(rule_dict[\u0027port_range_min\u0027])"},{"line_number":370,"context_line":"        if port_range_min is not None:"},{"line_number":371,"context_line":"            args[\u0027port_range_min\u0027] \u003d port_range_min"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_5f2d2efc","line":369,"in_reply_to":"ff0f0b1f_3ef28371","updated":"2017-05-22 23:45:50.000000000","message":"would it make sense to raise an exception in safe_int check ?","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5d66bda2aa1bb88c080ce9f56b77f7692e21c548","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            \u0027description\u0027: rule_dict.get(\u0027description\u0027),"},{"line_number":367,"context_line":"        }"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        port_range_min \u003d utils.safe_int(rule_dict[\u0027port_range_min\u0027])"},{"line_number":370,"context_line":"        if port_range_min is not None:"},{"line_number":371,"context_line":"            args[\u0027port_range_min\u0027] \u003d port_range_min"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_93617dd6","line":369,"in_reply_to":"ff0f0b1f_5f2d2efc","updated":"2017-05-23 02:37:58.000000000","message":"Yeah, InvalidInput or smth. You may want to get rid of safe_int and just do exception conversion in-place in the plugin code.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"d2405981438b29028013d23389fb30dd4b3c7505","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            \u0027description\u0027: rule_dict.get(\u0027description\u0027),"},{"line_number":367,"context_line":"        }"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        port_range_min \u003d utils.safe_int(rule_dict[\u0027port_range_min\u0027])"},{"line_number":370,"context_line":"        if port_range_min is not None:"},{"line_number":371,"context_line":"            args[\u0027port_range_min\u0027] \u003d port_range_min"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_42bedbff","line":369,"in_reply_to":"ff0f0b1f_93617dd6","updated":"2017-05-26 20:37:21.000000000","message":"because none is allowed, as I see some tests are using none, I added a method which will return if value is None and if not it will safely try int conversion and if that goes wrong will raise an exception.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04d50cf1d0d75a21d3c3de00ba333913140442e5","unresolved":false,"context_lines":[{"line_number":383,"context_line":"            self._registry_notify(resources.SECURITY_GROUP_RULE,"},{"line_number":384,"context_line":"                              events.PRECOMMIT_CREATE,"},{"line_number":385,"context_line":"                              exc_cls\u003dext_sg.SecurityGroupConflict, **kwargs)"},{"line_number":386,"context_line":"        return self._make_security_group_rule_dict(sg_rule)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    def _get_ip_proto_number(self, protocol):"},{"line_number":389,"context_line":"        if protocol is None:"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_deba676c","line":386,"updated":"2017-05-22 20:15:43.000000000","message":"same concern about passing an object and not a db model into extensions.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"d2405981438b29028013d23389fb30dd4b3c7505","unresolved":false,"context_lines":[{"line_number":383,"context_line":"            self._registry_notify(resources.SECURITY_GROUP_RULE,"},{"line_number":384,"context_line":"                              events.PRECOMMIT_CREATE,"},{"line_number":385,"context_line":"                              exc_cls\u003dext_sg.SecurityGroupConflict, **kwargs)"},{"line_number":386,"context_line":"        return self._make_security_group_rule_dict(sg_rule)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    def _get_ip_proto_number(self, protocol):"},{"line_number":389,"context_line":"        if protocol is None:"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_0236a3b5","line":386,"in_reply_to":"ff0f0b1f_deba676c","updated":"2017-05-26 20:37:21.000000000","message":"Done","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04d50cf1d0d75a21d3c3de00ba333913140442e5","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        value \u003d sgr.get(\u0027protocol\u0027)"},{"line_number":527,"context_line":"        if value:"},{"line_number":528,"context_line":"            res[\u0027protocol\u0027] \u003d self._get_ip_proto_name_and_num(value)"},{"line_number":529,"context_line":"        value \u003d sgr.get(\u0027remote_ip_prefix\u0027)"},{"line_number":530,"context_line":"        if value:"},{"line_number":531,"context_line":"            res[\u0027remote_ip_prefix\u0027] \u003d [str(value)]"},{"line_number":532,"context_line":"        return res"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_01263e69","line":529,"updated":"2017-05-22 20:15:43.000000000","message":"I am puzzled why this change, and the change in lines 593-594, are needed for the patch. Can you describe it in the commit message? For what I see, sgr here comes from API request, so why is there any difference in filters?","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5227aecc07079301a7d07460b4a9f0bcc943bc03","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        value \u003d sgr.get(\u0027protocol\u0027)"},{"line_number":527,"context_line":"        if value:"},{"line_number":528,"context_line":"            res[\u0027protocol\u0027] \u003d self._get_ip_proto_name_and_num(value)"},{"line_number":529,"context_line":"        value \u003d sgr.get(\u0027remote_ip_prefix\u0027)"},{"line_number":530,"context_line":"        if value:"},{"line_number":531,"context_line":"            res[\u0027remote_ip_prefix\u0027] \u003d [str(value)]"},{"line_number":532,"context_line":"        return res"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_df401ea8","line":529,"in_reply_to":"ff0f0b1f_01263e69","updated":"2017-05-22 23:45:50.000000000","message":"removed this","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5d66bda2aa1bb88c080ce9f56b77f7692e21c548","unresolved":false,"context_lines":[{"line_number":590,"context_line":"                raise ext_sg.SecurityGroupRuleExists(rule_id\u003drule_id)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def _validate_duplicate_ip_prefix(self, ip_prefix, other_ip_prefix):"},{"line_number":593,"context_line":"        if other_ip_prefix is not None:"},{"line_number":594,"context_line":"            other_ip_prefix \u003d str(other_ip_prefix)"},{"line_number":595,"context_line":"        all_address \u003d [\u00270.0.0.0/0\u0027, \u0027::/0\u0027, None]"},{"line_number":596,"context_line":"        if ip_prefix \u003d\u003d other_ip_prefix:"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_b3ada1ea","line":593,"updated":"2017-05-23 02:37:58.000000000","message":"this, I also am not sure why it\u0027s needed.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"d2405981438b29028013d23389fb30dd4b3c7505","unresolved":false,"context_lines":[{"line_number":590,"context_line":"                raise ext_sg.SecurityGroupRuleExists(rule_id\u003drule_id)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def _validate_duplicate_ip_prefix(self, ip_prefix, other_ip_prefix):"},{"line_number":593,"context_line":"        if other_ip_prefix is not None:"},{"line_number":594,"context_line":"            other_ip_prefix \u003d str(other_ip_prefix)"},{"line_number":595,"context_line":"        all_address \u003d [\u00270.0.0.0/0\u0027, \u0027::/0\u0027, None]"},{"line_number":596,"context_line":"        if ip_prefix \u003d\u003d other_ip_prefix:"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_60e2ff03","line":593,"in_reply_to":"ff0f0b1f_b3ada1ea","updated":"2017-05-26 20:37:21.000000000","message":"it is still AuthenticIpnetwork which needs to be converted to string for comparison with ip_prefix to work properly other wise it will allow sg creation with same rules multiple times","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04d50cf1d0d75a21d3c3de00ba333913140442e5","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            sorts\u003dsorts, marker\u003dmarker, limit\u003dlimit, page_reverse\u003dpage_reverse)"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        rule_objs \u003d sg_obj.SecurityGroupRule.get_objects("},{"line_number":628,"context_line":"            context, _pager\u003dpager, validate_filters\u003dFalse, **filters"},{"line_number":629,"context_line":"        )"},{"line_number":630,"context_line":"        return ["},{"line_number":631,"context_line":"            self._make_security_group_rule_dict(obj, fields)"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_a1c43292","line":628,"updated":"2017-05-22 20:15:43.000000000","message":"filters can be None (see line 621), so do filters \u003d filters or {} before this line.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5227aecc07079301a7d07460b4a9f0bcc943bc03","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            sorts\u003dsorts, marker\u003dmarker, limit\u003dlimit, page_reverse\u003dpage_reverse)"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        rule_objs \u003d sg_obj.SecurityGroupRule.get_objects("},{"line_number":628,"context_line":"            context, _pager\u003dpager, validate_filters\u003dFalse, **filters"},{"line_number":629,"context_line":"        )"},{"line_number":630,"context_line":"        return ["},{"line_number":631,"context_line":"            self._make_security_group_rule_dict(obj, fields)"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_1f0c5692","line":628,"in_reply_to":"ff0f0b1f_a1c43292","updated":"2017-05-22 23:45:50.000000000","message":"Done","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04d50cf1d0d75a21d3c3de00ba333913140442e5","unresolved":false,"context_lines":[{"line_number":635,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":636,"context_line":"    def get_security_group_rules_count(self, context, filters\u003dNone):"},{"line_number":637,"context_line":"        return sg_obj.SecurityGroupRule.count("},{"line_number":638,"context_line":"            context, validate_filters\u003dFalse, **filters)"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":641,"context_line":"    def get_security_group_rule(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_e1434a12","line":638,"range":{"start_line":638,"start_character":47,"end_line":638,"end_character":54},"updated":"2017-05-22 20:15:43.000000000","message":"ditto","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5227aecc07079301a7d07460b4a9f0bcc943bc03","unresolved":false,"context_lines":[{"line_number":635,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":636,"context_line":"    def get_security_group_rules_count(self, context, filters\u003dNone):"},{"line_number":637,"context_line":"        return sg_obj.SecurityGroupRule.count("},{"line_number":638,"context_line":"            context, validate_filters\u003dFalse, **filters)"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":641,"context_line":"    def get_security_group_rule(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_5f164eaa","line":638,"range":{"start_line":638,"start_character":47,"end_line":638,"end_character":54},"in_reply_to":"ff0f0b1f_e1434a12","updated":"2017-05-22 23:45:50.000000000","message":"Done","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3b4b3e6e25297b12bf31e7516e5b02f9d14f3f49","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                        direction\u003d\u0027ingress\u0027, ethertype\u003dethertype,"},{"line_number":107,"context_line":"                        remote_group_id\u003dsg.id)"},{"line_number":108,"context_line":"                    ingress_rule.create()"},{"line_number":109,"context_line":"                    sg.rules.append(ingress_rule)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"                egress_rule \u003d sg_obj.SecurityGroupRule("},{"line_number":112,"context_line":"                    context, id\u003duuidutils.generate_uuid(),"}],"source_content_type":"text/x-python","patch_set":75,"id":"df140735_00f3310c","line":109,"updated":"2017-05-30 20:00:29.000000000","message":"If we now refetch sg, then there is no reason to append rules, or reset changes.","commit_id":"a90f3f643d081552f87ca320b418d125b0107749"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3b4b3e6e25297b12bf31e7516e5b02f9d14f3f49","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                    protocol]"},{"line_number":413,"context_line":"        return [protocol, protocol]"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def _safe_int(self, port_range):"},{"line_number":416,"context_line":"        if port_range is None:"},{"line_number":417,"context_line":"            return"},{"line_number":418,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":75,"id":"df140735_c0c53990","line":415,"updated":"2017-05-30 20:00:29.000000000","message":"this function could have some more specific name, since it deals with port ranges.","commit_id":"a90f3f643d081552f87ca320b418d125b0107749"}],"neutron/objects/common_types.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"5398843d1791704428eac1a1b5d3c318b640d63e","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"class PortRange(RangeConstrainedInteger):"},{"line_number":80,"context_line":"    def __init__(self, **kwargs):"},{"line_number":81,"context_line":"        super(PortRange, self).__init__(start\u003d1, end\u003d65535, **kwargs)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"class PortRangeField(obj_fields.AutoTypedField):"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_63f4725a","line":81,"range":{"start_line":81,"start_character":40,"end_line":81,"end_character":58},"updated":"2016-04-07 10:17:58.000000000","message":"Would we like to have any constants for those?","commit_id":"f739f05a57700791005aebd1308f153e7673495a"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"4b16c71ed2261ac18e0875916ab26b5d14591131","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"class PortRange(RangeConstrainedInteger):"},{"line_number":80,"context_line":"    def __init__(self, **kwargs):"},{"line_number":81,"context_line":"        super(PortRange, self).__init__(start\u003d1, end\u003d65535, **kwargs)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"class PortRangeField(obj_fields.AutoTypedField):"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_e2d073cb","line":81,"range":{"start_line":81,"start_character":40,"end_line":81,"end_character":58},"in_reply_to":"9a061dce_63f4725a","updated":"2016-04-07 12:36:42.000000000","message":"Done","commit_id":"f739f05a57700791005aebd1308f153e7673495a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04d50cf1d0d75a21d3c3de00ba333913140442e5","unresolved":false,"context_lines":[{"line_number":79,"context_line":"# protocol for Type and Code respectively.  Therefore, the Echo Reply message"},{"line_number":80,"context_line":"# which has the type 0 is valid according to"},{"line_number":81,"context_line":"# RFC792 (http://www.faqs.org/rfcs/rfc792.html). As consequence port range min"},{"line_number":82,"context_line":"# has to start from 0."},{"line_number":83,"context_line":"class PortRangeWith0Field(obj_fields.AutoTypedField):"},{"line_number":84,"context_line":"    AUTO_TYPE \u003d PortRange(start\u003d0)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_61161af4","line":82,"updated":"2017-05-22 20:15:43.000000000","message":"(no action required): that\u0027s nice, but why does the commit update belong to this patch? could probably go into a separate patch.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5227aecc07079301a7d07460b4a9f0bcc943bc03","unresolved":false,"context_lines":[{"line_number":79,"context_line":"# protocol for Type and Code respectively.  Therefore, the Echo Reply message"},{"line_number":80,"context_line":"# which has the type 0 is valid according to"},{"line_number":81,"context_line":"# RFC792 (http://www.faqs.org/rfcs/rfc792.html). As consequence port range min"},{"line_number":82,"context_line":"# has to start from 0."},{"line_number":83,"context_line":"class PortRangeWith0Field(obj_fields.AutoTypedField):"},{"line_number":84,"context_line":"    AUTO_TYPE \u003d PortRange(start\u003d0)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_bf268a14","line":82,"in_reply_to":"ff0f0b1f_61161af4","updated":"2017-05-22 23:45:50.000000000","message":"this  note has nothing to do with this patch so removed.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"}],"neutron/objects/port/extensions/securitygroups.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    fields \u003d {"},{"line_number":32,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":33,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":34,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField()"},{"line_number":37,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_b920184b","line":34,"updated":"2016-03-15 17:40:47.000000000","message":"For description, we need to rely on Jakub\u0027s decorator.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField()"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_b995b841","line":39,"updated":"2016-03-15 17:40:47.000000000","message":"If it\u0027s synthetic, we need an implementation of it.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"2066e218b02aeddb12beb99e018842f4794c626c","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField()"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a061dce_4d9c2b0f","line":39,"in_reply_to":"1af94dfe_b995b841","updated":"2016-04-06 14:40:34.000000000","message":"Done","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    primary_key \u003d \u0027tenant_id\u0027"},{"line_number":50,"context_line":"    # TODO(slunkad) Update primary key once"},{"line_number":51,"context_line":"    # https://review.openstack.org/#/c/275790/ is merged"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027security_group_id\u0027]"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_d9aa4470","line":51,"updated":"2016-03-15 17:40:47.000000000","message":"It\u0027s merged. Please rebase.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"2066e218b02aeddb12beb99e018842f4794c626c","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    primary_key \u003d \u0027tenant_id\u0027"},{"line_number":50,"context_line":"    # TODO(slunkad) Update primary key once"},{"line_number":51,"context_line":"    # https://review.openstack.org/#/c/275790/ is merged"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027security_group_id\u0027]"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a061dce_216ab2ee","line":51,"in_reply_to":"1af94dfe_d9aa4470","updated":"2016-04-06 14:40:34.000000000","message":"Done","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    fields \u003d {"},{"line_number":56,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":57,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":58,"context_line":"    }"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_39608835","line":58,"updated":"2016-03-15 17:40:47.000000000","message":"Not sure we need an object for that?","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"2066e218b02aeddb12beb99e018842f4794c626c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    fields \u003d {"},{"line_number":56,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":57,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":58,"context_line":"    }"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a061dce_e1a55a47","line":58,"in_reply_to":"1af94dfe_39608835","updated":"2016-04-06 14:40:34.000000000","message":"Removed this object.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    fields \u003d {"},{"line_number":75,"context_line":"        \u0027port_id\u0027: obj_fields.UUIDField(),"},{"line_number":76,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":77,"context_line":"    }"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_19e2ecd5","line":77,"updated":"2016-03-15 17:40:47.000000000","message":"I don\u0027t think we want to have an object for binding.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"2066e218b02aeddb12beb99e018842f4794c626c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    fields \u003d {"},{"line_number":75,"context_line":"        \u0027port_id\u0027: obj_fields.UUIDField(),"},{"line_number":76,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":77,"context_line":"    }"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a061dce_e18eface","line":77,"in_reply_to":"1af94dfe_19e2ecd5","updated":"2016-04-06 14:40:34.000000000","message":"Done","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    primary_key \u003d \u0027security_group_id\u0027"},{"line_number":88,"context_line":"    # TODO(slunkad) Update primary key once"},{"line_number":89,"context_line":"    # https://review.openstack.org/#/c/275790/ is merged"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    fields_no_update \u003d [\u0027security_group_id\u0027, \u0027remote_group_id\u0027]"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_1965cc44","line":89,"updated":"2016-03-15 17:40:47.000000000","message":"It\u0027s there. Please rebase.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"2066e218b02aeddb12beb99e018842f4794c626c","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    primary_key \u003d \u0027security_group_id\u0027"},{"line_number":88,"context_line":"    # TODO(slunkad) Update primary key once"},{"line_number":89,"context_line":"    # https://review.openstack.org/#/c/275790/ is merged"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    fields_no_update \u003d [\u0027security_group_id\u0027, \u0027remote_group_id\u0027]"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a061dce_01920ef6","line":89,"in_reply_to":"1af94dfe_1965cc44","updated":"2016-04-06 14:40:34.000000000","message":"Done","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    fields \u003d {"},{"line_number":94,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":95,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":96,"context_line":"        \u0027direction\u0027: obj_fields.EnumField([\u0027ingress\u0027, \u0027egress\u0027]),"},{"line_number":97,"context_line":"        \u0027ethertype\u0027: obj_fields.StringField(),"},{"line_number":98,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":99,"context_line":"        \u0027port_range_min\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_9986fcb7","line":96,"updated":"2016-03-15 17:40:47.000000000","message":"We probably want to move the list to some common place and reuse it here and in neutron/db/securitygroups_db.py model definition.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"2066e218b02aeddb12beb99e018842f4794c626c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    fields \u003d {"},{"line_number":94,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":95,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":96,"context_line":"        \u0027direction\u0027: obj_fields.EnumField([\u0027ingress\u0027, \u0027egress\u0027]),"},{"line_number":97,"context_line":"        \u0027ethertype\u0027: obj_fields.StringField(),"},{"line_number":98,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":99,"context_line":"        \u0027port_range_min\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a061dce_c18bf6c1","line":96,"in_reply_to":"1af94dfe_9986fcb7","updated":"2016-04-06 14:40:34.000000000","message":"Done","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":95,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":96,"context_line":"        \u0027direction\u0027: obj_fields.EnumField([\u0027ingress\u0027, \u0027egress\u0027]),"},{"line_number":97,"context_line":"        \u0027ethertype\u0027: obj_fields.StringField(),"},{"line_number":98,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":99,"context_line":"        \u0027port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":100,"context_line":"        \u0027port_range_max\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_ec34a0df","line":97,"updated":"2016-03-15 17:40:47.000000000","message":"there is sg_supported_ethertypes that could be used for enum values here.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"2066e218b02aeddb12beb99e018842f4794c626c","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":95,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":96,"context_line":"        \u0027direction\u0027: obj_fields.EnumField([\u0027ingress\u0027, \u0027egress\u0027]),"},{"line_number":97,"context_line":"        \u0027ethertype\u0027: obj_fields.StringField(),"},{"line_number":98,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":99,"context_line":"        \u0027port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":100,"context_line":"        \u0027port_range_max\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a061dce_4197e6eb","line":97,"in_reply_to":"1af94dfe_ec34a0df","updated":"2016-04-06 14:40:34.000000000","message":"Done","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":96,"context_line":"        \u0027direction\u0027: obj_fields.EnumField([\u0027ingress\u0027, \u0027egress\u0027]),"},{"line_number":97,"context_line":"        \u0027ethertype\u0027: obj_fields.StringField(),"},{"line_number":98,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":99,"context_line":"        \u0027port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":100,"context_line":"        \u0027port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":101,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.StringField()"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_cc1a846e","line":98,"updated":"2016-03-15 17:40:47.000000000","message":"Should probably limit it as enum with values from sg_supported_protocols.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"2066e218b02aeddb12beb99e018842f4794c626c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":96,"context_line":"        \u0027direction\u0027: obj_fields.EnumField([\u0027ingress\u0027, \u0027egress\u0027]),"},{"line_number":97,"context_line":"        \u0027ethertype\u0027: obj_fields.StringField(),"},{"line_number":98,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":99,"context_line":"        \u0027port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":100,"context_line":"        \u0027port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":101,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.StringField()"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a061dce_e1f71a57","line":98,"in_reply_to":"1af94dfe_cc1a846e","updated":"2016-04-06 14:40:34.000000000","message":"Done","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        \u0027direction\u0027: obj_fields.EnumField([\u0027ingress\u0027, \u0027egress\u0027]),"},{"line_number":97,"context_line":"        \u0027ethertype\u0027: obj_fields.StringField(),"},{"line_number":98,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":99,"context_line":"        \u0027port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":100,"context_line":"        \u0027port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":101,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.StringField()"},{"line_number":102,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_f958e058","line":99,"updated":"2016-03-15 17:40:47.000000000","message":"Suggest to use IntegerRange from my patch for subnet pools: https://review.openstack.org/#/c/275789/21/neutron/objects/common_types.py\n\nYou could probably build a separate type on top of it specifically for port numbers.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"2066e218b02aeddb12beb99e018842f4794c626c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        \u0027direction\u0027: obj_fields.EnumField([\u0027ingress\u0027, \u0027egress\u0027]),"},{"line_number":97,"context_line":"        \u0027ethertype\u0027: obj_fields.StringField(),"},{"line_number":98,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":99,"context_line":"        \u0027port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":100,"context_line":"        \u0027port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":101,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.StringField()"},{"line_number":102,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a061dce_01fb2e48","line":99,"in_reply_to":"1af94dfe_f958e058","updated":"2016-04-06 14:40:34.000000000","message":"Done","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":99,"context_line":"        \u0027port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":100,"context_line":"        \u0027port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":101,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.StringField()"},{"line_number":102,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_99ad5c34","line":101,"updated":"2016-03-15 17:40:47.000000000","message":"Should be IPNetworkField","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"2066e218b02aeddb12beb99e018842f4794c626c","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":99,"context_line":"        \u0027port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":100,"context_line":"        \u0027port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":101,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.StringField()"},{"line_number":102,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a061dce_a101a23a","line":101,"in_reply_to":"1af94dfe_99ad5c34","updated":"2016-04-06 14:40:34.000000000","message":"Done","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"e21372d740b3aeb26bd320f8aec244f66a12bf13","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(),"},{"line_number":62,"context_line":"        \u0027ethertype\u0027: common_types.EtherTypeEnumField(),"},{"line_number":63,"context_line":"        \u0027protocol\u0027: common_types.IpProtocolEnumField(),"},{"line_number":64,"context_line":"        # Use IntegerRange field after merge of"},{"line_number":65,"context_line":"        # https://review.openstack.org/#/c/275789/"},{"line_number":66,"context_line":"        \u0027port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":67,"context_line":"        \u0027port_range_max\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":13,"id":"da0c15f0_b9eddf90","line":64,"range":{"start_line":64,"start_character":14,"end_line":64,"end_character":26},"updated":"2016-03-24 17:12:48.000000000","message":"The type has been renamed for RangeConstrainedInteger","commit_id":"d5d351dbb9b2c05b68b3ed6665b3a81494c56256"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"5398843d1791704428eac1a1b5d3c318b640d63e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    fields \u003d {"},{"line_number":35,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":37,"context_line":"        # Add description to field after merge of"},{"line_number":38,"context_line":"        # https://review.openstack.org/#/c/292829/"},{"line_number":39,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":40,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_c36c5e0a","line":37,"range":{"start_line":37,"start_character":10,"end_line":37,"end_character":49},"updated":"2016-04-07 10:17:58.000000000","message":"The description field will be added automatically in base class after new approach in https://review.openstack.org/#/c/292829/12","commit_id":"f739f05a57700791005aebd1308f153e7673495a"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"4b16c71ed2261ac18e0875916ab26b5d14591131","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    fields \u003d {"},{"line_number":35,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":37,"context_line":"        # Add description to field after merge of"},{"line_number":38,"context_line":"        # https://review.openstack.org/#/c/292829/"},{"line_number":39,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":40,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_47c33157","line":37,"range":{"start_line":37,"start_character":10,"end_line":37,"end_character":49},"in_reply_to":"9a061dce_c36c5e0a","updated":"2016-04-07 12:36:42.000000000","message":"thanks.","commit_id":"f739f05a57700791005aebd1308f153e7673495a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"d16c9151c458993a5d3b6a5eca78a21b31eff9c7","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    db_model \u003d models.SecurityGroup"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    primary_key \u003d [\u0027id\u0027]"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9a061dce_cfde26dc","line":30,"updated":"2016-04-07 16:19:41.000000000","message":"no need to define it here, it\u0027s defined in the base class","commit_id":"c1662f6b6515bdfd63208a557714142794a4cce8"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"bbd8dffe37e8bdcb7a765e81b1e3ca3e1fc01801","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    db_model \u003d models.SecurityGroup"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    primary_key \u003d [\u0027id\u0027]"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9a061dce_1a85d9ac","line":30,"in_reply_to":"9a061dce_cfde26dc","updated":"2016-04-08 08:03:55.000000000","message":"Done","commit_id":"c1662f6b6515bdfd63208a557714142794a4cce8"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"d16c9151c458993a5d3b6a5eca78a21b31eff9c7","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    primary_key \u003d [\u0027id\u0027]"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    fields \u003d {"},{"line_number":35,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a061dce_6fea7a75","line":32,"updated":"2016-04-07 16:19:41.000000000","message":"primary keys are now automatically not updated, remove \u0027id\u0027 please","commit_id":"c1662f6b6515bdfd63208a557714142794a4cce8"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"bbd8dffe37e8bdcb7a765e81b1e3ca3e1fc01801","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    primary_key \u003d [\u0027id\u0027]"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    fields \u003d {"},{"line_number":35,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a061dce_3a889dc6","line":32,"in_reply_to":"9a061dce_6fea7a75","updated":"2016-04-08 08:03:55.000000000","message":"Done","commit_id":"c1662f6b6515bdfd63208a557714142794a4cce8"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"d16c9151c458993a5d3b6a5eca78a21b31eff9c7","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    db_model \u003d models.SecurityGroupRule"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    primary_key \u003d [\u0027id\u0027]"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027, \u0027security_group_id\u0027,"},{"line_number":62,"context_line":"                        \u0027remote_group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a061dce_0f93fefa","line":59,"updated":"2016-04-07 16:19:41.000000000","message":"ditto","commit_id":"c1662f6b6515bdfd63208a557714142794a4cce8"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"bbd8dffe37e8bdcb7a765e81b1e3ca3e1fc01801","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    db_model \u003d models.SecurityGroupRule"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    primary_key \u003d [\u0027id\u0027]"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027, \u0027security_group_id\u0027,"},{"line_number":62,"context_line":"                        \u0027remote_group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a061dce_7a9215f8","line":59,"in_reply_to":"9a061dce_0f93fefa","updated":"2016-04-08 08:03:55.000000000","message":"Done","commit_id":"c1662f6b6515bdfd63208a557714142794a4cce8"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"d16c9151c458993a5d3b6a5eca78a21b31eff9c7","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    primary_key \u003d [\u0027id\u0027]"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027, \u0027security_group_id\u0027,"},{"line_number":62,"context_line":"                        \u0027remote_group_id\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a061dce_ef8dead3","line":61,"updated":"2016-04-07 16:19:41.000000000","message":"ditto regarding \u0027id\u0027","commit_id":"c1662f6b6515bdfd63208a557714142794a4cce8"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"bbd8dffe37e8bdcb7a765e81b1e3ca3e1fc01801","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    primary_key \u003d [\u0027id\u0027]"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027, \u0027security_group_id\u0027,"},{"line_number":62,"context_line":"                        \u0027remote_group_id\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a061dce_5a8f51cc","line":61,"in_reply_to":"9a061dce_ef8dead3","updated":"2016-04-08 08:03:55.000000000","message":"Done","commit_id":"c1662f6b6515bdfd63208a557714142794a4cce8"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"4c316fd5decc1e8c9842fbe4372ca1a52ad103fc","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if (\u0027is_default\u0027 in result and"},{"line_number":44,"context_line":"            models.DefaultSecurityGroup.security_group_id"},{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"},{"line_number":46,"context_line":"            result[\u0027is_default\u0027] \u003d True"},{"line_number":47,"context_line":"        return result"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9a061dce_4b6785ea","line":45,"range":{"start_line":44,"start_character":12,"end_line":45,"end_character":38},"updated":"2016-04-08 08:29:49.000000000","message":"I do not understand that statement - are you comparing the models?","commit_id":"cc995986beac76f6a298592895ea6e0ce5119535"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"52e4351dcd705624696eb7f84a1fc80959cd0e5f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if (\u0027is_default\u0027 in result and"},{"line_number":44,"context_line":"            models.DefaultSecurityGroup.security_group_id"},{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"},{"line_number":46,"context_line":"            result[\u0027is_default\u0027] \u003d True"},{"line_number":47,"context_line":"        return result"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9a061dce_2f3a14e8","line":45,"range":{"start_line":44,"start_character":12,"end_line":45,"end_character":38},"in_reply_to":"9a061dce_4b6785ea","updated":"2016-04-08 11:13:47.000000000","message":"What I wanted to do here is to check if the security_group_id is present in the the DefaultSecurityGroup id s so we know if the security_group is a default security group or not. But this may not be the correct approach.","commit_id":"cc995986beac76f6a298592895ea6e0ce5119535"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"905f19c45130b4f739e11e1c690fe6668865c68a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    fields \u003d {"},{"line_number":33,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":34,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a061dce_72d067ca","line":35,"range":{"start_line":35,"start_character":41,"end_line":35,"end_character":43},"updated":"2016-04-08 14:15:10.000000000","message":"(nullable\u003dTrue)","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"9174471e928745d44e28c7259ebadf1dfca452d7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    fields \u003d {"},{"line_number":33,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":34,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a1b2928_b9adc58a","line":35,"range":{"start_line":35,"start_character":41,"end_line":35,"end_character":43},"in_reply_to":"9a061dce_72d067ca","updated":"2016-04-11 11:48:36.000000000","message":"Done","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"94d3047444a9b50c683cd39c1ff810f7ef630a00","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if (\u0027is_default\u0027 in result and"},{"line_number":44,"context_line":"            models.DefaultSecurityGroup.security_group_id"},{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"},{"line_number":46,"context_line":"            result[\u0027is_default\u0027] \u003d True"},{"line_number":47,"context_line":"        return result"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a1b2928_e7d2fd33","line":45,"range":{"start_line":44,"start_character":12,"end_line":45,"end_character":38},"updated":"2016-04-11 08:43:38.000000000","message":"It doesn\u0027t seem right to me. In current statement you are checking if field definitions are the same... What you need here is new method checking if result[id] is in DefaultSecurityGroup table...\n\nMaybe Rossella or Ihar can double check if I\u0027m understanding it correctly.","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"64f2cd3e6cecbc10864179f375c7638c296679ee","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if (\u0027is_default\u0027 in result and"},{"line_number":44,"context_line":"            models.DefaultSecurityGroup.security_group_id"},{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"},{"line_number":46,"context_line":"            result[\u0027is_default\u0027] \u003d True"},{"line_number":47,"context_line":"        return result"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a1b2928_351d2374","line":45,"range":{"start_line":44,"start_character":12,"end_line":45,"end_character":38},"in_reply_to":"7a1b2928_e7d2fd33","updated":"2016-04-11 16:39:32.000000000","message":"Good catch Artur, we need to check the result","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"905f19c45130b4f739e11e1c690fe6668865c68a","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    fields \u003d {"},{"line_number":61,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":62,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":63,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":64,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":65,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(),"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a061dce_12992b20","line":62,"range":{"start_line":62,"start_character":41,"end_line":62,"end_character":43},"updated":"2016-04-08 14:15:10.000000000","message":"(nullable\u003dTrue)","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"9174471e928745d44e28c7259ebadf1dfca452d7","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    fields \u003d {"},{"line_number":61,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":62,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":63,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":64,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":65,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(),"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a1b2928_f9b57dd0","line":62,"range":{"start_line":62,"start_character":41,"end_line":62,"end_character":43},"in_reply_to":"9a061dce_12992b20","updated":"2016-04-11 11:48:36.000000000","message":"Done","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"905f19c45130b4f739e11e1c690fe6668865c68a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":62,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":63,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":64,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":65,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(),"},{"line_number":66,"context_line":"        \u0027ethertype\u0027: common_types.EtherTypeEnumField(),"},{"line_number":67,"context_line":"        \u0027protocol\u0027: common_types.IpProtocolEnumField(),"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a061dce_72b5077d","line":64,"range":{"start_line":64,"start_character":47,"end_line":64,"end_character":49},"updated":"2016-04-08 14:15:10.000000000","message":"(nullable\u003dTrue)","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"9174471e928745d44e28c7259ebadf1dfca452d7","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":62,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":63,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":64,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":65,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(),"},{"line_number":66,"context_line":"        \u0027ethertype\u0027: common_types.EtherTypeEnumField(),"},{"line_number":67,"context_line":"        \u0027protocol\u0027: common_types.IpProtocolEnumField(),"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a1b2928_d9ba41c0","line":64,"range":{"start_line":64,"start_character":47,"end_line":64,"end_character":49},"in_reply_to":"9a061dce_72b5077d","updated":"2016-04-11 11:48:36.000000000","message":"Done","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"905f19c45130b4f739e11e1c690fe6668865c68a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        \u0027port_range_max\u0027: common_types.PortRangeField(),"},{"line_number":70,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.IPNetworkField()"},{"line_number":71,"context_line":"    }"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    #TODO(sayalilunkad): get rid of it once we switch the db model to using"},{"line_number":74,"context_line":"    # custom types."},{"line_number":75,"context_line":"    def modify_fields_to_db(self, fields):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a061dce_b5402937","line":72,"updated":"2016-04-08 14:15:10.000000000","message":"foreign_keys \u003d {\"security_group_id\": \"id\", \"remote_group_id\": \"id\"}\n\nsynthetic_fields \u003d [\u0027security_group\u0027, \u0027source_group\u0027]","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"64f2cd3e6cecbc10864179f375c7638c296679ee","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        \u0027port_range_max\u0027: common_types.PortRangeField(),"},{"line_number":70,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.IPNetworkField()"},{"line_number":71,"context_line":"    }"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    #TODO(sayalilunkad): get rid of it once we switch the db model to using"},{"line_number":74,"context_line":"    # custom types."},{"line_number":75,"context_line":"    def modify_fields_to_db(self, fields):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a1b2928_b0102150","line":72,"in_reply_to":"7a1b2928_19d679c5","updated":"2016-04-11 16:39:32.000000000","message":"why should they be synthetic?","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"9174471e928745d44e28c7259ebadf1dfca452d7","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        \u0027port_range_max\u0027: common_types.PortRangeField(),"},{"line_number":70,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.IPNetworkField()"},{"line_number":71,"context_line":"    }"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    #TODO(sayalilunkad): get rid of it once we switch the db model to using"},{"line_number":74,"context_line":"    # custom types."},{"line_number":75,"context_line":"    def modify_fields_to_db(self, fields):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a1b2928_19d679c5","line":72,"in_reply_to":"9a061dce_b5402937","updated":"2016-04-11 11:48:36.000000000","message":"I don\u0027t think the security_group and source_group qualify as synthetic fields. probably Rossella or Ihar can confirm this.\nForeign keys added.","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9875596261af786a7d1c670af7742794cb749c62","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if (\u0027is_default\u0027 in result and"},{"line_number":44,"context_line":"            models.DefaultSecurityGroup.security_group_id"},{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a1b2928_5088ad22","line":42,"range":{"start_line":42,"start_character":43,"end_line":42,"end_character":64},"updated":"2016-04-11 16:58:06.000000000","message":"should be \u0027modify_fields_to_db\u0027","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"87a0febb71c35ec95ce324495da42914f39f65f3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if (\u0027is_default\u0027 in result and"},{"line_number":44,"context_line":"            models.DefaultSecurityGroup.security_group_id"},{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_6651ce62","line":42,"range":{"start_line":42,"start_character":43,"end_line":42,"end_character":64},"in_reply_to":"7a1b2928_5088ad22","updated":"2016-04-13 11:19:41.000000000","message":"Right, thanks for noticing. Not sure how that got there.","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9875596261af786a7d1c670af7742794cb749c62","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if (\u0027is_default\u0027 in result and"},{"line_number":44,"context_line":"            models.DefaultSecurityGroup.security_group_id"},{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"},{"line_number":46,"context_line":"            result[\u0027is_default\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a1b2928_709e8957","line":43,"updated":"2016-04-11 16:58:06.000000000","message":"why do you need this check \u0027is_default\u0027 in result?","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"87a0febb71c35ec95ce324495da42914f39f65f3","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if (\u0027is_default\u0027 in result and"},{"line_number":44,"context_line":"            models.DefaultSecurityGroup.security_group_id"},{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"},{"line_number":46,"context_line":"            result[\u0027is_default\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_6b683788","line":43,"in_reply_to":"5a18252c_ed9ae0c4","updated":"2016-04-13 11:19:41.000000000","message":"Removed.","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"3bda5217f9d827c9bf365501ca3a4da33270de1f","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if (\u0027is_default\u0027 in result and"},{"line_number":44,"context_line":"            models.DefaultSecurityGroup.security_group_id"},{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"},{"line_number":46,"context_line":"            result[\u0027is_default\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_ed9ae0c4","line":43,"in_reply_to":"7a1b2928_709e8957","updated":"2016-04-12 07:28:34.000000000","message":"Yes, I guess that this check is not needed if we want to compute the value during fetching/saving data in DB...","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9875596261af786a7d1c670af7742794cb749c62","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        if (\u0027is_default\u0027 in result and"},{"line_number":44,"context_line":"            models.DefaultSecurityGroup.security_group_id"},{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"},{"line_number":46,"context_line":"            result[\u0027is_default\u0027] \u003d True"},{"line_number":47,"context_line":"        return result"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"7a1b2928_30cc1135","line":46,"updated":"2016-04-11 16:58:06.000000000","message":"sorry for not noticing this before but here lines 43-46 are not doing what\u0027s expected. You are writing the object into the DB, so if \u0027is_default\u0027 is True you should do what\u0027s done here [1], basically create an entry in the DefaultSecurityGroup with id of the current sec group\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/db/securitygroups_db.py#L164","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"87a0febb71c35ec95ce324495da42914f39f65f3","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        if (\u0027is_default\u0027 in result and"},{"line_number":44,"context_line":"            models.DefaultSecurityGroup.security_group_id"},{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"},{"line_number":46,"context_line":"            result[\u0027is_default\u0027] \u003d True"},{"line_number":47,"context_line":"        return result"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_4b73bb80","line":46,"in_reply_to":"7a1b2928_30cc1135","updated":"2016-04-13 11:19:41.000000000","message":"Done","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9875596261af786a7d1c670af7742794cb749c62","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"},{"line_number":46,"context_line":"            result[\u0027is_default\u0027] \u003d True"},{"line_number":47,"context_line":"        return result"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":51,"context_line":"class SecurityGroupRule(base.NeutronDbObject):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a1b2928_70ecc9c7","line":48,"updated":"2016-04-11 16:58:06.000000000","message":"you should also have overrided modify_fields_from_db where you\u0027d set is_default to True if the ID of the sec group is in the DefaultSecurityGroup table","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"87a0febb71c35ec95ce324495da42914f39f65f3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \u003d\u003d models.SecurityGroup.id):"},{"line_number":46,"context_line":"            result[\u0027is_default\u0027] \u003d True"},{"line_number":47,"context_line":"        return result"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":51,"context_line":"class SecurityGroupRule(base.NeutronDbObject):"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_a53a7896","line":48,"in_reply_to":"7a1b2928_70ecc9c7","updated":"2016-04-13 11:19:41.000000000","message":"ok, can I use context.session.query on DefaultSecurityGroup for this?","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9875596261af786a7d1c670af7742794cb749c62","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.IPNetworkField(),"},{"line_number":71,"context_line":"    }"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    foreign_keys \u003d {\"security_group_id\": \"id\", \"remote_group_id\": \"id\"}"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    #TODO(sayalilunkad): get rid of it once we switch the db model to using"},{"line_number":76,"context_line":"    # custom types."}],"source_content_type":"text/x-python","patch_set":23,"id":"7a1b2928_2b04a213","line":73,"updated":"2016-04-11 16:58:06.000000000","message":"this is only used when you have synthetic fields that are ObjectField...it\u0027s used to load the field from a db table that it\u0027s not the same as the one used by the object. You don\u0027t need it here.","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"87a0febb71c35ec95ce324495da42914f39f65f3","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.IPNetworkField(),"},{"line_number":71,"context_line":"    }"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    foreign_keys \u003d {\"security_group_id\": \"id\", \"remote_group_id\": \"id\"}"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    #TODO(sayalilunkad): get rid of it once we switch the db model to using"},{"line_number":76,"context_line":"    # custom types."}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_0660da34","line":73,"in_reply_to":"7a1b2928_2b04a213","updated":"2016-04-13 11:19:41.000000000","message":"Done","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"377d45cd5ed460aa43eedb648c24cac7e5b337ec","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    @classmethod"},{"line_number":43,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":44,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_to_db(db_obj)"},{"line_number":45,"context_line":"        if \u0027is_default\u0027 is True:"},{"line_number":46,"context_line":"            context.session.add(models.DefaultSecurityGroup("},{"line_number":47,"context_line":"                security_group\u003dSecurityGroup(id\u003dresult[\u0027id\u0027],"},{"line_number":48,"context_line":"                                             description\u003dresult[\u0027description\u0027],"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a18252c_1a06f91c","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":31},"updated":"2016-04-14 06:22:56.000000000","message":"This is interesting statement :) \nIt should be:\nif result[\u0027is_default\u0027] is True:","commit_id":"04874c4c30fbab09b45504a53d34053561eaf7e4"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"715b86e13d142b15c0f5b9ede277004fdb41e8a0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":44,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_to_db(db_obj)"},{"line_number":45,"context_line":"        if \u0027is_default\u0027 is True:"},{"line_number":46,"context_line":"            context.session.add(models.DefaultSecurityGroup("},{"line_number":47,"context_line":"                security_group\u003dSecurityGroup(id\u003dresult[\u0027id\u0027],"},{"line_number":48,"context_line":"                                             description\u003dresult[\u0027description\u0027],"},{"line_number":49,"context_line":"                                             tenant_id\u003dresult[\u0027tenant_id\u0027],"},{"line_number":50,"context_line":"                                             name\u003dresult[\u0027name\u0027]),"},{"line_number":51,"context_line":"                tenant_id\u003dresult[\u0027tenant_id\u0027]))"},{"line_number":52,"context_line":"        return result"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a18252c_6572204b","line":51,"range":{"start_line":46,"start_character":0,"end_line":51,"end_character":47},"updated":"2016-04-13 12:54:27.000000000","message":"It feels like this doesn\u0027t belong to this method. This method should just translate field names. Adding new model to session seems like side-effect. I think you should override create() method.","commit_id":"04874c4c30fbab09b45504a53d34053561eaf7e4"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"377d45cd5ed460aa43eedb648c24cac7e5b337ec","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":44,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_to_db(db_obj)"},{"line_number":45,"context_line":"        if \u0027is_default\u0027 is True:"},{"line_number":46,"context_line":"            context.session.add(models.DefaultSecurityGroup("},{"line_number":47,"context_line":"                security_group\u003dSecurityGroup(id\u003dresult[\u0027id\u0027],"},{"line_number":48,"context_line":"                                             description\u003dresult[\u0027description\u0027],"},{"line_number":49,"context_line":"                                             tenant_id\u003dresult[\u0027tenant_id\u0027],"},{"line_number":50,"context_line":"                                             name\u003dresult[\u0027name\u0027]),"},{"line_number":51,"context_line":"                tenant_id\u003dresult[\u0027tenant_id\u0027]))"},{"line_number":52,"context_line":"        return result"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a18252c_dab48136","line":51,"range":{"start_line":46,"start_character":0,"end_line":51,"end_character":47},"in_reply_to":"5a18252c_6572204b","updated":"2016-04-14 06:22:56.000000000","message":"I agree that creating the entry in this method is not so pretty... Another thing is that it may be beneficial to create new OVO for DefaultSecurityGroup to have easier operations on that entity. And this OVO would be internal only - meaning that you won\u0027t use it outside of SecurityGroup OVO.\nLast but not least Why are you creating the security group entity? The DefaultSecurityGroup should take the tenant_id and security_group_id as an input, not the new object.\nPlease move it to create() and update() method overridden in this class.","commit_id":"04874c4c30fbab09b45504a53d34053561eaf7e4"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"c005e2cde2ab9df13a4a7980092f5d14e1f7239b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def modify_fields_to_db(cls, db_obj):"},{"line_number":44,"context_line":"        result \u003d super(SecurityGroup, cls).modify_fields_to_db(db_obj)"},{"line_number":45,"context_line":"        if \u0027is_default\u0027 is True:"},{"line_number":46,"context_line":"            context.session.add(models.DefaultSecurityGroup("},{"line_number":47,"context_line":"                security_group\u003dSecurityGroup(id\u003dresult[\u0027id\u0027],"},{"line_number":48,"context_line":"                                             description\u003dresult[\u0027description\u0027],"},{"line_number":49,"context_line":"                                             tenant_id\u003dresult[\u0027tenant_id\u0027],"},{"line_number":50,"context_line":"                                             name\u003dresult[\u0027name\u0027]),"},{"line_number":51,"context_line":"                tenant_id\u003dresult[\u0027tenant_id\u0027]))"},{"line_number":52,"context_line":"        return result"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"1a122d0e_6afb7179","line":51,"range":{"start_line":46,"start_character":0,"end_line":51,"end_character":47},"in_reply_to":"5a18252c_dab48136","updated":"2016-04-21 07:45:27.000000000","message":"Right, I moved  it to create() to begin with. But as we had decided earlier that we will not create a new OVO for DefaultSecurityGroup. But i think we should probably discuss your suggestion further with the team and then decide.","commit_id":"04874c4c30fbab09b45504a53d34053561eaf7e4"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"715b86e13d142b15c0f5b9ede277004fdb41e8a0","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    # TODO(sayalilunkad): get rid of it once we switch the db model to using"},{"line_number":79,"context_line":"    # custom types."},{"line_number":80,"context_line":"    def modify_fields_to_db(self, fields):"},{"line_number":81,"context_line":"        result \u003d super(SecurityGroupRule, self).modify_fields_to_db(fields)"},{"line_number":82,"context_line":"        if \u0027remote_ip_prefix\u0027 in result:"},{"line_number":83,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a18252c_4596044d","line":80,"range":{"start_line":80,"start_character":8,"end_line":80,"end_character":27},"updated":"2016-04-13 12:54:27.000000000","message":"missing @classmethod","commit_id":"04874c4c30fbab09b45504a53d34053561eaf7e4"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"c005e2cde2ab9df13a4a7980092f5d14e1f7239b","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    # TODO(sayalilunkad): get rid of it once we switch the db model to using"},{"line_number":79,"context_line":"    # custom types."},{"line_number":80,"context_line":"    def modify_fields_to_db(self, fields):"},{"line_number":81,"context_line":"        result \u003d super(SecurityGroupRule, self).modify_fields_to_db(fields)"},{"line_number":82,"context_line":"        if \u0027remote_ip_prefix\u0027 in result:"},{"line_number":83,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a122d0e_aaf10997","line":80,"range":{"start_line":80,"start_character":8,"end_line":80,"end_character":27},"in_reply_to":"5a18252c_4596044d","updated":"2016-04-21 07:45:27.000000000","message":"Done","commit_id":"04874c4c30fbab09b45504a53d34053561eaf7e4"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"1675b1a61f330c08e29e803ce0ecafd2c9258226","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def create(self):"},{"line_number":44,"context_line":"        fields \u003d self._get_changed_persistent_fields()"},{"line_number":45,"context_line":"        with db_api.autonested_transaction(self._context.session):"},{"line_number":46,"context_line":"            sg_obj \u003d obj_db_api.create_object(self._context, self.db_model,"},{"line_number":47,"context_line":"                                              self.modify_fields_to_db(fields))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"            if self.fields[\u0027is_default\u0027] is True:"},{"line_number":50,"context_line":"                dsg_obj \u003d obj_db_api.create_object("}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_328582ce","line":47,"range":{"start_line":46,"start_character":0,"end_line":47,"end_character":79},"updated":"2016-04-20 21:32:50.000000000","message":"This method needs to be surrounded by a try/except block like this:\n\n            try:\n                sg_obj \u003d obj_db_api.create_object(self._context,\n                                                  self.db_model,\n                                                  self.modify_fields_to_db(\n                                                      fields))\n            except obj_exc.DBDuplicateEntry as db_exc:\n                raise base.NeutronDbObjectDuplicateEntry(\n                    object_class\u003dself.__class__, db_exception\u003ddb_exc)\n\nThat\u0027s the reason behind the failure of test_create_duplicates unit test.\n\nhttps://github.com/openstack/neutron/blob/master/neutron/tests/unit/objects/test_base.py#L472","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"1675b1a61f330c08e29e803ce0ecafd2c9258226","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                                              self.modify_fields_to_db(fields))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"            if self.fields[\u0027is_default\u0027] is True:"},{"line_number":50,"context_line":"                dsg_obj \u003d obj_db_api.create_object("},{"line_number":51,"context_line":"                    self._context,"},{"line_number":52,"context_line":"                    models.DefaultSecurityGroup,"},{"line_number":53,"context_line":"                    {\u0027tenant_id\u0027: self.fields[\u0027tenant_id\u0027],"},{"line_number":54,"context_line":"                     \u0027security_group_id\u0027: self.fields[\u0027id\u0027]})"},{"line_number":55,"context_line":"                self.from_db_object(dsg_obj)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"            self.from_db_object(sg_obj)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_d2fb6e45","line":55,"range":{"start_line":50,"start_character":0,"end_line":55,"end_character":44},"updated":"2016-04-20 21:32:50.000000000","message":"I\u0027m agree with Artur in his comment[1].  You should create DefaultSecurityGroup OVO.\n\n[1] https://review.openstack.org/#/c/284738/24/neutron/objects/port/extensions/securitygroups.py@51","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"be624267a8cc51723788f2a103381f79eda3a6b6","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                                              self.modify_fields_to_db(fields))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"            if self.fields[\u0027is_default\u0027] is True:"},{"line_number":50,"context_line":"                dsg_obj \u003d obj_db_api.create_object("},{"line_number":51,"context_line":"                    self._context,"},{"line_number":52,"context_line":"                    models.DefaultSecurityGroup,"},{"line_number":53,"context_line":"                    {\u0027tenant_id\u0027: self.fields[\u0027tenant_id\u0027],"},{"line_number":54,"context_line":"                     \u0027security_group_id\u0027: self.fields[\u0027id\u0027]})"},{"line_number":55,"context_line":"                self.from_db_object(dsg_obj)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"            self.from_db_object(sg_obj)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_47095030","line":55,"range":{"start_line":50,"start_character":0,"end_line":55,"end_character":44},"in_reply_to":"1a122d0e_283fa5d7","updated":"2016-04-29 15:05:52.000000000","message":"ok so I think everybody here agrees to create another OVO for DefaultSecurityGroup which will be used only internally like Artur suggested. Will make this change then.","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"3ac35970196e92a5bac86cecf67f26073ee5b866","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                                              self.modify_fields_to_db(fields))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"            if self.fields[\u0027is_default\u0027] is True:"},{"line_number":50,"context_line":"                dsg_obj \u003d obj_db_api.create_object("},{"line_number":51,"context_line":"                    self._context,"},{"line_number":52,"context_line":"                    models.DefaultSecurityGroup,"},{"line_number":53,"context_line":"                    {\u0027tenant_id\u0027: self.fields[\u0027tenant_id\u0027],"},{"line_number":54,"context_line":"                     \u0027security_group_id\u0027: self.fields[\u0027id\u0027]})"},{"line_number":55,"context_line":"                self.from_db_object(dsg_obj)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"            self.from_db_object(sg_obj)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_283fa5d7","line":55,"range":{"start_line":50,"start_character":0,"end_line":55,"end_character":44},"in_reply_to":"1a122d0e_d2fb6e45","updated":"2016-04-21 16:36:53.000000000","message":"yes we can use the OVO. Another point is that line 55 is not needed, since we don\u0027t have any default security group object: no field of the current object (SecurityGroup) needs to be updated apart from the synthetic one which we will have to take care of.","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"3ac35970196e92a5bac86cecf67f26073ee5b866","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                self.from_db_object(dsg_obj)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"            self.from_db_object(sg_obj)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":61,"context_line":"class SecurityGroupRule(base.NeutronDbObject):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_4b081b29","line":58,"updated":"2016-04-21 16:36:53.000000000","message":"I think you have to override update too. You still need to override modify_fields_from_db otherwise how will the boolean be set?","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"be624267a8cc51723788f2a103381f79eda3a6b6","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                self.from_db_object(dsg_obj)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"            self.from_db_object(sg_obj)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":61,"context_line":"class SecurityGroupRule(base.NeutronDbObject):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_a74ca4c8","line":58,"in_reply_to":"1a122d0e_4b081b29","updated":"2016-04-29 15:05:52.000000000","message":"yep I still need to do that.","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"158dbe0cf568dc970a8616b3c2782410c2357fc5","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    fields \u003d {"},{"line_number":71,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":72,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":73,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":74,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":75,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(),"}],"source_content_type":"text/x-python","patch_set":25,"id":"dab17558_0830e49d","line":72,"range":{"start_line":72,"start_character":9,"end_line":72,"end_character":18},"updated":"2016-05-12 13:44:05.000000000","message":"Should we use project_id as per [1] ongoing work, to expose from the beginning the project instead of tenant?\nI have updated my Subnet OVO patch to propose the project_id as default, for reference: [2].\n[1] https://review.openstack.org/#/c/257362/15/specs/newton/moving-to-keystone-v3.rst@32\n[2] https://review.openstack.org/#/c/264273/24/neutron/objects/subnet.py@151","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":19591,"name":"Saisrikiran Mudigonda","email":"saisrikiran.mudigonda@intel.com","username":"saisrikiran"},"change_message_id":"ac098bd09379bafb6e47d2d289b9e99a692af2e1","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027security_group_id\u0027,"},{"line_number":68,"context_line":"                        \u0027remote_group_id\u0027]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    fields \u003d {"},{"line_number":71,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":72,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":73,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":74,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":75,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(),"},{"line_number":76,"context_line":"        \u0027ethertype\u0027: common_types.EtherTypeEnumField(),"},{"line_number":77,"context_line":"        \u0027protocol\u0027: common_types.IpProtocolEnumField(),"},{"line_number":78,"context_line":"        \u0027port_range_min\u0027: common_types.PortRangeField(),"},{"line_number":79,"context_line":"        \u0027port_range_max\u0027: common_types.PortRangeField(),"},{"line_number":80,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.IPNetworkField(),"},{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    # TODO(sayalilunkad): get rid of it once we switch the db model to using"},{"line_number":84,"context_line":"    # custom types."}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_fc1486e9","line":81,"range":{"start_line":70,"start_character":0,"end_line":81,"end_character":5},"updated":"2016-04-20 18:39:01.000000000","message":"Aren\u0027t you missing a field standard_attr_id?","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"3ac35970196e92a5bac86cecf67f26073ee5b866","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027security_group_id\u0027,"},{"line_number":68,"context_line":"                        \u0027remote_group_id\u0027]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    fields \u003d {"},{"line_number":71,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":72,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":73,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":74,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":75,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(),"},{"line_number":76,"context_line":"        \u0027ethertype\u0027: common_types.EtherTypeEnumField(),"},{"line_number":77,"context_line":"        \u0027protocol\u0027: common_types.IpProtocolEnumField(),"},{"line_number":78,"context_line":"        \u0027port_range_min\u0027: common_types.PortRangeField(),"},{"line_number":79,"context_line":"        \u0027port_range_max\u0027: common_types.PortRangeField(),"},{"line_number":80,"context_line":"        \u0027remote_ip_prefix\u0027: obj_fields.IPNetworkField(),"},{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    # TODO(sayalilunkad): get rid of it once we switch the db model to using"},{"line_number":84,"context_line":"    # custom types."}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_489e6108","line":81,"range":{"start_line":70,"start_character":0,"end_line":81,"end_character":5},"in_reply_to":"1a122d0e_fc1486e9","updated":"2016-04-21 16:36:53.000000000","message":"nope, see https://review.openstack.org/#/c/292829/","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import netaddr"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_versionedobjects import base as obj_base"},{"line_number":16,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_82d6f14c","line":14,"updated":"2016-06-13 14:06:51.000000000","message":"nit: the line should be removed","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import netaddr"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_versionedobjects import base as obj_base"},{"line_number":16,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_ca58eb8c","line":14,"in_reply_to":"7aa08908_82d6f14c","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":25,"context_line":"class SecurityGroup(base.NeutronDbObject):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"},{"line_number":27,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_9d4e566d","line":25,"updated":"2016-06-13 14:06:51.000000000","message":"Shouldn\u0027t we also apply standard attributes to the object?","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"8021a352eac88b6cf3587300cb7dd51a01c0365a","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":25,"context_line":"class SecurityGroup(base.NeutronDbObject):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"},{"line_number":27,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_fc6f7928","line":25,"in_reply_to":"7aa08908_9d4e566d","updated":"2016-06-14 08:16:14.000000000","message":"It would be done automagically in base class?","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3652cca2ec1a2dfb2c0a99ef136b972a908565b8","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":25,"context_line":"class SecurityGroup(base.NeutronDbObject):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"},{"line_number":27,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_ca810bc5","line":25,"in_reply_to":"7aa08908_fc6f7928","updated":"2016-06-14 08:50:31.000000000","message":"yes I thought so too.","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":36,"context_line":"    }"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_826431b9","line":38,"range":{"start_line":38,"start_character":24,"end_line":38,"end_character":30},"updated":"2016-06-13 14:06:51.000000000","message":"id is a primary key, so it\u0027s already in the fields_no_update by the virtue of DeclarativeObject metaclass.","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":36,"context_line":"    }"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_2a488fb2","line":38,"range":{"start_line":38,"start_character":24,"end_line":38,"end_character":30},"in_reply_to":"7aa08908_826431b9","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            return fields"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def create(self):"},{"line_number":50,"context_line":"        synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":51,"context_line":"        with db_api.autonested_transaction(self._context.session):"},{"line_number":52,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_e27ff514","line":50,"range":{"start_line":50,"start_character":8,"end_line":50,"end_character":64},"updated":"2016-06-13 14:06:51.000000000","message":"it\u0027s create(), so I think we should not extract changes, but instead just write the additional object if self.is_default.","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            return fields"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def create(self):"},{"line_number":50,"context_line":"        synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":51,"context_line":"        with db_api.autonested_transaction(self._context.session):"},{"line_number":52,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_ea8687b7","line":50,"range":{"start_line":50,"start_character":8,"end_line":50,"end_character":64},"in_reply_to":"7aa08908_e27ff514","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def create(self):"},{"line_number":50,"context_line":"        synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":51,"context_line":"        with db_api.autonested_transaction(self._context.session):"},{"line_number":52,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":54,"context_line":"                if self.is_default is True:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_6218251f","line":51,"range":{"start_line":51,"start_character":43,"end_line":51,"end_character":56},"updated":"2016-06-13 14:06:51.000000000","message":"please use self.obj_context","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def create(self):"},{"line_number":50,"context_line":"        synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":51,"context_line":"        with db_api.autonested_transaction(self._context.session):"},{"line_number":52,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":54,"context_line":"                if self.is_default is True:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_ca6bcbef","line":51,"range":{"start_line":51,"start_character":43,"end_line":51,"end_character":56},"in_reply_to":"7aa08908_6218251f","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        with db_api.autonested_transaction(self._context.session):"},{"line_number":52,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":54,"context_line":"                if self.is_default is True:"},{"line_number":55,"context_line":"                    is_default \u003d DefaultSecurityGroup(self._context, tenant_id"},{"line_number":56,"context_line":"                                                      \u003dself.tenant_id,"},{"line_number":57,"context_line":"                                                      security_group_id"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_e2237556","line":54,"range":{"start_line":54,"start_character":34,"end_line":54,"end_character":42},"updated":"2016-06-13 14:06:51.000000000","message":"Remove. It\u0027s an implementation detail that you have a unique object for boolean values.","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        with db_api.autonested_transaction(self._context.session):"},{"line_number":52,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":54,"context_line":"                if self.is_default is True:"},{"line_number":55,"context_line":"                    is_default \u003d DefaultSecurityGroup(self._context, tenant_id"},{"line_number":56,"context_line":"                                                      \u003dself.tenant_id,"},{"line_number":57,"context_line":"                                                      security_group_id"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_4a57db25","line":54,"range":{"start_line":54,"start_character":34,"end_line":54,"end_character":42},"in_reply_to":"7aa08908_e2237556","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":54,"context_line":"                if self.is_default is True:"},{"line_number":55,"context_line":"                    is_default \u003d DefaultSecurityGroup(self._context, tenant_id"},{"line_number":56,"context_line":"                                                      \u003dself.tenant_id,"},{"line_number":57,"context_line":"                                                      security_group_id"},{"line_number":58,"context_line":"                                                      \u003dself.id)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_42c36957","line":55,"range":{"start_line":55,"start_character":20,"end_line":55,"end_character":30},"updated":"2016-06-13 14:06:51.000000000","message":"please name the object in a way that would not suggest it\u0027s a boolean (f.e. default_group).","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":54,"context_line":"                if self.is_default is True:"},{"line_number":55,"context_line":"                    is_default \u003d DefaultSecurityGroup(self._context, tenant_id"},{"line_number":56,"context_line":"                                                      \u003dself.tenant_id,"},{"line_number":57,"context_line":"                                                      security_group_id"},{"line_number":58,"context_line":"                                                      \u003dself.id)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_021fa108","line":55,"range":{"start_line":55,"start_character":59,"end_line":55,"end_character":67},"updated":"2016-06-13 14:06:51.000000000","message":"please switch to using self.obj_context","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":54,"context_line":"                if self.is_default is True:"},{"line_number":55,"context_line":"                    is_default \u003d DefaultSecurityGroup(self._context, tenant_id"},{"line_number":56,"context_line":"                                                      \u003dself.tenant_id,"},{"line_number":57,"context_line":"                                                      security_group_id"},{"line_number":58,"context_line":"                                                      \u003dself.id)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_8584145e","line":55,"range":{"start_line":55,"start_character":59,"end_line":55,"end_character":67},"in_reply_to":"7aa08908_021fa108","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":54,"context_line":"                if self.is_default is True:"},{"line_number":55,"context_line":"                    is_default \u003d DefaultSecurityGroup(self._context, tenant_id"},{"line_number":56,"context_line":"                                                      \u003dself.tenant_id,"},{"line_number":57,"context_line":"                                                      security_group_id"},{"line_number":58,"context_line":"                                                      \u003dself.id)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_c57a9c76","line":55,"range":{"start_line":55,"start_character":20,"end_line":55,"end_character":30},"in_reply_to":"7aa08908_42c36957","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":54,"context_line":"                if self.is_default is True:"},{"line_number":55,"context_line":"                    is_default \u003d DefaultSecurityGroup(self._context, tenant_id"},{"line_number":56,"context_line":"                                                      \u003dself.tenant_id,"},{"line_number":57,"context_line":"                                                      security_group_id"},{"line_number":58,"context_line":"                                                      \u003dself.id)"},{"line_number":59,"context_line":"                    is_default.create()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def update(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_62ef85e9","line":58,"range":{"start_line":56,"start_character":54,"end_line":58,"end_character":63},"updated":"2016-06-13 14:06:51.000000000","message":"Please fix wrapping here. I guess you want to start a new line after ( that would be 3-space indented from the line 55.","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":54,"context_line":"                if self.is_default is True:"},{"line_number":55,"context_line":"                    is_default \u003d DefaultSecurityGroup(self._context, tenant_id"},{"line_number":56,"context_line":"                                                      \u003dself.tenant_id,"},{"line_number":57,"context_line":"                                                      security_group_id"},{"line_number":58,"context_line":"                                                      \u003dself.id)"},{"line_number":59,"context_line":"                    is_default.create()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def update(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_a5f4b0f0","line":58,"range":{"start_line":56,"start_character":54,"end_line":58,"end_character":63},"in_reply_to":"7aa08908_62ef85e9","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                    is_default.create()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def update(self):"},{"line_number":62,"context_line":"        with db_api.autonested_transaction(self._context.session):"},{"line_number":63,"context_line":"            synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":64,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":65,"context_line":"            if synthetic_changes:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_22973d49","line":62,"range":{"start_line":62,"start_character":43,"end_line":62,"end_character":56},"updated":"2016-06-13 14:06:51.000000000","message":"ditto","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                    is_default.create()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def update(self):"},{"line_number":62,"context_line":"        with db_api.autonested_transaction(self._context.session):"},{"line_number":63,"context_line":"            synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":64,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":65,"context_line":"            if synthetic_changes:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_45e6ac44","line":62,"range":{"start_line":62,"start_character":43,"end_line":62,"end_character":56},"in_reply_to":"7aa08908_22973d49","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        with db_api.autonested_transaction(self._context.session):"},{"line_number":63,"context_line":"            synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":64,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":65,"context_line":"            if synthetic_changes:"},{"line_number":66,"context_line":"                if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":67,"context_line":"                    old \u003d DefaultSecurityGroup.get_object("},{"line_number":68,"context_line":"                        self._context,"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_a2904d44","line":65,"range":{"start_line":65,"start_character":12,"end_line":65,"end_character":33},"updated":"2016-06-13 14:06:51.000000000","message":"This check seems to be redundant because synthetic_changes are always a dict, even if empty.","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        with db_api.autonested_transaction(self._context.session):"},{"line_number":63,"context_line":"            synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":64,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":65,"context_line":"            if synthetic_changes:"},{"line_number":66,"context_line":"                if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":67,"context_line":"                    old \u003d DefaultSecurityGroup.get_object("},{"line_number":68,"context_line":"                        self._context,"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_650ac8d3","line":65,"range":{"start_line":65,"start_character":12,"end_line":65,"end_character":33},"in_reply_to":"7aa08908_a2904d44","updated":"2016-06-14 15:47:59.000000000","message":"No I don\u0027t think it is the case when it is empty.","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            if synthetic_changes:"},{"line_number":66,"context_line":"                if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":67,"context_line":"                    old \u003d DefaultSecurityGroup.get_object("},{"line_number":68,"context_line":"                        self._context,"},{"line_number":69,"context_line":"                        tenant_id\u003dself.tenant_id,"},{"line_number":70,"context_line":"                        security_group_id\u003dself.id)"},{"line_number":71,"context_line":"                    if old:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_42a88977","line":68,"range":{"start_line":68,"start_character":24,"end_line":68,"end_character":37},"updated":"2016-06-13 14:06:51.000000000","message":"ditto","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            if synthetic_changes:"},{"line_number":66,"context_line":"                if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":67,"context_line":"                    old \u003d DefaultSecurityGroup.get_object("},{"line_number":68,"context_line":"                        self._context,"},{"line_number":69,"context_line":"                        tenant_id\u003dself.tenant_id,"},{"line_number":70,"context_line":"                        security_group_id\u003dself.id)"},{"line_number":71,"context_line":"                    if old:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_25fd60b1","line":68,"range":{"start_line":68,"start_character":24,"end_line":68,"end_character":37},"in_reply_to":"7aa08908_42a88977","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                        self._context,"},{"line_number":69,"context_line":"                        tenant_id\u003dself.tenant_id,"},{"line_number":70,"context_line":"                        security_group_id\u003dself.id)"},{"line_number":71,"context_line":"                    if old:"},{"line_number":72,"context_line":"                        old.delete()"},{"line_number":73,"context_line":"                if self.is_default is True:"},{"line_number":74,"context_line":"                    new_obj \u003d DefaultSecurityGroup(self._context,"},{"line_number":75,"context_line":"                                                   tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_42bfe9a9","line":72,"range":{"start_line":71,"start_character":20,"end_line":72,"end_character":36},"updated":"2016-06-13 14:06:51.000000000","message":"I don\u0027t think we should delete it if self.is_default \u003d\u003d True. In that case, we should just skip.\n\nLike:\n\nif \u0027is_default\u0027 in synthetic_changes:\n    old \u003d DefaultSecurityGroup.get_object(...)\n    if self.is_default and old is None:\n        ... new.create()\n    else if not self.is_default and old is not None:\n        ... old.delete()","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                        self._context,"},{"line_number":69,"context_line":"                        tenant_id\u003dself.tenant_id,"},{"line_number":70,"context_line":"                        security_group_id\u003dself.id)"},{"line_number":71,"context_line":"                    if old:"},{"line_number":72,"context_line":"                        old.delete()"},{"line_number":73,"context_line":"                if self.is_default is True:"},{"line_number":74,"context_line":"                    new_obj \u003d DefaultSecurityGroup(self._context,"},{"line_number":75,"context_line":"                                                   tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_b00a301e","line":72,"range":{"start_line":71,"start_character":20,"end_line":72,"end_character":36},"in_reply_to":"7aa08908_42bfe9a9","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                    if old:"},{"line_number":72,"context_line":"                        old.delete()"},{"line_number":73,"context_line":"                if self.is_default is True:"},{"line_number":74,"context_line":"                    new_obj \u003d DefaultSecurityGroup(self._context,"},{"line_number":75,"context_line":"                                                   tenant_id\u003dself.tenant_id,"},{"line_number":76,"context_line":"                                                   security_group_id\u003dself.id)"},{"line_number":77,"context_line":"                    new_obj.create()"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_82e391d8","line":74,"range":{"start_line":74,"start_character":51,"end_line":74,"end_character":64},"updated":"2016-06-13 14:06:51.000000000","message":"ditto","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                    if old:"},{"line_number":72,"context_line":"                        old.delete()"},{"line_number":73,"context_line":"                if self.is_default is True:"},{"line_number":74,"context_line":"                    new_obj \u003d DefaultSecurityGroup(self._context,"},{"line_number":75,"context_line":"                                                   tenant_id\u003dself.tenant_id,"},{"line_number":76,"context_line":"                                                   security_group_id\u003dself.id)"},{"line_number":77,"context_line":"                    new_obj.create()"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_851414a0","line":74,"range":{"start_line":74,"start_character":51,"end_line":74,"end_character":64},"in_reply_to":"7aa08908_82e391d8","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    primary_keys \u003d [\u0027tenant_id\u0027]"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    foreign_keys \u003d {\u0027security_group_id\u0027: \u0027id\u0027}"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    fields \u003d {"},{"line_number":94,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_42e08996","line":91,"updated":"2016-06-13 14:06:51.000000000","message":"Since you don\u0027t integrate the Default object into another object, I don\u0027t think we should have this line.","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    primary_keys \u003d [\u0027tenant_id\u0027]"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    foreign_keys \u003d {\u0027security_group_id\u0027: \u0027id\u0027}"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    fields \u003d {"},{"line_number":94,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_c50a9c78","line":91,"in_reply_to":"7aa08908_42e08996","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"8021a352eac88b6cf3587300cb7dd51a01c0365a","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    @classmethod"},{"line_number":125,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":126,"context_line":"        result \u003d super(SecurityGroupRule, cls).modify_fields_to_db(fields)"},{"line_number":127,"context_line":"        if \u0027remote_ip_prefix\u0027 in result:"},{"line_number":128,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"},{"line_number":129,"context_line":"        return result"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    # TODO(sayalilunkad): get rid of it once we switch the db model to using"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_7ca389b2","line":128,"range":{"start_line":127,"start_character":8,"end_line":128,"end_character":72},"updated":"2016-06-14 08:16:14.000000000","message":"if remove_ip_prefix can be null, you have to check if the field is not null:\n\nif \u0027remote_ip_prefix\u0027 in result and result[\u0027remote_up_prefix\u0027] is not None:\n  result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    @classmethod"},{"line_number":125,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":126,"context_line":"        result \u003d super(SecurityGroupRule, cls).modify_fields_to_db(fields)"},{"line_number":127,"context_line":"        if \u0027remote_ip_prefix\u0027 in result:"},{"line_number":128,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"},{"line_number":129,"context_line":"        return result"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    # TODO(sayalilunkad): get rid of it once we switch the db model to using"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_2548c0b2","line":128,"range":{"start_line":127,"start_character":8,"end_line":128,"end_character":72},"in_reply_to":"7aa08908_7ca389b2","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"8021a352eac88b6cf3587300cb7dd51a01c0365a","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    @classmethod"},{"line_number":134,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":135,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":136,"context_line":"        if \u0027remote_ip_prefix\u0027 in fields:"},{"line_number":137,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":138,"context_line":"                netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":139,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_3cac618b","line":138,"range":{"start_line":136,"start_character":8,"end_line":138,"end_character":62},"updated":"2016-06-14 08:16:14.000000000","message":"The same line 128, if remove_ip_prefix will be None, the exception will be raised in netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027]).\n\nif \u0027remote_ip_prefix\u0027 in fields and fields[\u0027remote_up_prefix\u0027] is not None:\n  netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027])","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d8ff155fbe33a18f7024c812f2500dc2f472a25a","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    @classmethod"},{"line_number":134,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":135,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":136,"context_line":"        if \u0027remote_ip_prefix\u0027 in fields:"},{"line_number":137,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":138,"context_line":"                netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":139,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_654f6892","line":138,"range":{"start_line":136,"start_character":8,"end_line":138,"end_character":62},"in_reply_to":"7aa08908_3cac618b","updated":"2016-06-14 15:47:59.000000000","message":"Done","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"632b847bb719672580c4bc54ae197835bfbd965b","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _get_changed_synthetic_fields(self):"},{"line_number":42,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":43,"context_line":"        for field in self._get_changed_persistent_fields():"},{"line_number":44,"context_line":"            if field in fields:"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_d714d64e","line":41,"updated":"2016-06-15 08:35:25.000000000","message":"we only have one synthetic field, I don\u0027t think we need this method.","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"36dc5620667ee4af743bf591e091476af65cc5fc","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _get_changed_synthetic_fields(self):"},{"line_number":42,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":43,"context_line":"        for field in self._get_changed_persistent_fields():"},{"line_number":44,"context_line":"            if field in fields:"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_c30ff489","line":41,"in_reply_to":"7aa08908_d714d64e","updated":"2016-06-17 11:52:26.000000000","message":"Makes sense. Done.","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"632b847bb719672580c4bc54ae197835bfbd965b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def create(self):"},{"line_number":49,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":50,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":51,"context_line":"            if \u0027is_default\u0027:"},{"line_number":52,"context_line":"                if self.is_default:"},{"line_number":53,"context_line":"                    default_group \u003d DefaultSecurityGroup("},{"line_number":54,"context_line":"                        self.obj_context,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_574466b6","line":51,"updated":"2016-06-15 08:35:25.000000000","message":"lefover?","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"36dc5620667ee4af743bf591e091476af65cc5fc","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def create(self):"},{"line_number":49,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":50,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":51,"context_line":"            if \u0027is_default\u0027:"},{"line_number":52,"context_line":"                if self.is_default:"},{"line_number":53,"context_line":"                    default_group \u003d DefaultSecurityGroup("},{"line_number":54,"context_line":"                        self.obj_context,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_23c5183d","line":51,"in_reply_to":"7aa08908_574466b6","updated":"2016-06-17 11:52:26.000000000","message":"yes thanks for noticing. Removed.","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d8a863a7c7e98ece0c675c767667d7762adaf69a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":61,"context_line":"            synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":62,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":63,"context_line":"            if synthetic_changes:"},{"line_number":64,"context_line":"                if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":65,"context_line":"                    old \u003d DefaultSecurityGroup.get_object("},{"line_number":66,"context_line":"                        self.obj_context,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_a11ffd07","line":63,"updated":"2016-06-16 12:38:50.000000000","message":"I think we need to open transaction before line 62 and leave it open until the end of the method, to make sure we mark the group as default in the same transaction where we update other group fields.","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0a579ec7fb0911c1cf156c45f4c24198978d4b45","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":61,"context_line":"            synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":62,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":63,"context_line":"            if synthetic_changes:"},{"line_number":64,"context_line":"                if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":65,"context_line":"                    old \u003d DefaultSecurityGroup.get_object("},{"line_number":66,"context_line":"                        self.obj_context,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_c1a7a9a5","line":63,"in_reply_to":"7aa08908_a11ffd07","updated":"2016-06-16 12:39:43.000000000","message":"Ouch. Sorry, we already do that in line 60. :-X I think the line 61 belongs to out of the transaction though.","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"36dc5620667ee4af743bf591e091476af65cc5fc","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":61,"context_line":"            synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":62,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":63,"context_line":"            if synthetic_changes:"},{"line_number":64,"context_line":"                if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":65,"context_line":"                    old \u003d DefaultSecurityGroup.get_object("},{"line_number":66,"context_line":"                        self.obj_context,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_45e269d6","line":63,"in_reply_to":"7aa08908_c1a7a9a5","updated":"2016-06-17 11:52:26.000000000","message":"Done","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"632b847bb719672580c4bc54ae197835bfbd965b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":61,"context_line":"            synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":62,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":63,"context_line":"            if synthetic_changes:"},{"line_number":64,"context_line":"                if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":65,"context_line":"                    old \u003d DefaultSecurityGroup.get_object("},{"line_number":66,"context_line":"                        self.obj_context,"},{"line_number":67,"context_line":"                        tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_c27ff267","line":64,"range":{"start_line":63,"start_character":0,"end_line":64,"end_character":53},"updated":"2016-06-15 08:35:25.000000000","message":"these lines can be simplified since is_default is the only synthetic field:\n\nif \u0027is_default\u0027 in self.obj_get_changes():","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d8a863a7c7e98ece0c675c767667d7762adaf69a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":61,"context_line":"            synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":62,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":63,"context_line":"            if synthetic_changes:"},{"line_number":64,"context_line":"                if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":65,"context_line":"                    old \u003d DefaultSecurityGroup.get_object("},{"line_number":66,"context_line":"                        self.obj_context,"},{"line_number":67,"context_line":"                        tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_c14fa932","line":64,"range":{"start_line":63,"start_character":0,"end_line":64,"end_character":53},"in_reply_to":"7aa08908_c27ff267","updated":"2016-06-16 12:38:50.000000000","message":"+","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"36dc5620667ee4af743bf591e091476af65cc5fc","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":61,"context_line":"            synthetic_changes \u003d self._get_changed_synthetic_fields()"},{"line_number":62,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":63,"context_line":"            if synthetic_changes:"},{"line_number":64,"context_line":"                if \u0027is_default\u0027 in synthetic_changes:"},{"line_number":65,"context_line":"                    old \u003d DefaultSecurityGroup.get_object("},{"line_number":66,"context_line":"                        self.obj_context,"},{"line_number":67,"context_line":"                        tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_e30e708b","line":64,"range":{"start_line":63,"start_character":0,"end_line":64,"end_character":53},"in_reply_to":"7aa08908_c27ff267","updated":"2016-06-17 11:52:26.000000000","message":"Done","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"},{"author":{"_account_id":9423,"name":"Roey Chen","email":"roeyc@vmware.com","username":"roeyc"},"change_message_id":"be6595b015090e213923edb8354ec94470c8fe13","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    @classmethod"},{"line_number":114,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":115,"context_line":"        result \u003d super(SecurityGroupRule, cls).modify_fields_to_db(fields)"},{"line_number":116,"context_line":"        if (\u0027remote_ip_prefix\u0027 in result and"},{"line_number":117,"context_line":"            result[\u0027remote_ip_prefix\u0027] is not None):"},{"line_number":118,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"},{"line_number":119,"context_line":"        return result"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_fd66ca27","line":117,"range":{"start_line":116,"start_character":8,"end_line":117,"end_character":52},"updated":"2016-06-21 08:52:20.000000000","message":"if result.get(\u0027remote_ip_prefix\u0027) is not None:\n   ...","commit_id":"0194be8295e276e3cfb5e4668721fe70cdff11af"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"93d6d03a2f781c6a35c005edadce62088329ba6c","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    @classmethod"},{"line_number":114,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":115,"context_line":"        result \u003d super(SecurityGroupRule, cls).modify_fields_to_db(fields)"},{"line_number":116,"context_line":"        if (\u0027remote_ip_prefix\u0027 in result and"},{"line_number":117,"context_line":"            result[\u0027remote_ip_prefix\u0027] is not None):"},{"line_number":118,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"},{"line_number":119,"context_line":"        return result"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"3aaa91ec_c4b9b430","line":117,"range":{"start_line":116,"start_character":8,"end_line":117,"end_character":52},"in_reply_to":"5a9d85d2_fd66ca27","updated":"2016-06-21 21:12:36.000000000","message":"Done","commit_id":"0194be8295e276e3cfb5e4668721fe70cdff11af"},{"author":{"_account_id":9423,"name":"Roey Chen","email":"roeyc@vmware.com","username":"roeyc"},"change_message_id":"be6595b015090e213923edb8354ec94470c8fe13","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    @classmethod"},{"line_number":124,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":125,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":126,"context_line":"        if (\u0027remote_ip_prefix\u0027 in fields and"},{"line_number":127,"context_line":"            fields[\u0027remote_ip_prefix\u0027] is not None):"},{"line_number":128,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":129,"context_line":"                netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":130,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_1d32b610","line":127,"range":{"start_line":126,"start_character":8,"end_line":127,"end_character":52},"updated":"2016-06-21 08:52:20.000000000","message":"ditto","commit_id":"0194be8295e276e3cfb5e4668721fe70cdff11af"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"93d6d03a2f781c6a35c005edadce62088329ba6c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    @classmethod"},{"line_number":124,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":125,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":126,"context_line":"        if (\u0027remote_ip_prefix\u0027 in fields and"},{"line_number":127,"context_line":"            fields[\u0027remote_ip_prefix\u0027] is not None):"},{"line_number":128,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":129,"context_line":"                netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":130,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":34,"id":"3aaa91ec_04829c52","line":127,"range":{"start_line":126,"start_character":8,"end_line":127,"end_character":52},"in_reply_to":"5a9d85d2_1d32b610","updated":"2016-06-21 21:12:36.000000000","message":"Done","commit_id":"0194be8295e276e3cfb5e4668721fe70cdff11af"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9eab954f434e4937a93063efef20d267817ca53e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":43,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":44,"context_line":"            if self.is_default:"},{"line_number":45,"context_line":"                default_group \u003d DefaultSecurityGroup("},{"line_number":46,"context_line":"                    self.obj_context,"},{"line_number":47,"context_line":"                    tenant_id\u003dself.tenant_id,"},{"line_number":48,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":49,"context_line":"                default_group.create()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def update(self):"},{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_19e2a89f","line":49,"range":{"start_line":45,"start_character":1,"end_line":49,"end_character":38},"updated":"2016-06-23 10:20:43.000000000","message":"Nit: I would make this a separate method and then re-use it on L61","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3aa2e410056a10e1fc8efa60e420d329f9f57e78","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":43,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":44,"context_line":"            if self.is_default:"},{"line_number":45,"context_line":"                default_group \u003d DefaultSecurityGroup("},{"line_number":46,"context_line":"                    self.obj_context,"},{"line_number":47,"context_line":"                    tenant_id\u003dself.tenant_id,"},{"line_number":48,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":49,"context_line":"                default_group.create()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def update(self):"},{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_40bef0d4","line":49,"range":{"start_line":45,"start_character":1,"end_line":49,"end_character":38},"in_reply_to":"3aaa91ec_19e2a89f","updated":"2016-06-23 11:34:54.000000000","message":"Done","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9eab954f434e4937a93063efef20d267817ca53e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_b9b71485","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"updated":"2016-06-23 10:20:43.000000000","message":"Noob question: Are we allowed to change default security group to non-default and vice-versa? I thought default security group is hardcoded.","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"675cae571c42d1963b81b2b3753faa9642719185","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_03d8721c","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"in_reply_to":"3aaa91ec_0074e8fa","updated":"2016-06-23 11:45:50.000000000","message":"Maybe I misunderstand this method - I thought that this is triggered when you change is_default field and then call update().\n\nI mean that default security group creation is hardcoded https://github.com/openstack/neutron/blob/master/neutron/db/securitygroups_db.py#L713\n\nWhich means the is_default is used only there and the is_default attribute itself is hidden to API: https://github.com/openstack/neutron/blob/master/neutron/extensions/securitygroup.py#L223","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"fb2e53697c63ebff81b6bb5546b216b832d57be3","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_4fa29baf","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"in_reply_to":"3aaa91ec_03d8721c","updated":"2016-06-23 12:39:35.000000000","message":"Yes that is right about the method. That is exactly what it is supposed to do. Are you implying that is_default can possibly not be changed?","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fb6974a89212641992071e124c337b3e193b5b3c","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_162edca4","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"in_reply_to":"3aaa91ec_056188d3","updated":"2016-06-23 15:53:19.000000000","message":"You don\u0027t need to change the field, you just need to delete the whole object/entry in database. Having it in fields_no_update shouldn\u0027t influence deletion.","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"f3df426b59cff63d2893a9a97e10e15732c9f1b9","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_056188d3","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"in_reply_to":"3aaa91ec_1f0b978f","updated":"2016-06-23 15:07:53.000000000","message":"I am a bit confused now. What will happen to the is_default flag in that case since we also put it in fields_no_update? And also since by default this field is false there will be no way to change it.","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"24fc7923b5ccc055e33fe0569c0b22af65a25848","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_1f0b978f","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"in_reply_to":"3aaa91ec_2bde1c11","updated":"2016-06-23 14:50:47.000000000","message":"Whenever admin attempts to remove default security group.","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"cca0ef0d964c427196650b09c9512a23adb954c9","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_612a0b2e","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"in_reply_to":"3aaa91ec_4fa29baf","updated":"2016-06-23 12:52:37.000000000","message":"Yes, it\u0027s not even part of any model. I think it\u0027s here just to encapsulate two models into one object, while using the other (default) just for db crud operations. So I think it should be no_update. Any other thoughts?","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"e7172349bc3648fb65b2f2afc3c2c455e5ceec7d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_da8f64ca","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"in_reply_to":"3aaa91ec_612a0b2e","updated":"2016-06-23 13:37:17.000000000","message":"you mean we should add it to fields_no_update?","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"60f178dd07cc6236b6b02e1cead99e53117dd4d9","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_2bde1c11","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"in_reply_to":"3aaa91ec_759ac164","updated":"2016-06-23 14:10:22.000000000","message":"Following that, in what case would it be deleted from the default security groups?","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"12c2352eaad4832ed0d34c9b23d8b1d4bc1c7fc4","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_f507d119","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"in_reply_to":"3aaa91ec_759ac164","updated":"2016-06-23 13:50:06.000000000","message":"I agree. Let\u0027s see what the others have to say.","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3aa2e410056a10e1fc8efa60e420d329f9f57e78","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_0074e8fa","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"in_reply_to":"3aaa91ec_b9b71485","updated":"2016-06-23 11:34:54.000000000","message":"I guess there is a possibility to remove entries from the default security group table so it become non-default. Not sure what you mean by hardcoded. Where?","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ce9b1a0e1934c120a7aaca7390eab75544dca66d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        fields \u003d self.obj_get_changes()"},{"line_number":53,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":54,"context_line":"            super(SecurityGroup, self).update()"},{"line_number":55,"context_line":"            if \u0027is_default\u0027 in fields:"},{"line_number":56,"context_line":"                old \u003d DefaultSecurityGroup.get_object("},{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_759ac164","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":38},"in_reply_to":"3aaa91ec_da8f64ca","updated":"2016-06-23 13:45:22.000000000","message":"Yes, and handle it only for create() and delete().","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9eab954f434e4937a93063efef20d267817ca53e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"},{"line_number":59,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":60,"context_line":"                if self.is_default and old is None:"},{"line_number":61,"context_line":"                    new \u003d DefaultSecurityGroup("},{"line_number":62,"context_line":"                        self.obj_context,"},{"line_number":63,"context_line":"                        tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_79612c39","line":60,"range":{"start_line":60,"start_character":39,"end_line":60,"end_character":50},"updated":"2016-06-23 10:20:43.000000000","message":"Nit: not old","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"7b9ccd18e4307e658c980fdb24c9bf3f5f9ddb57","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"},{"line_number":59,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":60,"context_line":"                if self.is_default and old is None:"},{"line_number":61,"context_line":"                    new \u003d DefaultSecurityGroup("},{"line_number":62,"context_line":"                        self.obj_context,"},{"line_number":63,"context_line":"                        tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_cea4d1a7","line":60,"range":{"start_line":60,"start_character":39,"end_line":60,"end_character":50},"in_reply_to":"3aaa91ec_40cb901e","updated":"2016-06-23 12:00:06.000000000","message":"Sorry this was correct. I reverted the change now. This case translates to if is_default is True and the obj is not already in the default sec group then it should be created. So old should be None and vice-vera for the case below.","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3aa2e410056a10e1fc8efa60e420d329f9f57e78","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"},{"line_number":59,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":60,"context_line":"                if self.is_default and old is None:"},{"line_number":61,"context_line":"                    new \u003d DefaultSecurityGroup("},{"line_number":62,"context_line":"                        self.obj_context,"},{"line_number":63,"context_line":"                        tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_40cb901e","line":60,"range":{"start_line":60,"start_character":39,"end_line":60,"end_character":50},"in_reply_to":"3aaa91ec_79612c39","updated":"2016-06-23 11:34:54.000000000","message":"Done","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"fb2e53697c63ebff81b6bb5546b216b832d57be3","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"},{"line_number":59,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":60,"context_line":"                if self.is_default and old is None:"},{"line_number":61,"context_line":"                    new \u003d DefaultSecurityGroup("},{"line_number":62,"context_line":"                        self.obj_context,"},{"line_number":63,"context_line":"                        tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_8f83e303","line":60,"range":{"start_line":60,"start_character":39,"end_line":60,"end_character":50},"in_reply_to":"3aaa91ec_8ed2c9d0","updated":"2016-06-23 12:39:35.000000000","message":"Right. Done.","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"3701e0a6703648975a98ce39e2b28ba76bcc48cc","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                    self.obj_context,"},{"line_number":58,"context_line":"                    tenant_id\u003dself.tenant_id,"},{"line_number":59,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":60,"context_line":"                if self.is_default and old is None:"},{"line_number":61,"context_line":"                    new \u003d DefaultSecurityGroup("},{"line_number":62,"context_line":"                        self.obj_context,"},{"line_number":63,"context_line":"                        tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_8ed2c9d0","line":60,"range":{"start_line":60,"start_character":39,"end_line":60,"end_character":50},"in_reply_to":"3aaa91ec_cea4d1a7","updated":"2016-06-23 12:03:16.000000000","message":"Why do you need to test its identity to None? get_object() returns either object or None - object is always evaluated as True, so according idiomatic Python the condition should be:\n\n if self.is_default and not old:","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9eab954f434e4937a93063efef20d267817ca53e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                        tenant_id\u003dself.tenant_id,"},{"line_number":64,"context_line":"                        security_group_id\u003dself.id)"},{"line_number":65,"context_line":"                    new.create()"},{"line_number":66,"context_line":"                elif not self.is_default and old is not None:"},{"line_number":67,"context_line":"                    old.delete()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_b95b9486","line":66,"range":{"start_line":66,"start_character":45,"end_line":66,"end_character":60},"updated":"2016-06-23 10:20:43.000000000","message":"Nit: old","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3aa2e410056a10e1fc8efa60e420d329f9f57e78","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                        tenant_id\u003dself.tenant_id,"},{"line_number":64,"context_line":"                        security_group_id\u003dself.id)"},{"line_number":65,"context_line":"                    new.create()"},{"line_number":66,"context_line":"                elif not self.is_default and old is not None:"},{"line_number":67,"context_line":"                    old.delete()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_e0dc3ce6","line":66,"range":{"start_line":66,"start_character":45,"end_line":66,"end_character":60},"in_reply_to":"3aaa91ec_b95b9486","updated":"2016-06-23 11:34:54.000000000","message":"Done","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9eab954f434e4937a93063efef20d267817ca53e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    }"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027security_group_id\u0027,"},{"line_number":108,"context_line":"                        \u0027remote_group_id\u0027]"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    # TODO(sayalilunkad): get rid of it once we switch the db model to using"},{"line_number":111,"context_line":"    # custom types."}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_19a74850","line":108,"range":{"start_line":108,"start_character":24,"end_line":108,"end_character":41},"updated":"2016-06-23 10:20:43.000000000","message":"Why is this in no_update? We can change remote group id for a security group, can\u0027t we?","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3aa2e410056a10e1fc8efa60e420d329f9f57e78","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    }"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027security_group_id\u0027,"},{"line_number":108,"context_line":"                        \u0027remote_group_id\u0027]"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    # TODO(sayalilunkad): get rid of it once we switch the db model to using"},{"line_number":111,"context_line":"    # custom types."}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_e0b1dc90","line":108,"range":{"start_line":108,"start_character":24,"end_line":108,"end_character":41},"in_reply_to":"3aaa91ec_19a74850","updated":"2016-06-23 11:34:54.000000000","message":"You are right, we can. Changed!","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9eab954f434e4937a93063efef20d267817ca53e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    @classmethod"},{"line_number":113,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":114,"context_line":"        result \u003d super(SecurityGroupRule, cls).modify_fields_to_db(fields)"},{"line_number":115,"context_line":"        if result.get(\u0027remote_ip_prefix\u0027) is not None:"},{"line_number":116,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"},{"line_number":117,"context_line":"        return result"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_d95ae04f","line":115,"range":{"start_line":115,"start_character":41,"end_line":115,"end_character":53},"updated":"2016-06-23 10:20:43.000000000","message":"Nit: remove","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3aa2e410056a10e1fc8efa60e420d329f9f57e78","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    @classmethod"},{"line_number":113,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":114,"context_line":"        result \u003d super(SecurityGroupRule, cls).modify_fields_to_db(fields)"},{"line_number":115,"context_line":"        if result.get(\u0027remote_ip_prefix\u0027) is not None:"},{"line_number":116,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"},{"line_number":117,"context_line":"        return result"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_20e764b1","line":115,"range":{"start_line":115,"start_character":41,"end_line":115,"end_character":53},"in_reply_to":"3aaa91ec_d95ae04f","updated":"2016-06-23 11:34:54.000000000","message":"Done","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9eab954f434e4937a93063efef20d267817ca53e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    @classmethod"},{"line_number":122,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":123,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":124,"context_line":"        if fields.get(\u0027remote_ip_prefix\u0027) is not None:"},{"line_number":125,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":126,"context_line":"                netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":127,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_593550f5","line":124,"range":{"start_line":124,"start_character":41,"end_line":124,"end_character":53},"updated":"2016-06-23 10:20:43.000000000","message":"Nit: remove","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3aa2e410056a10e1fc8efa60e420d329f9f57e78","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    @classmethod"},{"line_number":122,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":123,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":124,"context_line":"        if fields.get(\u0027remote_ip_prefix\u0027) is not None:"},{"line_number":125,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":126,"context_line":"                netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":127,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_00e2289f","line":124,"range":{"start_line":124,"start_character":41,"end_line":124,"end_character":53},"in_reply_to":"3aaa91ec_593550f5","updated":"2016-06-23 11:34:54.000000000","message":"Done","commit_id":"970d3b56f3554d32b3701c5da60aaf6676cbced5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6916823f92429c193ba41f7a31291cfe04f9464e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3aaa91ec_87a20e99","line":33,"updated":"2016-06-27 16:42:44.000000000","message":"that must be StringField, since tenant-ids are not enforced to be UUIDs.","commit_id":"6079e63fef66d6fe6ad6ded96d9cca6742c40d1f"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3779b44f62fda237b7eedaac807b130cab913d09","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3aaa91ec_5c640221","line":33,"in_reply_to":"3aaa91ec_87a20e99","updated":"2016-07-01 15:14:29.000000000","message":"Done","commit_id":"6079e63fef66d6fe6ad6ded96d9cca6742c40d1f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6916823f92429c193ba41f7a31291cfe04f9464e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"3aaa91ec_67c6024b","line":34,"updated":"2016-06-27 16:42:44.000000000","message":"make it fields_no_update as discussed in IRC meeting.","commit_id":"6079e63fef66d6fe6ad6ded96d9cca6742c40d1f"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3779b44f62fda237b7eedaac807b130cab913d09","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"3aaa91ec_9c6aeaeb","line":34,"in_reply_to":"3aaa91ec_67c6024b","updated":"2016-07-01 15:14:29.000000000","message":"Done","commit_id":"6079e63fef66d6fe6ad6ded96d9cca6742c40d1f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6916823f92429c193ba41f7a31291cfe04f9464e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    db_model \u003d models.DefaultSecurityGroup"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    fields \u003d {"},{"line_number":77,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":78,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":79,"context_line":"    }"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3aaa91ec_e7b952cd","line":77,"updated":"2016-06-27 16:42:44.000000000","message":"ditto","commit_id":"6079e63fef66d6fe6ad6ded96d9cca6742c40d1f"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3779b44f62fda237b7eedaac807b130cab913d09","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    db_model \u003d models.DefaultSecurityGroup"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    fields \u003d {"},{"line_number":77,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":78,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":79,"context_line":"    }"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"3aaa91ec_bc7526cc","line":77,"in_reply_to":"3aaa91ec_e7b952cd","updated":"2016-07-01 15:14:29.000000000","message":"Done","commit_id":"6079e63fef66d6fe6ad6ded96d9cca6742c40d1f"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3779b44f62fda237b7eedaac807b130cab913d09","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    fields \u003d {"},{"line_number":94,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":95,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":96,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":97,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":98,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(),"}],"source_content_type":"text/x-python","patch_set":40,"id":"3aaa91ec_fc7b2ebc","line":95,"updated":"2016-07-01 15:14:29.000000000","message":"changed it here as well.","commit_id":"6079e63fef66d6fe6ad6ded96d9cca6742c40d1f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"cc7ed3bf4a26c39e14310e95ba3a9fe4174fb6ce","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027is_default\u0027]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def create(self):"},{"line_number":42,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_e28da77c","line":39,"range":{"start_line":39,"start_character":24,"end_line":39,"end_character":36},"updated":"2016-07-04 11:52:09.000000000","message":"how do we set is_default when doing the get_object(s)?\n\u0027is_default\u0027 is by default set to False, and there is no logic to set it to some other value...\n\nWhen we will fetch the objects, all of them would have \u0027is_default\u0027 set to False.","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d4616d0f6208202f377378f59a2b9834318b7eb8","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027is_default\u0027]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def create(self):"},{"line_number":42,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_3501a2af","line":39,"range":{"start_line":39,"start_character":24,"end_line":39,"end_character":36},"in_reply_to":"1aa78d24_e28da77c","updated":"2016-07-04 13:30:52.000000000","message":"I thought it can be done on create. Check the updated test case here https://review.openstack.org/#/c/284738/42/neutron/tests/unit/objects/port/extensions/test_securitygroups.py","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"554c0d5d5372998c1e3c3eeb2ad9ee66fadea0a4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":49,"context_line":"                default_group.create()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def delete(self):"},{"line_number":52,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":53,"context_line":"            super(SecurityGroup, self).delete()"},{"line_number":54,"context_line":"            if self.is_default:"}],"source_content_type":"text/x-python","patch_set":41,"id":"3aaa91ec_33aba720","line":51,"updated":"2016-07-01 15:44:17.000000000","message":"I don\u0027t think it\u0027s needed, since it will be removed thru cascade.","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"d4616d0f6208202f377378f59a2b9834318b7eb8","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":49,"context_line":"                default_group.create()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def delete(self):"},{"line_number":52,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":53,"context_line":"            super(SecurityGroup, self).delete()"},{"line_number":54,"context_line":"            if self.is_default:"}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_d50f7edf","line":51,"in_reply_to":"3aaa91ec_0980fef6","updated":"2016-07-04 13:30:52.000000000","message":"Done","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9917b3e51fab33d57097d915d3b3d692d44c9ca4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":49,"context_line":"                default_group.create()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def delete(self):"},{"line_number":52,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":53,"context_line":"            super(SecurityGroup, self).delete()"},{"line_number":54,"context_line":"            if self.is_default:"}],"source_content_type":"text/x-python","patch_set":41,"id":"3aaa91ec_0980fef6","line":51,"in_reply_to":"3aaa91ec_33aba720","updated":"2016-07-01 16:09:31.000000000","message":"Ah, he\u0027s right. My bad :( Sorry","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"554c0d5d5372998c1e3c3eeb2ad9ee66fadea0a4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def delete(self):"},{"line_number":52,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":53,"context_line":"            super(SecurityGroup, self).delete()"},{"line_number":54,"context_line":"            if self.is_default:"},{"line_number":55,"context_line":"                default_group \u003d DefaultSecurityGroup.get_object("},{"line_number":56,"context_line":"                    self.obj_context,"},{"line_number":57,"context_line":"                    tenant_id\u003dself.tenant_id,"}],"source_content_type":"text/x-python","patch_set":41,"id":"3aaa91ec_53ae3330","line":54,"updated":"2016-07-01 15:44:17.000000000","message":"I don\u0027t think it\u0027s needed, since it will be removed thru cascade.","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"554c0d5d5372998c1e3c3eeb2ad9ee66fadea0a4","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":116,"context_line":"        if fields.get(\u0027remote_ip_prefix\u0027):"},{"line_number":117,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":118,"context_line":"                netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":119,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":41,"id":"3aaa91ec_d62331a9","line":118,"updated":"2016-07-01 15:44:17.000000000","message":"I think we should apply utils.AuthenticIPNetwork here to retain the original string format.","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"f0bc64ac619c8cd1ae3b013cd8adb2bb22569e0d","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":116,"context_line":"        if fields.get(\u0027remote_ip_prefix\u0027):"},{"line_number":117,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":118,"context_line":"                netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":119,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_26807e46","line":118,"in_reply_to":"1aa78d24_3a37214e","updated":"2016-07-08 07:59:18.000000000","message":"Ok, I updated it in the recent patch.\nhttps://review.openstack.org/#/c/284738/43/neutron/objects/port/extensions/securitygroups.py","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ef9469e66253dcdd49467daf6700ee93bde1ba92","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":116,"context_line":"        if fields.get(\u0027remote_ip_prefix\u0027):"},{"line_number":117,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":118,"context_line":"                netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":119,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_3a37214e","line":118,"in_reply_to":"1aa78d24_aa140cf5","updated":"2016-07-07 12:45:35.000000000","message":"Anything that netaddr.IPAddress allows for an address. Which can be e.g. 10.0.0.1/32 that, without the authentic applied, will be normalized to 10.0.0.1 by netaddr library.","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"3683769ef13116bc234a5a6ca86d09db4b38bda0","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":116,"context_line":"        if fields.get(\u0027remote_ip_prefix\u0027):"},{"line_number":117,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":118,"context_line":"                netaddr.IPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":119,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_aa140cf5","line":118,"in_reply_to":"3aaa91ec_d62331a9","updated":"2016-07-04 14:46:32.000000000","message":"Changing to this does not seem to change anything. What would original string format be?","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"5c7223b061fb01eb2cc1cb37151bf53bd3ef60f6","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027tenant_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":35,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_3f021270","line":32,"range":{"start_line":32,"start_character":16,"end_line":32,"end_character":39},"updated":"2016-07-19 09:44:48.000000000","message":"name can be nullable.","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b529771b0ca2337aaf9cd34dc2976c307aa40ad1","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027tenant_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":35,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_f8c12f4f","line":32,"range":{"start_line":32,"start_character":16,"end_line":32,"end_character":39},"in_reply_to":"dada55a8_3f021270","updated":"2016-07-27 15:04:29.000000000","message":"Done","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a895eccf3c71d615100895286baa56149e2ca403","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027tenant_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_557646a4","line":33,"updated":"2016-07-27 11:36:59.000000000","message":"Now that I0d4a9934af9253321593a6bd64edfd6f660c26f1 is in, this should be project_id. It will require to populate fields_need_translation with the map.","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b529771b0ca2337aaf9cd34dc2976c307aa40ad1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027tenant_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_9880f3f8","line":33,"in_reply_to":"dada55a8_557646a4","updated":"2016-07-27 15:04:29.000000000","message":"Done","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"5c7223b061fb01eb2cc1cb37151bf53bd3ef60f6","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027tenant_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027is_default\u0027]"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_3f1052a8","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":20},"updated":"2016-07-19 09:44:48.000000000","message":"After looking at SG usage scenarios, we do not need it in SG fields, default security group object is stand-alone entity.","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"53ec7f8d80d701179af1bae0a6c4f2bea6a5749e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027tenant_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027is_default\u0027]"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_3f9be473","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":20},"in_reply_to":"dada55a8_3f1052a8","updated":"2016-07-20 14:27:25.000000000","message":"it\u0027s a stand-alone object that we don\u0027t want to expose :)\nThe caller of the ovo should simply use the is_default attribute that should hid the fact that we are using another table to store that info, does it make sense? see also my comment here [1]\n\n[1] https://review.openstack.org/#/c/275664","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a895eccf3c71d615100895286baa56149e2ca403","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027tenant_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027is_default\u0027: obj_fields.BooleanField(default\u003dFalse)"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027is_default\u0027]"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_957a7e75","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":20},"in_reply_to":"dada55a8_3f9be473","updated":"2016-07-27 11:36:59.000000000","message":"Agreed with Rossella. From user perspective, it\u0027s better to work with a single object.","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a895eccf3c71d615100895286baa56149e2ca403","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027is_default\u0027]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def create(self):"},{"line_number":42,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_35947235","line":39,"updated":"2016-07-27 11:36:59.000000000","message":"shouldn\u0027t we then also provide a way to load field on get_object/get_objects? otherwise objects returned won\u0027t have the field set.","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b529771b0ca2337aaf9cd34dc2976c307aa40ad1","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027is_default\u0027]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def create(self):"},{"line_number":42,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_f88c8fd8","line":39,"in_reply_to":"dada55a8_35947235","updated":"2016-07-27 15:04:29.000000000","message":"Done","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"5c7223b061fb01eb2cc1cb37151bf53bd3ef60f6","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def create(self):"},{"line_number":42,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":43,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":44,"context_line":"            if self.is_default:"},{"line_number":45,"context_line":"                default_group \u003d DefaultSecurityGroup("},{"line_number":46,"context_line":"                    self.obj_context,"},{"line_number":47,"context_line":"                    tenant_id\u003dself.tenant_id,"},{"line_number":48,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":49,"context_line":"                default_group.create()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_3f5e9276","line":49,"range":{"start_line":41,"start_character":4,"end_line":49,"end_character":38},"updated":"2016-07-19 09:44:48.000000000","message":"if is-default is not required in SG object, we can remove overridden create() method form SG. Default SG will be created in neutron code base, not in SG object.","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b529771b0ca2337aaf9cd34dc2976c307aa40ad1","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    synthetic_fields \u003d [\u0027is_default\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def create(self):"},{"line_number":42,"context_line":"        with db_api.autonested_transaction(self.obj_context.session):"},{"line_number":43,"context_line":"            super(SecurityGroup, self).create()"},{"line_number":44,"context_line":"            if self.is_default:"},{"line_number":45,"context_line":"                default_group \u003d DefaultSecurityGroup("},{"line_number":46,"context_line":"                    self.obj_context,"},{"line_number":47,"context_line":"                    tenant_id\u003dself.tenant_id,"},{"line_number":48,"context_line":"                    security_group_id\u003dself.id)"},{"line_number":49,"context_line":"                default_group.create()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_18a9a324","line":49,"range":{"start_line":41,"start_character":4,"end_line":49,"end_character":38},"in_reply_to":"dada55a8_3f5e9276","updated":"2016-07-27 15:04:29.000000000","message":"We will probably leave the field, and just refrain from using DefaultSecurityGroup object in other modules.","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a895eccf3c71d615100895286baa56149e2ca403","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":53,"context_line":"class DefaultSecurityGroup(base.NeutronDbObject):"},{"line_number":54,"context_line":"    # Version 1.0: Initial version"},{"line_number":55,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_b5e4e20c","line":53,"updated":"2016-07-27 11:36:59.000000000","message":"Should we rename the object to _DefaultSecurityGroup to indicate it\u0027s not really meant to be used outside the module?","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b529771b0ca2337aaf9cd34dc2976c307aa40ad1","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":53,"context_line":"class DefaultSecurityGroup(base.NeutronDbObject):"},{"line_number":54,"context_line":"    # Version 1.0: Initial version"},{"line_number":55,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_18052313","line":53,"in_reply_to":"dada55a8_b5e4e20c","updated":"2016-07-27 15:04:29.000000000","message":"Done","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a895eccf3c71d615100895286baa56149e2ca403","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    db_model \u003d models.DefaultSecurityGroup"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    fields \u003d {"},{"line_number":60,"context_line":"        \u0027tenant_id\u0027: obj_fields.StringField(),"},{"line_number":61,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":62,"context_line":"    }"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_35bf52d1","line":60,"updated":"2016-07-27 11:36:59.000000000","message":"rename into project_id","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b529771b0ca2337aaf9cd34dc2976c307aa40ad1","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    db_model \u003d models.DefaultSecurityGroup"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    fields \u003d {"},{"line_number":60,"context_line":"        \u0027tenant_id\u0027: obj_fields.StringField(),"},{"line_number":61,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":62,"context_line":"    }"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_43016c04","line":60,"in_reply_to":"dada55a8_35bf52d1","updated":"2016-07-27 15:04:29.000000000","message":"Done","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a895eccf3c71d615100895286baa56149e2ca403","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":62,"context_line":"    }"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027security_group_id\u0027]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    primary_keys \u003d [\u0027tenant_id\u0027]"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_75e8aab3","line":64,"updated":"2016-07-27 11:36:59.000000000","message":"primary keys are implicitly not allowed to be updated, no need to have tenant_id here.","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b529771b0ca2337aaf9cd34dc2976c307aa40ad1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":62,"context_line":"    }"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    fields_no_update \u003d [\u0027tenant_id\u0027, \u0027security_group_id\u0027]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    primary_keys \u003d [\u0027tenant_id\u0027]"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_031c9468","line":64,"in_reply_to":"dada55a8_75e8aab3","updated":"2016-07-27 15:04:29.000000000","message":"Done","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a895eccf3c71d615100895286baa56149e2ca403","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    fields \u003d {"},{"line_number":77,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":78,"context_line":"        \u0027tenant_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":79,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":80,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":81,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(),"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_f5d49ae9","line":78,"updated":"2016-07-27 11:36:59.000000000","message":"rename into project_id","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b529771b0ca2337aaf9cd34dc2976c307aa40ad1","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    fields \u003d {"},{"line_number":77,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":78,"context_line":"        \u0027tenant_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":79,"context_line":"        \u0027security_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":80,"context_line":"        \u0027remote_group_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":81,"context_line":"        \u0027direction\u0027: common_types.FlowDirectionEnumField(),"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_e316a047","line":78,"in_reply_to":"dada55a8_f5d49ae9","updated":"2016-07-27 15:04:29.000000000","message":"Done","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a895eccf3c71d615100895286baa56149e2ca403","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    @classmethod"},{"line_number":94,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":95,"context_line":"        result \u003d super(SecurityGroupRule, cls).modify_fields_to_db(fields)"},{"line_number":96,"context_line":"        if result.get(\u0027remote_ip_prefix\u0027):"},{"line_number":97,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"},{"line_number":98,"context_line":"        return result"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_5514869e","line":96,"updated":"2016-07-27 11:36:59.000000000","message":"if \u0027remote_ip_prefix\u0027 in result:","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b529771b0ca2337aaf9cd34dc2976c307aa40ad1","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    @classmethod"},{"line_number":94,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":95,"context_line":"        result \u003d super(SecurityGroupRule, cls).modify_fields_to_db(fields)"},{"line_number":96,"context_line":"        if result.get(\u0027remote_ip_prefix\u0027):"},{"line_number":97,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"},{"line_number":98,"context_line":"        return result"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_434fac6a","line":96,"in_reply_to":"dada55a8_5514869e","updated":"2016-07-27 15:04:29.000000000","message":"Done","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a895eccf3c71d615100895286baa56149e2ca403","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":95,"context_line":"        result \u003d super(SecurityGroupRule, cls).modify_fields_to_db(fields)"},{"line_number":96,"context_line":"        if result.get(\u0027remote_ip_prefix\u0027):"},{"line_number":97,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"},{"line_number":98,"context_line":"        return result"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    # TODO(sayalilunkad): get rid of it once we switch the db model to using"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_b53ce22f","line":97,"updated":"2016-07-27 11:36:59.000000000","message":"we need to use filter_to_str here since result[\u0027remote_ip_prefix\u0027] may contain a list, not just a single value.","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b529771b0ca2337aaf9cd34dc2976c307aa40ad1","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":95,"context_line":"        result \u003d super(SecurityGroupRule, cls).modify_fields_to_db(fields)"},{"line_number":96,"context_line":"        if result.get(\u0027remote_ip_prefix\u0027):"},{"line_number":97,"context_line":"            result[\u0027remote_ip_prefix\u0027] \u003d str(result[\u0027remote_ip_prefix\u0027])"},{"line_number":98,"context_line":"        return result"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    # TODO(sayalilunkad): get rid of it once we switch the db model to using"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_233c3892","line":97,"in_reply_to":"dada55a8_b53ce22f","updated":"2016-07-27 15:04:29.000000000","message":"Done","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a895eccf3c71d615100895286baa56149e2ca403","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    @classmethod"},{"line_number":103,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":104,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":105,"context_line":"        if fields.get(\u0027remote_ip_prefix\u0027):"},{"line_number":106,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":107,"context_line":"                utils.AuthenticIPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":108,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_950a7e77","line":105,"updated":"2016-07-27 11:36:59.000000000","message":"if \u0027remote_ip_prefix\u0027 in fields:","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b529771b0ca2337aaf9cd34dc2976c307aa40ad1","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    @classmethod"},{"line_number":103,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":104,"context_line":"        fields \u003d super(SecurityGroupRule, cls).modify_fields_from_db(db_obj)"},{"line_number":105,"context_line":"        if fields.get(\u0027remote_ip_prefix\u0027):"},{"line_number":106,"context_line":"            fields[\u0027remote_ip_prefix\u0027] \u003d ("},{"line_number":107,"context_line":"                utils.AuthenticIPNetwork(fields[\u0027remote_ip_prefix\u0027]))"},{"line_number":108,"context_line":"        return fields"}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_6358f031","line":105,"in_reply_to":"dada55a8_950a7e77","updated":"2016-07-27 15:04:29.000000000","message":"Done","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"}],"neutron/objects/securitygroup.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"067d5fe19fd2891ebd39a54f585b11e286574f28","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            self._load_is_default(obj)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _load_is_default(self, db_obj):"},{"line_number":66,"context_line":"        setattr(self, \u0027is_default\u0027, db_obj.get(\u0027default_security_group\u0027))"},{"line_number":67,"context_line":"        self.obj_reset_changes([\u0027is_default\u0027])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"bacf61ea_14ec8ac6","line":66,"range":{"start_line":66,"start_character":48,"end_line":66,"end_character":70},"updated":"2016-07-27 21:23:54.000000000","message":"Newbie question: where is this coming from?\n\n\nI see a table named \u0027default_security_group\u0027, but not sure how that applies here unless its loading the table.","commit_id":"73ce92147d3fa3c279065a2373529c19199c8633"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c8efe6844c980d70cb08ba0aa80ef94ffc237fcc","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            self._load_is_default(obj)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _load_is_default(self, db_obj):"},{"line_number":66,"context_line":"        setattr(self, \u0027is_default\u0027, db_obj.get(\u0027default_security_group\u0027))"},{"line_number":67,"context_line":"        self.obj_reset_changes([\u0027is_default\u0027])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"bacf61ea_6f89b3ca","line":66,"range":{"start_line":66,"start_character":48,"end_line":66,"end_character":70},"in_reply_to":"bacf61ea_14ec8ac6","updated":"2016-07-27 21:38:29.000000000","message":"it comes thru the model relationship (that is defined in DefaultSecurityGroup model with a backref).","commit_id":"73ce92147d3fa3c279065a2373529c19199c8633"}],"neutron/tests/tools.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"5398843d1791704428eac1a1b5d3c318b640d63e","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def get_random_port():"},{"line_number":243,"context_line":"    maxlen \u003d 65535"},{"line_number":244,"context_line":"    return random.randint(1, maxlen)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_7eec052a","line":243,"range":{"start_line":243,"start_character":13,"end_line":243,"end_character":18},"updated":"2016-04-07 10:17:58.000000000","message":"Constant?","commit_id":"f739f05a57700791005aebd1308f153e7673495a"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"4b16c71ed2261ac18e0875916ab26b5d14591131","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def get_random_port():"},{"line_number":243,"context_line":"    maxlen \u003d 65535"},{"line_number":244,"context_line":"    return random.randint(1, maxlen)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_27df1dda","line":243,"range":{"start_line":243,"start_character":13,"end_line":243,"end_character":18},"in_reply_to":"9a061dce_7eec052a","updated":"2016-04-07 12:36:42.000000000","message":"Done","commit_id":"f739f05a57700791005aebd1308f153e7673495a"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"5398843d1791704428eac1a1b5d3c318b640d63e","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def get_random_port():"},{"line_number":243,"context_line":"    maxlen \u003d 65535"},{"line_number":244,"context_line":"    return random.randint(1, maxlen)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"def get_random_ip_version():"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_9ef599ee","line":244,"range":{"start_line":244,"start_character":26,"end_line":244,"end_character":27},"updated":"2016-04-07 10:17:58.000000000","message":"ditto","commit_id":"f739f05a57700791005aebd1308f153e7673495a"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"4b16c71ed2261ac18e0875916ab26b5d14591131","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def get_random_port():"},{"line_number":243,"context_line":"    maxlen \u003d 65535"},{"line_number":244,"context_line":"    return random.randint(1, maxlen)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"def get_random_ip_version():"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_07dad9e7","line":244,"range":{"start_line":244,"start_character":26,"end_line":244,"end_character":27},"in_reply_to":"9a061dce_9ef599ee","updated":"2016-04-07 12:36:42.000000000","message":"Done","commit_id":"f739f05a57700791005aebd1308f153e7673495a"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"763a1f5579485764662bd84232369864ac3d29a2","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def get_random_port():"},{"line_number":243,"context_line":"    minlen \u003d constants.PORT_MIN"},{"line_number":244,"context_line":"    maxlen \u003d constants.PORT_MAX"},{"line_number":245,"context_line":"    return random.randint(minlen, maxlen)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9a061dce_e1b3504b","line":244,"range":{"start_line":243,"start_character":4,"end_line":244,"end_character":31},"updated":"2016-04-07 12:59:25.000000000","message":"I don\u0027t see a need to create a new variable for this, you can use:\nrandom.randint(constants.PORT_MIN,\n               constants.PORT_MAX)","commit_id":"08a64cdfa9559aeb10494ee4b06afc1e9e0dea72"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"fff30cccec235a989cf07982dffcac0a716b8935","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def get_random_port():"},{"line_number":243,"context_line":"    minlen \u003d constants.PORT_MIN"},{"line_number":244,"context_line":"    maxlen \u003d constants.PORT_MAX"},{"line_number":245,"context_line":"    return random.randint(minlen, maxlen)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9a061dce_2131c85a","line":244,"range":{"start_line":243,"start_character":4,"end_line":244,"end_character":31},"in_reply_to":"9a061dce_e1b3504b","updated":"2016-04-07 13:06:20.000000000","message":"Done","commit_id":"08a64cdfa9559aeb10494ee4b06afc1e9e0dea72"}],"neutron/tests/unit/db/test_securitygroups_db.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04d50cf1d0d75a21d3c3de00ba333913140442e5","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"FAKE_SECGROUP \u003d {"},{"line_number":32,"context_line":"    \u0027security_group\u0027: {"},{"line_number":33,"context_line":"        \"tenant_id\": uuidutils.generate_uuid(),"},{"line_number":34,"context_line":"        \u0027description\u0027: \u0027fake\u0027,"},{"line_number":35,"context_line":"        \u0027name\u0027: \u0027fake\u0027"},{"line_number":36,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_01a99e8e","line":33,"range":{"start_line":33,"start_character":27,"end_line":33,"end_character":28},"updated":"2017-05-22 20:15:43.000000000","message":"tenant_id can be a random string (when neutron is used without keystone authN). if not, that\u0027s a problem. please revert to the original \u0027fake\u0027 value to make sure this patch doesn\u0027t break it.","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5227aecc07079301a7d07460b4a9f0bcc943bc03","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"FAKE_SECGROUP \u003d {"},{"line_number":32,"context_line":"    \u0027security_group\u0027: {"},{"line_number":33,"context_line":"        \"tenant_id\": uuidutils.generate_uuid(),"},{"line_number":34,"context_line":"        \u0027description\u0027: \u0027fake\u0027,"},{"line_number":35,"context_line":"        \u0027name\u0027: \u0027fake\u0027"},{"line_number":36,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_5f7beef3","line":33,"range":{"start_line":33,"start_character":27,"end_line":33,"end_character":28},"in_reply_to":"ff0f0b1f_01a99e8e","updated":"2017-05-22 23:45:50.000000000","message":"done","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5227aecc07079301a7d07460b4a9f0bcc943bc03","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"FAKE_SECGROUP_RULE \u003d {"},{"line_number":40,"context_line":"    \u0027security_group_rule\u0027: {"},{"line_number":41,"context_line":"        \"tenant_id\": uuidutils.generate_uuid(),"},{"line_number":42,"context_line":"        \u0027description\u0027: \u0027fake\u0027,"},{"line_number":43,"context_line":"        \u0027name\u0027: \u0027fake\u0027,"},{"line_number":44,"context_line":"        \u0027port_range_min\u0027: \u002721\u0027,"}],"source_content_type":"text/x-python","patch_set":72,"id":"ff0f0b1f_df6ede2d","line":41,"range":{"start_line":41,"start_character":21,"end_line":41,"end_character":46},"updated":"2017-05-22 23:45:50.000000000","message":"\u0027fake\u0027","commit_id":"fcd11f3ceccd0e609390766bdf5a526dc0302c60"}],"neutron/tests/unit/objects/port/extensions/test_securitygroups.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"c1061394a6920ecb3ddba6fedcd5e0a925685327","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from neutron.objects.port.extensions import securitygroups"},{"line_number":14,"context_line":"from neutron.tests.unit.objects import test_base"},{"line_number":15,"context_line":"from neutron.tests.unit import testlib_api"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class SecurityGroupDbObjectTestCase(test_base.BaseDbObjectTestCase,"},{"line_number":19,"context_line":"                                    testlib_api.SqlTestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_3e973a49","line":16,"updated":"2016-03-03 13:56:04.000000000","message":"Please add another test class that inherits from BaseObjectIfaceTestCase","commit_id":"946d541775ef3062ba05aa42d801d59a4df1b2f4"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"c1061394a6920ecb3ddba6fedcd5e0a925685327","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    _test_class \u003d securitygroups.SecurityGroup"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def _create_test_security_group(self):"},{"line_number":24,"context_line":"        sg_obj \u003d securitygroups.SecurityGroup(self.context, **self.db_obj)"},{"line_number":25,"context_line":"        sg_obj.create()"},{"line_number":26,"context_line":"        return sg_obj"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_3e229a52","line":23,"updated":"2016-03-03 13:56:04.000000000","message":"why do you need this method?","commit_id":"946d541775ef3062ba05aa42d801d59a4df1b2f4"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"bd6946d2540180bc2ee9b7025856ae79aa7df6ff","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    _test_class \u003d securitygroups.SecurityGroup"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def _create_test_security_group(self):"},{"line_number":24,"context_line":"        sg_obj \u003d securitygroups.SecurityGroup(self.context, **self.db_obj)"},{"line_number":25,"context_line":"        sg_obj.create()"},{"line_number":26,"context_line":"        return sg_obj"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_7e4702bc","line":23,"in_reply_to":"7af24918_3e229a52","updated":"2016-03-03 13:58:26.000000000","message":"To create the SecurityGroup object? Should I be doing this differently?","commit_id":"946d541775ef3062ba05aa42d801d59a4df1b2f4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    _test_class \u003d securitygroups.SecurityGroup"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def setUp(self):"},{"line_number":23,"context_line":"        super(SecurityGroupIfaceObjTestCase, self).setUp()"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_0c52ac13","line":22,"updated":"2016-03-15 17:40:47.000000000","message":"All setUp()s here and below are redundant. Please remove.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ab561b5f6ee3b4136dd8dd4c778a26287bae962f","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def setUp(self):"},{"line_number":42,"context_line":"        super(SecurityGroupRuleDbObjTestCase, self).setUp()"},{"line_number":43,"context_line":"        sg_obj \u003d securitygroups.SecurityGroup(self.context, **self.db_obj)"},{"line_number":44,"context_line":"        sg_obj.create()"},{"line_number":45,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields):"},{"line_number":46,"context_line":"            obj[\u0027security_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_2c7215e6","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":74},"updated":"2016-04-12 09:49:05.000000000","message":"You\u0027re creating SecurityGroup object with data from SecurityGroupRule. You should do something like:\n\n sg_db_obj \u003d self.get_random_fields(securitygroupds.SecurityGroup)\n sg_fields \u003d securitygroups.SecurityGroup.modify_fields_from_db(sg_db_obj)\n sg_obj \u003d securitygroups.SecurityGroup(\n     self.context, **test_base.remove_timestamps_from_fields(sg_fields))","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"87a0febb71c35ec95ce324495da42914f39f65f3","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def setUp(self):"},{"line_number":42,"context_line":"        super(SecurityGroupRuleDbObjTestCase, self).setUp()"},{"line_number":43,"context_line":"        sg_obj \u003d securitygroups.SecurityGroup(self.context, **self.db_obj)"},{"line_number":44,"context_line":"        sg_obj.create()"},{"line_number":45,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields):"},{"line_number":46,"context_line":"            obj[\u0027security_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_509423e1","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":74},"in_reply_to":"5a18252c_2c7215e6","updated":"2016-04-13 11:19:41.000000000","message":"Thanks for the input. Done.","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"715b86e13d142b15c0f5b9ede277004fdb41e8a0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        sg_obj \u003d securitygroups.SecurityGroup("},{"line_number":47,"context_line":"            self.context, **test_base.remove_timestamps_from_fields(sg_fields))"},{"line_number":48,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields):"},{"line_number":49,"context_line":"            obj[\u0027id\u0027] \u003d sg_obj[\u0027id\u0027]"},{"line_number":50,"context_line":"            obj[\u0027security_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"},{"line_number":51,"context_line":"            obj[\u0027remote_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a18252c_25e30807","line":49,"range":{"start_line":49,"start_character":12,"end_line":49,"end_character":36},"updated":"2016-04-13 12:54:27.000000000","message":"Won\u0027t this set the id to all security group rules object to the one from sg_obj?","commit_id":"04874c4c30fbab09b45504a53d34053561eaf7e4"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"c005e2cde2ab9df13a4a7980092f5d14e1f7239b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        sg_obj \u003d securitygroups.SecurityGroup("},{"line_number":47,"context_line":"            self.context, **test_base.remove_timestamps_from_fields(sg_fields))"},{"line_number":48,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields):"},{"line_number":49,"context_line":"            obj[\u0027id\u0027] \u003d sg_obj[\u0027id\u0027]"},{"line_number":50,"context_line":"            obj[\u0027security_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"},{"line_number":51,"context_line":"            obj[\u0027remote_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a122d0e_2a34d947","line":49,"range":{"start_line":49,"start_character":12,"end_line":49,"end_character":36},"in_reply_to":"5a18252c_25e30807","updated":"2016-04-21 07:45:27.000000000","message":"Removed.","commit_id":"04874c4c30fbab09b45504a53d34053561eaf7e4"},{"author":{"_account_id":19591,"name":"Saisrikiran Mudigonda","email":"saisrikiran.mudigonda@intel.com","username":"saisrikiran"},"change_message_id":"ac098bd09379bafb6e47d2d289b9e99a692af2e1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        sg_obj \u003d securitygroups.SecurityGroup("},{"line_number":47,"context_line":"            self.context, **test_base.remove_timestamps_from_fields(sg_fields))"},{"line_number":48,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields):"},{"line_number":49,"context_line":"            obj[\u0027security_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"},{"line_number":50,"context_line":"            obj[\u0027remote_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_7c9b5666","line":50,"range":{"start_line":49,"start_character":1,"end_line":50,"end_character":49},"updated":"2016-04-20 18:39:01.000000000","message":"Are you not missing tenant_id in the objs list?","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"3ac35970196e92a5bac86cecf67f26073ee5b866","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        sg_obj \u003d securitygroups.SecurityGroup("},{"line_number":47,"context_line":"            self.context, **test_base.remove_timestamps_from_fields(sg_fields))"},{"line_number":48,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields):"},{"line_number":49,"context_line":"            obj[\u0027security_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"},{"line_number":50,"context_line":"            obj[\u0027remote_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a122d0e_4b6dbbcb","line":50,"range":{"start_line":49,"start_character":1,"end_line":50,"end_character":49},"in_reply_to":"1a122d0e_7c9b5666","updated":"2016-04-21 16:36:53.000000000","message":"it\u0027s nullable","commit_id":"9f8bb8f8d304c6e0a0f451c57141fc9e15675867"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d97a54ead01ab93c7ef6019dc5932c07c8f46aba","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            self.context, **test_base.remove_timestamps_from_fields(sg_fields))"},{"line_number":59,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields):"},{"line_number":60,"context_line":"            obj[\u0027security_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"},{"line_number":61,"context_line":"            obj[\u0027remote_group_id\u0027] \u003d sg_obj[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_9d3816a2","line":61,"updated":"2016-06-13 14:06:51.000000000","message":"We should have test cases here specific to is_default handling.","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":6542,"name":"j_king","email":"james@agentultra.com","username":"james-agentultra"},"change_message_id":"3c9af772e98cfc050968da96ab092b25f484f7eb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"7aa08908_ae247e5f","line":62,"updated":"2016-06-14 14:20:57.000000000","message":"There might also be a foreign key constraint issue here causing the py27/34 test failures.","commit_id":"8cb0c9031f33cd689d2852d7def3b397f92ea675"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2b8971e9d6b716ff8e986d3c85c1fef6298089f2","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    _test_class \u003d securitygroups.SecurityGroupRule"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class SecurityGroupRuleDbObjTestCase(test_base.BaseDbObjectTestCase,"},{"line_number":48,"context_line":"                                     testlib_api.SqlTestCase):"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    _test_class \u003d securitygroups.SecurityGroupRule"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a9d85d2_4f5b1b55","line":47,"updated":"2016-06-20 09:06:57.000000000","message":"We still miss tests for is_default field.","commit_id":"0194be8295e276e3cfb5e4668721fe70cdff11af"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"554c0d5d5372998c1e3c3eeb2ad9ee66fadea0a4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            obj[\u0027is_default\u0027] \u003d True"},{"line_number":63,"context_line":"        self.sg_obj.create()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def test_create_default_group(self):"},{"line_number":66,"context_line":"        default_group \u003d securitygroups.DefaultSecurityGroup.get_object("},{"line_number":67,"context_line":"            self.context,"},{"line_number":68,"context_line":"            tenant_id\u003dself.sg_obj[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":41,"id":"3aaa91ec_f670eda6","line":65,"updated":"2016-07-01 15:44:17.000000000","message":"Those tests are misplaced, they belong to SecurityGroupDbObjTestCase","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"cc7ed3bf4a26c39e14310e95ba3a9fe4174fb6ce","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            obj[\u0027is_default\u0027] \u003d True"},{"line_number":63,"context_line":"        self.sg_obj.create()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def test_create_default_group(self):"},{"line_number":66,"context_line":"        default_group \u003d securitygroups.DefaultSecurityGroup.get_object("},{"line_number":67,"context_line":"            self.context,"},{"line_number":68,"context_line":"            tenant_id\u003dself.sg_obj[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_6749c98b","line":65,"in_reply_to":"3aaa91ec_f670eda6","updated":"2016-07-04 11:52:09.000000000","message":"I agree it should be moved. Also the test should create few entities of Security Group and try to fetch only the default one.","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"554c0d5d5372998c1e3c3eeb2ad9ee66fadea0a4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            security_group_id\u003dself.sg_obj[\u0027id\u0027])"},{"line_number":70,"context_line":"        self.assertIsNotNone(default_group)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_delete_default_group(self):"},{"line_number":73,"context_line":"        default_group \u003d securitygroups.DefaultSecurityGroup.get_object("},{"line_number":74,"context_line":"            self.context,"},{"line_number":75,"context_line":"            tenant_id\u003dself.sg_obj[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":41,"id":"3aaa91ec_768b5d69","line":72,"updated":"2016-07-01 15:44:17.000000000","message":"This test case seems to be identical to the one above. I guess it\u0027s some mistake.","commit_id":"f14035c9fcb5a5da3dc4dd126047c4fafaa2252b"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"6fe7c79f7b175464e3537ec92da432947ffd5b7a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from neutron.objects.port.extensions import securitygroups"},{"line_number":16,"context_line":"from neutron.tests.unit.objects import test_base"},{"line_number":17,"context_line":"from neutron.tests.unit import testlib_api"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class SecurityGroupIfaceObjTestCase(test_base.BaseObjectIfaceTestCase):"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"1aa78d24_3ae95415","line":18,"updated":"2016-07-05 15:55:25.000000000","message":"can we add some test for is_default?","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"a942b4b7806d5eb77f4b6cae44f259fe862f5ab2","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from neutron.objects.port.extensions import securitygroups"},{"line_number":16,"context_line":"from neutron.tests.unit.objects import test_base"},{"line_number":17,"context_line":"from neutron.tests.unit import testlib_api"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class SecurityGroupIfaceObjTestCase(test_base.BaseObjectIfaceTestCase):"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"1aa78d24_b61417a0","line":18,"in_reply_to":"1aa78d24_33a67e53","updated":"2016-07-06 10:24:59.000000000","message":"If we are not setting the \u0027is_default\u0027 value while get_objects, we cannot do anything more than create SG with is_default set to True. So what use cases should is_default handle?","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"a9a49da04ded22a0339ec7b4b9806f4d0b571bd0","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from neutron.objects.port.extensions import securitygroups"},{"line_number":16,"context_line":"from neutron.tests.unit.objects import test_base"},{"line_number":17,"context_line":"from neutron.tests.unit import testlib_api"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class SecurityGroupIfaceObjTestCase(test_base.BaseObjectIfaceTestCase):"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"1aa78d24_33a67e53","line":18,"in_reply_to":"1aa78d24_3ae95415","updated":"2016-07-06 09:25:13.000000000","message":"I think the test where we try to create_default_group is sort of testing is_default when it is set to true. and default cases it is false. Is there some other kind of test you would like to have?","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a895eccf3c71d615100895286baa56149e2ca403","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from neutron.objects.port.extensions import securitygroups"},{"line_number":16,"context_line":"from neutron.tests.unit.objects import test_base"},{"line_number":17,"context_line":"from neutron.tests.unit import testlib_api"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class SecurityGroupIfaceObjTestCase(test_base.BaseObjectIfaceTestCase):"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"dada55a8_d56fd628","line":18,"in_reply_to":"1aa78d24_b61417a0","updated":"2016-07-27 11:36:59.000000000","message":"Right. If the synthetic field is there, we should expose it via get_object(s) too.","commit_id":"4a156161664ec00adf4ec8057b106993128d3ad4"}],"neutron/tests/unit/objects/test_common_types.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"905f19c45130b4f739e11e1c690fe6668865c68a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        super(PortRangeFieldTest, self).setUp()"},{"line_number":119,"context_line":"        self.field \u003d common_types.PortRangeField()"},{"line_number":120,"context_line":"        self.coerce_good_values \u003d [(val, val) for val in (22, 80, 65535, 1)]"},{"line_number":121,"context_line":"        self.coerce_bad_values \u003d [65536, 0, -1, \u0027str\u0027]"},{"line_number":122,"context_line":"        self.to_primitive_values \u003d self.coerce_good_values"},{"line_number":123,"context_line":"        self.from_primitive_values \u003d self.coerce_good_values"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a061dce_b51f8908","line":121,"range":{"start_line":121,"start_character":52,"end_line":121,"end_character":54},"updated":"2016-04-08 14:15:10.000000000","message":", (None, 22)]","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"9174471e928745d44e28c7259ebadf1dfca452d7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        super(PortRangeFieldTest, self).setUp()"},{"line_number":119,"context_line":"        self.field \u003d common_types.PortRangeField()"},{"line_number":120,"context_line":"        self.coerce_good_values \u003d [(val, val) for val in (22, 80, 65535, 1)]"},{"line_number":121,"context_line":"        self.coerce_bad_values \u003d [65536, 0, -1, \u0027str\u0027]"},{"line_number":122,"context_line":"        self.to_primitive_values \u003d self.coerce_good_values"},{"line_number":123,"context_line":"        self.from_primitive_values \u003d self.coerce_good_values"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a1b2928_79020d40","line":121,"range":{"start_line":121,"start_character":52,"end_line":121,"end_character":54},"in_reply_to":"9a061dce_b51f8908","updated":"2016-04-11 11:48:36.000000000","message":"Done","commit_id":"dbd148d3e77a55457c99c532e658a31823f85b6e"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"3bda5217f9d827c9bf365501ca3a4da33270de1f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        super(PortRangeFieldTest, self).setUp()"},{"line_number":119,"context_line":"        self.field \u003d common_types.PortRangeField()"},{"line_number":120,"context_line":"        self.coerce_good_values \u003d [(val, val) for val in (22, 80, 65535, 1)]"},{"line_number":121,"context_line":"        self.coerce_bad_values \u003d [65536, 0, -1, \u0027str\u0027, (None, 22)]"},{"line_number":122,"context_line":"        self.to_primitive_values \u003d self.coerce_good_values"},{"line_number":123,"context_line":"        self.from_primitive_values \u003d self.coerce_good_values"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_1272dde5","line":121,"range":{"start_line":121,"start_character":54,"end_line":121,"end_character":65},"updated":"2016-04-12 07:28:34.000000000","message":"This should not be a tuple, but a list - unless I\u0027m missing smth...","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"87a0febb71c35ec95ce324495da42914f39f65f3","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        super(PortRangeFieldTest, self).setUp()"},{"line_number":119,"context_line":"        self.field \u003d common_types.PortRangeField()"},{"line_number":120,"context_line":"        self.coerce_good_values \u003d [(val, val) for val in (22, 80, 65535, 1)]"},{"line_number":121,"context_line":"        self.coerce_bad_values \u003d [65536, 0, -1, \u0027str\u0027, (None, 22)]"},{"line_number":122,"context_line":"        self.to_primitive_values \u003d self.coerce_good_values"},{"line_number":123,"context_line":"        self.from_primitive_values \u003d self.coerce_good_values"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_531eed63","line":121,"range":{"start_line":121,"start_character":54,"end_line":121,"end_character":65},"in_reply_to":"5a18252c_1272dde5","updated":"2016-04-13 11:19:41.000000000","message":"Done","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"}],"neutron/tests/unit/objects/test_objects.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863f5187084d0c072f8651323cb07b7a95aff2d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    \u0027QosBandwidthLimitRule\u0027: \u00271.0-4e44a8f5c2895ab1278399f87b40a13d\u0027,"},{"line_number":28,"context_line":"    \u0027QosRuleType\u0027: \u00271.0-d0df298d49eeffab91af18d1a4cf7eaf\u0027,"},{"line_number":29,"context_line":"    \u0027QosPolicy\u0027: \u00271.0-721fa60ea8f0e8f15d456d6e917dfe59\u0027,"},{"line_number":30,"context_line":"    \u0027DefaultSecurityGroup\u0027: \u00271.0-19e7d4d88aa36ced0a3f715edb350c67\u0027,"},{"line_number":31,"context_line":"    \u0027SecurityGroup\u0027: \u00271.0-ee6fb683153f2b2363f01594f0b37fa4\u0027,"},{"line_number":32,"context_line":"    \u0027SecurityGroupPortBinding\u0027: \u00271.0-6879d5c0af80396ef5a72934b6a6ef20\u0027,"},{"line_number":33,"context_line":"    \u0027SecurityGroupRule\u0027: \u00271.0-40b324e524fe127fed936f28a18f0621\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_ac41f83b","line":30,"updated":"2016-03-15 17:40:47.000000000","message":"let\u0027s keep the list ordered by name.","commit_id":"8f693f65e23197f32a65e1f5540ba82a93bd5174"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"3bda5217f9d827c9bf365501ca3a4da33270de1f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \u0027QosPolicy\u0027: \u00271.1-721fa60ea8f0e8f15d456d6e917dfe59\u0027,"},{"line_number":35,"context_line":"    \u0027SubnetPool\u0027: \u00271.0-320598830183ee739cbc9f32ebc26bba\u0027,"},{"line_number":36,"context_line":"    \u0027SubnetPoolPrefix\u0027: \u00271.0-13c15144135eb869faa4a76dc3ee3b6c\u0027,"},{"line_number":37,"context_line":"    \u0027SecurityGroup\u0027: \u00271.0-44e5fcd29176ae99d421bc483905b02a\u0027,"},{"line_number":38,"context_line":"    \u0027SecurityGroupRule\u0027: \u00271.0-db422d4a05588b1bbc61e743055bb40d\u0027"},{"line_number":39,"context_line":"}"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_722511c1","line":37,"range":{"start_line":37,"start_character":26,"end_line":37,"end_character":58},"updated":"2016-04-12 07:28:34.000000000","message":"You need to update this hash since UT is falling:\nhttp://logs.openstack.org/38/284738/23/check/gate-neutron-python27/caf3565/console.html#_2016-04-11_16_18_36_247","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"87a0febb71c35ec95ce324495da42914f39f65f3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \u0027QosPolicy\u0027: \u00271.1-721fa60ea8f0e8f15d456d6e917dfe59\u0027,"},{"line_number":35,"context_line":"    \u0027SubnetPool\u0027: \u00271.0-320598830183ee739cbc9f32ebc26bba\u0027,"},{"line_number":36,"context_line":"    \u0027SubnetPoolPrefix\u0027: \u00271.0-13c15144135eb869faa4a76dc3ee3b6c\u0027,"},{"line_number":37,"context_line":"    \u0027SecurityGroup\u0027: \u00271.0-44e5fcd29176ae99d421bc483905b02a\u0027,"},{"line_number":38,"context_line":"    \u0027SecurityGroupRule\u0027: \u00271.0-db422d4a05588b1bbc61e743055bb40d\u0027"},{"line_number":39,"context_line":"}"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a18252c_0bac239f","line":37,"range":{"start_line":37,"start_character":26,"end_line":37,"end_character":58},"in_reply_to":"5a18252c_722511c1","updated":"2016-04-13 11:19:41.000000000","message":"Done","commit_id":"a6edb35878e71f01ae9353194a08c58e3fdb51ab"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"632b847bb719672580c4bc54ae197835bfbd965b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    \u0027SubnetPoolPrefix\u0027: \u00271.0-13c15144135eb869faa4a76dc3ee3b6c\u0027,"},{"line_number":43,"context_line":"    \u0027SubPort\u0027: \u00271.0-72c8471068db1f0491b5480fe49b52bb\u0027,"},{"line_number":44,"context_line":"    \u0027Trunk\u0027: \u00271.0-0b5b5c82824c2fc367405fe4140d8b8c\u0027,"},{"line_number":45,"context_line":"    \u0027Trunk\u0027: \u00271.0-758286a52466d7a52b74331f43b07a84\u0027,"},{"line_number":46,"context_line":"    \u0027SecurityGroup\u0027: \u00271.0-baac84dadbe31ca93f25c7e98779dde6\u0027,"},{"line_number":47,"context_line":"    \u0027DefaultSecurityGroup\u0027: \u00271.0-19e7d4d88aa36ced0a3f715edb350c67\u0027,"},{"line_number":48,"context_line":"    \u0027SecurityGroupRule\u0027: \u00271.0-a58e6f6c6aeb3d39cd89cf4ecaf12f35\u0027"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_a28aa618","line":45,"range":{"start_line":45,"start_character":4,"end_line":45,"end_character":11},"updated":"2016-06-15 08:35:25.000000000","message":"something is wrong here","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"},{"author":{"_account_id":9178,"name":"Sayali Lunkad","email":"sayali.lunkad@suse.com","username":"sayalilunkad"},"change_message_id":"36dc5620667ee4af743bf591e091476af65cc5fc","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    \u0027SubnetPoolPrefix\u0027: \u00271.0-13c15144135eb869faa4a76dc3ee3b6c\u0027,"},{"line_number":43,"context_line":"    \u0027SubPort\u0027: \u00271.0-72c8471068db1f0491b5480fe49b52bb\u0027,"},{"line_number":44,"context_line":"    \u0027Trunk\u0027: \u00271.0-0b5b5c82824c2fc367405fe4140d8b8c\u0027,"},{"line_number":45,"context_line":"    \u0027Trunk\u0027: \u00271.0-758286a52466d7a52b74331f43b07a84\u0027,"},{"line_number":46,"context_line":"    \u0027SecurityGroup\u0027: \u00271.0-baac84dadbe31ca93f25c7e98779dde6\u0027,"},{"line_number":47,"context_line":"    \u0027DefaultSecurityGroup\u0027: \u00271.0-19e7d4d88aa36ced0a3f715edb350c67\u0027,"},{"line_number":48,"context_line":"    \u0027SecurityGroupRule\u0027: \u00271.0-a58e6f6c6aeb3d39cd89cf4ecaf12f35\u0027"}],"source_content_type":"text/x-python","patch_set":32,"id":"7aa08908_43ae6430","line":45,"range":{"start_line":45,"start_character":4,"end_line":45,"end_character":11},"in_reply_to":"7aa08908_a28aa618","updated":"2016-06-17 11:52:26.000000000","message":"Removed.","commit_id":"9f15fc457258daeae5bac6dc17e2dfbbc664586c"}],"neutron/tests/unit/objects/test_securitygroup.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"76a52adea77877202557508f0c16e23a6c5c25b8","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.assertEqual(sg_obj, listed_obj)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":84,"context_line":"        # TODO(electrocucaracha) SecurityGroup is using SecurityGroupRule"},{"line_number":85,"context_line":"        # object to reload rules, which costs extra SQL query each time"},{"line_number":86,"context_line":"        # _load_is_default are called in get_object(s). SecurityGroup has"},{"line_number":87,"context_line":"        # defined relationship for SecurityGroupRules, so it should be possible"},{"line_number":88,"context_line":"        # to reuse side loaded values fo this. To be reworked in follow-up"},{"line_number":89,"context_line":"        # patch."},{"line_number":90,"context_line":"        pass"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":51,"id":"9ad45d7e_bd9897c1","line":89,"range":{"start_line":84,"start_character":8,"end_line":89,"end_character":15},"updated":"2016-08-10 10:12:49.000000000","message":"For me, it should be loaded from defined relationship, if it is not, it should be fixed in this patch.","commit_id":"a2430f559c4139f789484b09df387b2d74461fa0"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5ef44b9f1d59e044383fdbe56f65dc0c49cb8cbd","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.assertEqual(sg_obj, listed_obj)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def test_get_objects_queries_constant(self):"},{"line_number":84,"context_line":"        # TODO(electrocucaracha) SecurityGroup is using SecurityGroupRule"},{"line_number":85,"context_line":"        # object to reload rules, which costs extra SQL query each time"},{"line_number":86,"context_line":"        # _load_is_default are called in get_object(s). SecurityGroup has"},{"line_number":87,"context_line":"        # defined relationship for SecurityGroupRules, so it should be possible"},{"line_number":88,"context_line":"        # to reuse side loaded values fo this. To be reworked in follow-up"},{"line_number":89,"context_line":"        # patch."},{"line_number":90,"context_line":"        pass"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":51,"id":"9ad45d7e_9302a408","line":89,"range":{"start_line":84,"start_character":8,"end_line":89,"end_character":15},"in_reply_to":"9ad45d7e_bd9897c1","updated":"2016-08-11 11:20:23.000000000","message":"Yes.","commit_id":"a2430f559c4139f789484b09df387b2d74461fa0"}]}
