)]}'
{"neutron_fwaas/objects/address_group.py":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    db_model \u003d db.AddressCidr"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027cidr\u0027: obj_fields.StringField,"},{"line_number":38,"context_line":"        \u0027address_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":39,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_55e719e4","line":36,"updated":"2016-07-28 00:01:24.000000000","message":"Following attributes are missing:\n\n* \u0027id\u0027\n* \u0027ip_version\u0027","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    db_model \u003d db.AddressCidr"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027cidr\u0027: obj_fields.StringField,"},{"line_number":38,"context_line":"        \u0027address_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":39,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_06ba9823","line":36,"in_reply_to":"bacf61ea_55e719e4","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    db_model \u003d db.AddressCidr"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027cidr\u0027: obj_fields.StringField,"},{"line_number":38,"context_line":"        \u0027address_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_b5c13531","line":37,"range":{"start_line":37,"start_character":27,"end_line":37,"end_character":38},"updated":"2016-07-28 00:01:24.000000000","message":"StringField()","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    db_model \u003d db.AddressCidr"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027cidr\u0027: obj_fields.StringField,"},{"line_number":38,"context_line":"        \u0027address_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_867cc873","line":37,"range":{"start_line":37,"start_character":27,"end_line":37,"end_character":38},"in_reply_to":"bacf61ea_b5c13531","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    fields \u003d {"},{"line_number":52,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":53,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":54,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":55,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":56,"context_line":"        \u0027cidrs\u0027: obj_fields.ListOfObjectsField("}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_95d191fe","line":53,"range":{"start_line":53,"start_character":9,"end_line":53,"end_character":18},"updated":"2016-07-28 00:01:24.000000000","message":"s/tenant_id/project_id","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    fields \u003d {"},{"line_number":52,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":53,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":54,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":55,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":56,"context_line":"        \u0027cidrs\u0027: obj_fields.ListOfObjectsField("}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_0691f899","line":53,"range":{"start_line":53,"start_character":9,"end_line":53,"end_character":18},"in_reply_to":"bacf61ea_95d191fe","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027AddressCidr\u0027, subclasses\u003dFalse),"},{"line_number":58,"context_line":"    }"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    synthetic_fields \u003d [\u0027cidrs\u0027]"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_b5d8151f","line":60,"range":{"start_line":60,"start_character":31,"end_line":60,"end_character":40},"updated":"2016-07-28 00:01:24.000000000","message":"s/tenant_id/project_id","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027AddressCidr\u0027, subclasses\u003dFalse),"},{"line_number":58,"context_line":"    }"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    synthetic_fields \u003d [\u0027cidrs\u0027]"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_46e9301a","line":60,"range":{"start_line":60,"start_character":31,"end_line":60,"end_character":40},"in_reply_to":"bacf61ea_b5d8151f","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def get_cidrs(context, address_group_id):"},{"line_number":24,"context_line":"    with db_api.autonested_transaction(context.session):"},{"line_number":25,"context_line":"        return AddressCidr.get_objects(context,"},{"line_number":26,"context_line":"                                       address_group_id\u003daddress_group_id)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_03b9ea2e","line":25,"updated":"2016-08-12 17:08:36.000000000","message":"It won\u0027t scale well: on every object fetched, you will need another SELECT executed, which will kill server on LIST operations. I know that\u0027s how it\u0027s done for qos, but we are moving away from it. You should try to adopt existing objects tests as can be found under neutron/tests/unit/objects/test_base.py in neutron repo, they would actually catch the issue.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":38,"context_line":"        \u0027cidr\u0027: obj_fields.StringField(),"},{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027address_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":41,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_23ed0e26","line":38,"updated":"2016-08-12 17:08:36.000000000","message":"in neutron, we have IPNetworkField to handle that.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":38,"context_line":"        \u0027cidr\u0027: obj_fields.StringField(),"},{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027address_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":41,"context_line":"    }"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_6380a647","line":39,"updated":"2016-08-12 17:08:36.000000000","message":"In neutron/objects/common_types.py, we have IPVersionEnum","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \u0027address_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":41,"context_line":"    }"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    fields_no_update \u003d [\u0027cidr\u0027, \u0027address_group_id\u0027]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_c34a3227","line":43,"updated":"2016-08-12 17:08:36.000000000","message":"you need to add foreign_keys here to map between address_group_id here and id in AddressGroup object. That will allow you to get rid of separate fetch in line 23+.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    fields \u003d {"},{"line_number":54,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":55,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":56,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":57,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":58,"context_line":"        \u0027cidrs\u0027: obj_fields.ListOfObjectsField("}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_c3dcf276","line":55,"updated":"2016-08-12 17:08:36.000000000","message":"must be string, since neutron allows deployments without keystone.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":55,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":56,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":57,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":58,"context_line":"        \u0027cidrs\u0027: obj_fields.ListOfObjectsField("},{"line_number":59,"context_line":"            \u0027AddressCidr\u0027, subclasses\u003dFalse),"},{"line_number":60,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_a3d9fe85","line":57,"updated":"2016-08-12 17:08:36.000000000","message":"are any of those nullable? if so, add nullable\u003dTrue","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def to_dict(self):"},{"line_number":67,"context_line":"        dict_ \u003d super(AddressGroup, self).to_dict()"},{"line_number":68,"context_line":"        if \u0027cidrs\u0027 in dict_:"},{"line_number":69,"context_line":"            dict_[\u0027cidrs\u0027] \u003d [cidr.to_dict() for cidr in dict_[\u0027cidrs\u0027]]"},{"line_number":70,"context_line":"        return dict_"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_23622eae","line":68,"updated":"2016-08-12 17:08:36.000000000","message":"hm. won\u0027t base class do it for you?","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                reason\u003d(\u0027unable to load %s\u0027) % attrname)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        if not hasattr(self, attrname):"},{"line_number":79,"context_line":"            self.reload_cidrs()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def reload_cidrs(self):"},{"line_number":82,"context_line":"        cidrs \u003d get_cidrs(self._context, self.id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_a3f57ecc","line":79,"updated":"2016-08-12 17:08:36.000000000","message":"we should actually avoid lazy load for new objects, due to scaling issues.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"}],"neutron_fwaas/objects/firewall_group.py":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","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":"        \u0027tenant_id\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":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_ba2c84ac","line":32,"range":{"start_line":32,"start_character":9,"end_line":32,"end_character":18},"updated":"2016-07-28 00:01:24.000000000","message":"s/\u0027tenant_id\u0027/\u0027project_id\u0027","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","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":"        \u0027tenant_id\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":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_a6c10c83","line":32,"range":{"start_line":32,"start_character":9,"end_line":32,"end_character":18},"in_reply_to":"bacf61ea_ba2c84ac","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"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":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027shared\u0027: obj_fields.BooleanField(),"},{"line_number":37,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":38,"context_line":"        \u0027ip_version\u0027: obj_fields.Integer(),"},{"line_number":39,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_3a409456","line":36,"range":{"start_line":36,"start_character":9,"end_line":36,"end_character":15},"updated":"2016-07-28 00:01:24.000000000","message":"s/\u0027shared\u0027/\u0027public\u0027","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"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":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027shared\u0027: obj_fields.BooleanField(),"},{"line_number":37,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":38,"context_line":"        \u0027ip_version\u0027: obj_fields.Integer(),"},{"line_number":39,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_e652e4dc","line":36,"range":{"start_line":36,"start_character":9,"end_line":36,"end_character":15},"in_reply_to":"bacf61ea_3a409456","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027shared\u0027: obj_fields.BooleanField(),"},{"line_number":37,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":38,"context_line":"        \u0027ip_version\u0027: obj_fields.Integer(),"},{"line_number":39,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":40,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027source_port_range_min\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_f503ad0b","line":38,"range":{"start_line":38,"start_character":33,"end_line":38,"end_character":40},"updated":"2016-07-28 00:01:24.000000000","message":"s/Integer/IntegerField","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027shared\u0027: obj_fields.BooleanField(),"},{"line_number":37,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":38,"context_line":"        \u0027ip_version\u0027: obj_fields.Integer(),"},{"line_number":39,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":40,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027source_port_range_min\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_0621f8fb","line":38,"range":{"start_line":38,"start_character":33,"end_line":38,"end_character":40},"in_reply_to":"bacf61ea_f503ad0b","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \u0027source_port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":43,"context_line":"        \u0027destination_port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":44,"context_line":"        \u0027destination_port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":45,"context_line":"        \u0027action\u0027: obj_fields.EnumField(\u0027allow\u0027, \u0027deny\u0027, \u0027reject\u0027),"},{"line_number":46,"context_line":"        \u0027enabled\u0027: obj_fields.BooleanField,"},{"line_number":47,"context_line":"        \u0027position\u0027: obj_fields.IntegerField,"},{"line_number":48,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_7a096c31","line":45,"updated":"2016-07-28 00:01:24.000000000","message":"EnumField in oslo_versionedobject has an argument named \u0027valid_values\u0027.  Therefore, you should specify as follows:\n\nex.\n\nvalid_actions \u003d [\u0027allow\u0027, \u0027deny\u0027, \u0027reject\u0027]\n(snip)\n\u0027action\u0027: obj_fields.EnumField(valid_values\u003dvalid_actions),","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \u0027source_port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":43,"context_line":"        \u0027destination_port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":44,"context_line":"        \u0027destination_port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":45,"context_line":"        \u0027action\u0027: obj_fields.EnumField(\u0027allow\u0027, \u0027deny\u0027, \u0027reject\u0027),"},{"line_number":46,"context_line":"        \u0027enabled\u0027: obj_fields.BooleanField,"},{"line_number":47,"context_line":"        \u0027position\u0027: obj_fields.IntegerField,"},{"line_number":48,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_c9f9b1ca","line":45,"in_reply_to":"bacf61ea_7a096c31","updated":"2016-08-08 22:47:30.000000000","message":"Thanks. good catch.","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027action\u0027: obj_fields.EnumField(\u0027allow\u0027, \u0027deny\u0027, \u0027reject\u0027),"},{"line_number":46,"context_line":"        \u0027enabled\u0027: obj_fields.BooleanField,"},{"line_number":47,"context_line":"        \u0027position\u0027: obj_fields.IntegerField,"},{"line_number":48,"context_line":"    }"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027, \u0027firewall_policy_id\u0027]"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_556ef9c9","line":48,"updated":"2016-07-28 00:01:24.000000000","message":"Following attributes are missing:\n\n* source_firewall_group_id\n* destination_firewall_group_id\n\nBoth attributes are \u0027obje_fields.IntegerField()\u0027","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"93e92a7526afd7e8b1eb63a397223a37a3e94f82","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027action\u0027: obj_fields.EnumField(\u0027allow\u0027, \u0027deny\u0027, \u0027reject\u0027),"},{"line_number":46,"context_line":"        \u0027enabled\u0027: obj_fields.BooleanField,"},{"line_number":47,"context_line":"        \u0027position\u0027: obj_fields.IntegerField,"},{"line_number":48,"context_line":"    }"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027, \u0027firewall_policy_id\u0027]"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7ac969e8_dc5d0aee","line":48,"in_reply_to":"9ad45d7e_69b085f5","updated":"2016-08-13 06:00:16.000000000","message":"They should be obj_fields.UUIDField().  On the other hand, project_id is not UUID format, therefore, project_id should be obj_fields.StringField().  Please refer Ihar\u0027s comment :)","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027action\u0027: obj_fields.EnumField(\u0027allow\u0027, \u0027deny\u0027, \u0027reject\u0027),"},{"line_number":46,"context_line":"        \u0027enabled\u0027: obj_fields.BooleanField,"},{"line_number":47,"context_line":"        \u0027position\u0027: obj_fields.IntegerField,"},{"line_number":48,"context_line":"    }"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027, \u0027firewall_policy_id\u0027]"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_69b085f5","line":48,"in_reply_to":"bacf61ea_556ef9c9","updated":"2016-08-08 22:47:30.000000000","message":"Yes, i noticed they are also missing from DB patch. Let me confirm that and update this. Also, the source_address_group and destination_address_group_id should be added. Shouldn\u0027t they be obj_fields.UUIDField() instead of IntegerField()?","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    # Version 1.0: Initial version"},{"line_number":62,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    db_model \u003d db.FirewallRule"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    fields \u003d {"},{"line_number":67,"context_line":"        \u0027port\u0027: obj_fields.StringField,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_f59f2db2","line":64,"range":{"start_line":64,"start_character":18,"end_line":64,"end_character":30},"updated":"2016-07-28 00:01:24.000000000","message":"FirewallGroupport","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    # Version 1.0: Initial version"},{"line_number":62,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    db_model \u003d db.FirewallRule"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    fields \u003d {"},{"line_number":67,"context_line":"        \u0027port\u0027: obj_fields.StringField,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_c93ff123","line":64,"range":{"start_line":64,"start_character":18,"end_line":64,"end_character":30},"in_reply_to":"bacf61ea_f59f2db2","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    # Version 1.0: Initial version"},{"line_number":77,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    db_model \u003d db.FirewallRule"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    fields \u003d {"},{"line_number":82,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_35aa65d5","line":79,"range":{"start_line":79,"start_character":18,"end_line":79,"end_character":30},"updated":"2016-07-28 00:01:24.000000000","message":"FirewallPolicy","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    # Version 1.0: Initial version"},{"line_number":77,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    db_model \u003d db.FirewallRule"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    fields \u003d {"},{"line_number":82,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_c95ed144","line":79,"range":{"start_line":79,"start_character":18,"end_line":79,"end_character":30},"in_reply_to":"bacf61ea_35aa65d5","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    fields \u003d {"},{"line_number":82,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":83,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":84,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":85,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":86,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_75acdded","line":83,"range":{"start_line":83,"start_character":9,"end_line":83,"end_character":18},"updated":"2016-07-28 00:01:24.000000000","message":"s/tenant_id/project_id","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    fields \u003d {"},{"line_number":82,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":83,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":84,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":85,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":86,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_e955951d","line":83,"range":{"start_line":83,"start_character":9,"end_line":83,"end_character":18},"in_reply_to":"bacf61ea_75acdded","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":84,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":85,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":86,"context_line":"    }"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_75933da4","line":86,"updated":"2016-07-28 00:01:24.000000000","message":"Following attribute is missing:\n\n* public: obj_fields.BooleanField()","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":84,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":85,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":86,"context_line":"    }"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_4c266fbb","line":86,"in_reply_to":"bacf61ea_75933da4","updated":"2016-08-08 22:47:30.000000000","message":"Yes and also firewall_rules, audited fields are missing from the DB patch also. Let me find out the plan there and update this accordingly.","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":86,"context_line":"    }"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_f5ed6d26","line":88,"range":{"start_line":88,"start_character":31,"end_line":88,"end_character":40},"updated":"2016-07-28 00:01:24.000000000","message":"s/tenant_id/project_id","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":86,"context_line":"    }"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_893b39eb","line":88,"range":{"start_line":88,"start_character":31,"end_line":88,"end_character":40},"in_reply_to":"bacf61ea_f5ed6d26","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":92,"context_line":"class FirewallGroup(base.NeutronDbObject):"},{"line_number":93,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_55b439f1","line":90,"updated":"2016-07-28 00:01:24.000000000","message":"Following definition is missing:\n\n* FirewallPolicyRule(base.NeutronDbObject):","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":92,"context_line":"class FirewallGroup(base.NeutronDbObject):"},{"line_number":93,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_2237bfb1","line":90,"in_reply_to":"bacf61ea_55b439f1","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    # Version 1.0: Initial version"},{"line_number":94,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    db_model \u003d db.FirewallRule"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    fields \u003d {"},{"line_number":99,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_5599d96d","line":96,"range":{"start_line":96,"start_character":18,"end_line":96,"end_character":29},"updated":"2016-07-28 00:01:24.000000000","message":"s/FirewallRule/FirewallGroup","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    # Version 1.0: Initial version"},{"line_number":94,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    db_model \u003d db.FirewallRule"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    fields \u003d {"},{"line_number":99,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_8c6ea7c7","line":96,"range":{"start_line":96,"start_character":18,"end_line":96,"end_character":29},"in_reply_to":"bacf61ea_5599d96d","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    fields \u003d {"},{"line_number":99,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":100,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":101,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":102,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":103,"context_line":"        \u0027ports\u0027: obj_fields.ListOfObjectsField("}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_75a05d91","line":100,"range":{"start_line":100,"start_character":9,"end_line":100,"end_character":18},"updated":"2016-07-28 00:01:24.000000000","message":"s/tenant_id/project_id","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    fields \u003d {"},{"line_number":99,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":100,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(),"},{"line_number":101,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":102,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":103,"context_line":"        \u0027ports\u0027: obj_fields.ListOfObjectsField("}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_6c7373b2","line":100,"range":{"start_line":100,"start_character":9,"end_line":100,"end_character":18},"in_reply_to":"bacf61ea_75a05d91","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"49e6f3b7676e41d6b7911e7974bf67b1657515db","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        \u0027egress_firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":107,"context_line":"    }"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027,"},{"line_number":110,"context_line":"                        \u0027ingress_firewall_policy_id\u0027,"},{"line_number":111,"context_line":"                        \u0027egress_firewall_policy_id\u0027]"},{"line_number":112,"context_line":"    synthetic_fields \u003d [\u0027ports\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_15b641dc","line":109,"range":{"start_line":109,"start_character":31,"end_line":109,"end_character":40},"updated":"2016-07-28 00:01:24.000000000","message":"s/tenant_id/project_id","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":11241,"name":"Padmanabhan Krish","email":"kprad1@yahoo.com","username":"padkrish"},"change_message_id":"acbc2b8e5f8f0c560f4bbbbca4748f7e898ffa96","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        \u0027egress_firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":107,"context_line":"    }"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027tenant_id\u0027,"},{"line_number":110,"context_line":"                        \u0027ingress_firewall_policy_id\u0027,"},{"line_number":111,"context_line":"                        \u0027egress_firewall_policy_id\u0027]"},{"line_number":112,"context_line":"    synthetic_fields \u003d [\u0027ports\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_0c63d7dd","line":109,"range":{"start_line":109,"start_character":31,"end_line":109,"end_character":40},"in_reply_to":"bacf61ea_15b641dc","updated":"2016-08-08 22:47:30.000000000","message":"Done","commit_id":"02c1bdc9f7b1527c2e0198785d89df43f35c9844"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    fields \u003d {"},{"line_number":32,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":33,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":34,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":36,"context_line":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_e31656f0","line":33,"updated":"2016-08-12 17:08:36.000000000","message":"string","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    fields \u003d {"},{"line_number":32,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":33,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":34,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":36,"context_line":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_ae531416","line":33,"in_reply_to":"9ad45d7e_e31656f0","updated":"2016-08-17 18:12:23.000000000","message":"Done.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":33,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":34,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":36,"context_line":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":37,"context_line":"        \u0027public\u0027: obj_fields.BooleanField(),"},{"line_number":38,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_43d2c235","line":35,"updated":"2016-08-12 17:08:36.000000000","message":"anything nullable?","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":33,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":34,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":36,"context_line":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":37,"context_line":"        \u0027public\u0027: obj_fields.BooleanField(),"},{"line_number":38,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_6ae625b1","line":35,"in_reply_to":"9ad45d7e_43d2c235","updated":"2016-08-17 18:12:23.000000000","message":"I\u0027m not sure.  It looks like sa.Column has a default nullability of True where obj_fields has a default nullability of False.  I\u0027ve posed your question, reversed, on https://review.openstack.org/#/c/311159/41/neutron_fwaas/db/firewall/v2/firewall_db_v2.py and will update this module accordingly.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":36,"context_line":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":37,"context_line":"        \u0027public\u0027: obj_fields.BooleanField(),"},{"line_number":38,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_c31fd207","line":38,"updated":"2016-08-12 17:08:36.000000000","message":"we have IpProtocolEnumField in neutron","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":36,"context_line":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":37,"context_line":"        \u0027public\u0027: obj_fields.BooleanField(),"},{"line_number":38,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_44223f53","line":38,"in_reply_to":"9ad45d7e_c31fd207","updated":"2016-08-17 18:12:23.000000000","message":"Done.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":37,"context_line":"        \u0027public\u0027: obj_fields.BooleanField(),"},{"line_number":38,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"},{"line_number":42,"context_line":"        \u0027source_port_range_min\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_03f1eacd","line":39,"updated":"2016-08-12 17:08:36.000000000","message":"IPVersionEnumField","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \u0027firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":37,"context_line":"        \u0027public\u0027: obj_fields.BooleanField(),"},{"line_number":38,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"},{"line_number":42,"context_line":"        \u0027source_port_range_min\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_244aa326","line":39,"in_reply_to":"9ad45d7e_03f1eacd","updated":"2016-08-17 18:12:23.000000000","message":"Done.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \u0027public\u0027: obj_fields.BooleanField(),"},{"line_number":38,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"},{"line_number":42,"context_line":"        \u0027source_port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":43,"context_line":"        \u0027source_port_range_max\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_c394f245","line":40,"updated":"2016-08-12 17:08:36.000000000","message":"obj_fields.IPAddressField","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \u0027public\u0027: obj_fields.BooleanField(),"},{"line_number":38,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"},{"line_number":42,"context_line":"        \u0027source_port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":43,"context_line":"        \u0027source_port_range_max\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_048047f6","line":40,"in_reply_to":"9ad45d7e_c394f245","updated":"2016-08-17 18:12:23.000000000","message":"Done.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"},{"line_number":42,"context_line":"        \u0027source_port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":43,"context_line":"        \u0027source_port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":44,"context_line":"        \u0027destination_port_range_min\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_c37b5228","line":41,"updated":"2016-08-12 17:08:36.000000000","message":"ditto","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u0027protocol\u0027: obj_fields.StringField(),"},{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"},{"line_number":42,"context_line":"        \u0027source_port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":43,"context_line":"        \u0027source_port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":44,"context_line":"        \u0027destination_port_range_min\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_247bc329","line":41,"in_reply_to":"9ad45d7e_c37b5228","updated":"2016-08-17 18:12:23.000000000","message":"Done.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"},{"line_number":42,"context_line":"        \u0027source_port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":43,"context_line":"        \u0027source_port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":44,"context_line":"        \u0027destination_port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":45,"context_line":"        \u0027destination_port_range_max\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_a369fe27","line":42,"updated":"2016-08-12 17:08:36.000000000","message":"we are introducing a type for port numbers in neutron right now (not in tree yet).","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        \u0027ip_version\u0027: obj_fields.IntegerField(),"},{"line_number":40,"context_line":"        \u0027source_ip_address\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027destination_ip_address\u0027: obj_fields.StringField(),"},{"line_number":42,"context_line":"        \u0027source_port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":43,"context_line":"        \u0027source_port_range_max\u0027: obj_fields.IntegerField(),"},{"line_number":44,"context_line":"        \u0027destination_port_range_min\u0027: obj_fields.IntegerField(),"},{"line_number":45,"context_line":"        \u0027destination_port_range_max\u0027: obj_fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_24258308","line":42,"in_reply_to":"9ad45d7e_a369fe27","updated":"2016-08-17 18:12:23.000000000","message":"Is this it?  This was merged very recently:\n\nhttps://github.com/openstack/neutron/blame/master/neutron/objects/common_types.py#L67","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_ports(context, firewall_group_id):"},{"line_number":58,"context_line":"    with db_api.autonested_transaction(context.session):"},{"line_number":59,"context_line":"        return FirewallGroupPort.get_objects("},{"line_number":60,"context_line":"            context, firewall_group_id\u003dfirewall_group_id)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_83e67ae6","line":58,"updated":"2016-08-12 17:08:36.000000000","message":"no need for that nested transaction, get_objects already opens one.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_ports(context, firewall_group_id):"},{"line_number":58,"context_line":"    with db_api.autonested_transaction(context.session):"},{"line_number":59,"context_line":"        return FirewallGroupPort.get_objects("},{"line_number":60,"context_line":"            context, firewall_group_id\u003dfirewall_group_id)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_446fdf2a","line":58,"in_reply_to":"9ad45d7e_83e67ae6","updated":"2016-08-17 18:12:23.000000000","message":"Removed.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    db_model \u003d db.FirewallGroupPort"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    fields \u003d {"},{"line_number":71,"context_line":"        \u0027port\u0027: obj_fields.StringField(),"},{"line_number":72,"context_line":"        \u0027firewall_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":73,"context_line":"    }"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_83fdda70","line":71,"updated":"2016-08-12 17:08:36.000000000","message":"what\u0027s that field for? is it really a free form string?","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    db_model \u003d db.FirewallGroupPort"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    fields \u003d {"},{"line_number":71,"context_line":"        \u0027port\u0027: obj_fields.StringField(),"},{"line_number":72,"context_line":"        \u0027firewall_group_id\u0027: obj_fields.UUIDField(),"},{"line_number":73,"context_line":"    }"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_4a2369a7","line":71,"in_reply_to":"9ad45d7e_83fdda70","updated":"2016-08-17 18:12:23.000000000","message":"I believe this should be port_id, and a UUID field.  Fixed, and also posed this same question on https://review.openstack.org/#/c/311159/41/neutron_fwaas/db/firewall/v2/firewall_db_v2.py","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    fields \u003d {"},{"line_number":86,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":87,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":88,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":89,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":90,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_c3f7d28a","line":87,"updated":"2016-08-12 17:08:36.000000000","message":"string","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    fields \u003d {"},{"line_number":86,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":87,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":88,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":89,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":90,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_6a9d8509","line":87,"in_reply_to":"9ad45d7e_c3f7d28a","updated":"2016-08-17 18:12:23.000000000","message":"Done.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":87,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":88,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":89,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027project_id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_a3f45e87","line":89,"updated":"2016-08-12 17:08:36.000000000","message":"nullable?","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":87,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":88,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":89,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027project_id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_643f7487","line":89,"in_reply_to":"9ad45d7e_a3f45e87","updated":"2016-08-17 18:12:23.000000000","message":"See my comment at @35.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027project_id\u0027]"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_6310a6a9","line":92,"updated":"2016-08-12 17:08:36.000000000","message":"you should add foreign_keys here to allow loading ports without a separate SELECT.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    fields_no_update \u003d [\u0027id\u0027, \u0027project_id\u0027]"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_5e0de7e6","line":92,"in_reply_to":"9ad45d7e_6310a6a9","updated":"2016-08-17 18:12:23.000000000","message":"A port can have multiple security groups associated with it, so unfortunately we can\u0027t have ingress_policy_id and egress_policy_id foreign keys from port to firewall_policy.\n\nPlease let me know if I\u0027ve mis-interpreted your suggestion here.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    fields \u003d {"},{"line_number":103,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":104,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":105,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":106,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":107,"context_line":"        \u0027ports\u0027: obj_fields.ListOfObjectsField("}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_232fcef7","line":104,"updated":"2016-08-12 17:08:36.000000000","message":"string","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    fields \u003d {"},{"line_number":103,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":104,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":105,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":106,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":107,"context_line":"        \u0027ports\u0027: obj_fields.ListOfObjectsField("}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_d0ec26f5","line":104,"in_reply_to":"9ad45d7e_232fcef7","updated":"2016-08-17 18:12:23.000000000","message":"Done.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":104,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":105,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":106,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":107,"context_line":"        \u0027ports\u0027: obj_fields.ListOfObjectsField("},{"line_number":108,"context_line":"            \u0027FirewallGroupPort\u0027, subclasses\u003dFalse),"},{"line_number":109,"context_line":"        \u0027ingress_firewall_policy_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_8334ba4a","line":106,"updated":"2016-08-12 17:08:36.000000000","message":"nullable?","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":104,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(),"},{"line_number":105,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":106,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":107,"context_line":"        \u0027ports\u0027: obj_fields.ListOfObjectsField("},{"line_number":108,"context_line":"            \u0027FirewallGroupPort\u0027, subclasses\u003dFalse),"},{"line_number":109,"context_line":"        \u0027ingress_firewall_policy_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_c4b90817","line":106,"in_reply_to":"9ad45d7e_8334ba4a","updated":"2016-08-17 18:12:23.000000000","message":"See my comment at @35.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":106,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":107,"context_line":"        \u0027ports\u0027: obj_fields.ListOfObjectsField("},{"line_number":108,"context_line":"            \u0027FirewallGroupPort\u0027, subclasses\u003dFalse),"},{"line_number":109,"context_line":"        \u0027ingress_firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":110,"context_line":"        \u0027egress_firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":111,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_0349ead0","line":108,"range":{"start_line":108,"start_character":33,"end_line":108,"end_character":49},"updated":"2016-08-12 17:08:36.000000000","message":"I think it\u0027s the default","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":106,"context_line":"        \u0027description\u0027: obj_fields.StringField(),"},{"line_number":107,"context_line":"        \u0027ports\u0027: obj_fields.ListOfObjectsField("},{"line_number":108,"context_line":"            \u0027FirewallGroupPort\u0027, subclasses\u003dFalse),"},{"line_number":109,"context_line":"        \u0027ingress_firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":110,"context_line":"        \u0027egress_firewall_policy_id\u0027: obj_fields.UUIDField(),"},{"line_number":111,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_30df7a0e","line":108,"range":{"start_line":108,"start_character":33,"end_line":108,"end_character":49},"in_reply_to":"9ad45d7e_0349ead0","updated":"2016-08-17 18:12:23.000000000","message":"It is.\nhttps://github.com/openstack/oslo.versionedobjects/blob/master/oslo_versionedobjects/fields.py#L983\n\nRemoved this argument.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def to_dict(self):"},{"line_number":119,"context_line":"        dict_ \u003d super(FirewallGroup, self).to_dict()"},{"line_number":120,"context_line":"        if \u0027ports\u0027 in dict_:"},{"line_number":121,"context_line":"            dict_[\u0027ports\u0027] \u003d [port.to_dict() for port in dict_[\u0027ports\u0027]]"},{"line_number":122,"context_line":"        return dict_"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def obj_load_attr(self, attrname):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_0320caf6","line":121,"updated":"2016-08-12 17:08:36.000000000","message":"I suspect it\u0027s not really needed.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def to_dict(self):"},{"line_number":119,"context_line":"        dict_ \u003d super(FirewallGroup, self).to_dict()"},{"line_number":120,"context_line":"        if \u0027ports\u0027 in dict_:"},{"line_number":121,"context_line":"            dict_[\u0027ports\u0027] \u003d [port.to_dict() for port in dict_[\u0027ports\u0027]]"},{"line_number":122,"context_line":"        return dict_"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def obj_load_attr(self, attrname):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_10199ed7","line":121,"in_reply_to":"9ad45d7e_0320caf6","updated":"2016-08-17 18:12:23.000000000","message":"It\u0027s not.  I\u0027ve removed this.\n\nhttps://github.com/openstack/neutron/blob/master/neutron/objects/base.py#L142","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            dict_[\u0027ports\u0027] \u003d [port.to_dict() for port in dict_[\u0027ports\u0027]]"},{"line_number":122,"context_line":"        return dict_"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":125,"context_line":"        if attrname !\u003d \u0027ports\u0027:"},{"line_number":126,"context_line":"            raise exceptions.ObjectActionError("},{"line_number":127,"context_line":"                action\u003d\u0027obj_load_attr\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_8382fac6","line":124,"updated":"2016-08-12 17:08:36.000000000","message":"this should go away once you add foreign_keys into port objects to load them into the group object.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            dict_[\u0027ports\u0027] \u003d [port.to_dict() for port in dict_[\u0027ports\u0027]]"},{"line_number":122,"context_line":"        return dict_"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":125,"context_line":"        if attrname !\u003d \u0027ports\u0027:"},{"line_number":126,"context_line":"            raise exceptions.ObjectActionError("},{"line_number":127,"context_line":"                action\u003d\u0027obj_load_attr\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_de3277f1","line":124,"in_reply_to":"9ad45d7e_8382fac6","updated":"2016-08-17 18:12:23.000000000","message":"A port can have multiple security groups attached to it.\n\nLet me know if I\u0027ve misunderstood your suggestion here.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if not hasattr(self, attrname):"},{"line_number":131,"context_line":"            self.reload_ports()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def reload_ports(self):"},{"line_number":134,"context_line":"        ports \u003d get_ports(self._context, self.id)"},{"line_number":135,"context_line":"        setattr(self, \u0027ports\u0027, ports)"},{"line_number":136,"context_line":"        self.obj_reset_changes([\u0027ports\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_638706d8","line":133,"updated":"2016-08-12 17:08:36.000000000","message":"ditto","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if not hasattr(self, attrname):"},{"line_number":131,"context_line":"            self.reload_ports()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def reload_ports(self):"},{"line_number":134,"context_line":"        ports \u003d get_ports(self._context, self.id)"},{"line_number":135,"context_line":"        setattr(self, \u0027ports\u0027, ports)"},{"line_number":136,"context_line":"        self.obj_reset_changes([\u0027ports\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_04c16054","line":133,"in_reply_to":"9ad45d7e_638706d8","updated":"2016-08-17 18:12:23.000000000","message":"See above at @124.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e02ebcee69c04a59e5fd0f42709a5bce1e5e9e7","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    fields \u003d {"},{"line_number":147,"context_line":"        \u0027fwp_id\u0027: obj_fields.UUIDField(),"},{"line_number":148,"context_line":"        \u0027fwr_id\u0027: obj_fields.UUIDField(),"},{"line_number":149,"context_line":"        \u0027position\u0027: obj_fields.IntegerField(),"},{"line_number":150,"context_line":"    }"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    fields_no_update \u003d [\u0027fwp_id\u0027, \u0027fwr_id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_23cb4e20","line":149,"updated":"2016-08-12 17:08:36.000000000","message":"I wonder whether it would be cool to have this db detail hidden behind some smart synthetic field that would fill in positions for you, and that would be represented by a simple list, or something along those lines. Then the order of elements in the field value would determine the value for position field in db.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"96323dd1ec64226e34d8332a9b233f01e3576bd7","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    fields \u003d {"},{"line_number":147,"context_line":"        \u0027fwp_id\u0027: obj_fields.UUIDField(),"},{"line_number":148,"context_line":"        \u0027fwr_id\u0027: obj_fields.UUIDField(),"},{"line_number":149,"context_line":"        \u0027position\u0027: obj_fields.IntegerField(),"},{"line_number":150,"context_line":"    }"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    fields_no_update \u003d [\u0027fwp_id\u0027, \u0027fwr_id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_44e078fa","line":149,"in_reply_to":"9ad45d7e_23cb4e20","updated":"2016-08-17 18:12:23.000000000","message":"I\u0027m very interested in cool things!  I\u0027m going to push this PS up and think about your idea.","commit_id":"0cae2247f9eca1bb3698ab6b01dc6168e722339a"}]}
