)]}'
{"neutron/common/constants.py":[{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"54d8cf528d46bff44617eb2c63288a0c3efd719a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# to indicate when the server is busy building sub-components of a router"},{"line_number":26,"context_line":"ROUTER_STATUS_ALLOCATING \u003d \u0027ALLOCATING\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"VALID_ROUTER_STATUS \u003d (ROUTER_STATUS_ACTIVE, ROUTER_STATUS_ALLOCATING)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"DEVICE_ID_RESERVED_DHCP_PORT \u003d \"reserved_dhcp_port\""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7a77a97e_55856acc","line":28,"updated":"2016-11-18 19:32:36.000000000","message":"No DOWN state for router?","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"5eeb069fedb67ef13ea988589d709270c21908dc","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# to indicate when the server is busy building sub-components of a router"},{"line_number":26,"context_line":"ROUTER_STATUS_ALLOCATING \u003d \u0027ALLOCATING\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"VALID_ROUTER_STATUS \u003d (ROUTER_STATUS_ACTIVE, ROUTER_STATUS_ALLOCATING)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"DEVICE_ID_RESERVED_DHCP_PORT \u003d \"reserved_dhcp_port\""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_9e5e2178","line":28,"in_reply_to":"7a77a97e_55856acc","updated":"2016-11-29 17:01:59.000000000","message":"I\u0027m getting the values available on this file, but if the DOWN status is needed, I can create a new constant and include it as valid option.","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"}],"neutron/db/extraroute_db.py":[{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"0dc224786a8e571a6044cc3ea29124bd44bf7fed","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from neutron.db import l3_db"},{"line_number":25,"context_line":"from neutron.db import models_v2"},{"line_number":26,"context_line":"from neutron.extensions import l3"},{"line_number":27,"context_line":"from neutron.objects.router.extensions import (extraroute_db as obj_extraroute)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_f7da21e7","line":27,"updated":"2016-04-19 19:41:23.000000000","message":"You can remove these parens","commit_id":"9cb6dc2a04eb4cdbb3e3be63d27ae46b65a0f884"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"0dc224786a8e571a6044cc3ea29124bd44bf7fed","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from neutron.objects.router.extensions import (extraroute_db as obj_extraroute)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"extra_route_opts \u003d ["},{"line_number":33,"context_line":"    #TODO(nati): use quota framework when it support quota for attributes"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_77f57155","line":30,"updated":"2016-04-19 19:41:23.000000000","message":"remove blank line","commit_id":"9cb6dc2a04eb4cdbb3e3be63d27ae46b65a0f884"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6acc176888ad535aacffee943abe9ba71634a83f","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                                 routes)"},{"line_number":113,"context_line":"        LOG.debug(\u0027Added routes are %s\u0027, added)"},{"line_number":114,"context_line":"        for route in added:"},{"line_number":115,"context_line":"            router_routes \u003d models.RouterRoute("},{"line_number":116,"context_line":"                router_id\u003drouter[\u0027id\u0027],"},{"line_number":117,"context_line":"                destination\u003droute[\u0027destination\u0027],"},{"line_number":118,"context_line":"                nexthop\u003droute[\u0027nexthop\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_bdea3272","line":115,"updated":"2016-06-13 14:20:03.000000000","message":"please switch this module to using the object as part of the patch.","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"}],"neutron/db/l3/models.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5db3c183a1dd1a66dce2fe9205fe79a25c7d9795","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"9ad45d7e_cafead6a","updated":"2016-08-09 06:52:19.000000000","message":"you probably need to remove this and add a dependency. on https://review.openstack.org/#/c/348562/ relocating work is already done. and to avoid complexeity, relocation and ovo should be done in separate patches","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"5bdd805a2e88458e260e1a63c993bd17645d7b2e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"9ad45d7e_574f0192","in_reply_to":"9ad45d7e_cafead6a","updated":"2016-09-22 08:23:32.000000000","message":"+1","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"eeb56eeb9d73f2dd78aec048f08586f4be26da77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"9ad45d7e_e378c92d","in_reply_to":"9ad45d7e_cafead6a","updated":"2016-08-10 01:19:29.000000000","message":"Sure, this is great","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bc95367696513b2657bf78d8977f8195a3b1c3d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"7a8ec9b2_5524d20b","in_reply_to":"9ad45d7e_e378c92d","updated":"2016-09-21 17:14:43.000000000","message":"Done","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"}],"neutron/db/migration/models/head.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"5e9825cedf90bbe3a029eff44f2f08acc6bfde75","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from neutron.db import dns_db  # noqa"},{"line_number":31,"context_line":"from neutron.db import dvr_mac_db  # noqa"},{"line_number":32,"context_line":"from neutron.db import external_net_db  # noqa"},{"line_number":33,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":34,"context_line":"from neutron.db.extra_dhcp_opt import models  # noqa"},{"line_number":35,"context_line":"from neutron.db import extraroute_db  # noqa"},{"line_number":36,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_c17f6764","line":33,"updated":"2016-04-19 18:35:29.000000000","message":"@Sai\n\nThose lines were caused for merge conflicts","commit_id":"9cb6dc2a04eb4cdbb3e3be63d27ae46b65a0f884"},{"author":{"_account_id":19591,"name":"Saisrikiran Mudigonda","email":"saisrikiran.mudigonda@intel.com","username":"saisrikiran"},"change_message_id":"5e02a9f51ccd111797425242ee878d137f200a82","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from neutron.db import dns_db  # noqa"},{"line_number":31,"context_line":"from neutron.db import dvr_mac_db  # noqa"},{"line_number":32,"context_line":"from neutron.db import external_net_db  # noqa"},{"line_number":33,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":34,"context_line":"from neutron.db.extra_dhcp_opt import models  # noqa"},{"line_number":35,"context_line":"from neutron.db import extraroute_db  # noqa"},{"line_number":36,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_14d19b23","line":33,"in_reply_to":"1a122d0e_c17f6764","updated":"2016-04-19 19:05:16.000000000","message":"Done","commit_id":"9cb6dc2a04eb4cdbb3e3be63d27ae46b65a0f884"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"5e9825cedf90bbe3a029eff44f2f08acc6bfde75","unresolved":false,"context_lines":[{"line_number":54,"context_line":"from neutron.db import securitygroups_db  # noqa"},{"line_number":55,"context_line":"from neutron.db import segments_db  # noqa"},{"line_number":56,"context_line":"from neutron.db import servicetype_db  # noqa"},{"line_number":57,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":58,"context_line":"from neutron.db import tag_db  # noqa"},{"line_number":59,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":60,"context_line":"from neutron.extraroute_db import models  # noqa"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_2199fbc4","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":12},"updated":"2016-04-19 18:35:29.000000000","message":"ditto","commit_id":"9cb6dc2a04eb4cdbb3e3be63d27ae46b65a0f884"},{"author":{"_account_id":19591,"name":"Saisrikiran Mudigonda","email":"saisrikiran.mudigonda@intel.com","username":"saisrikiran"},"change_message_id":"5e02a9f51ccd111797425242ee878d137f200a82","unresolved":false,"context_lines":[{"line_number":54,"context_line":"from neutron.db import securitygroups_db  # noqa"},{"line_number":55,"context_line":"from neutron.db import segments_db  # noqa"},{"line_number":56,"context_line":"from neutron.db import servicetype_db  # noqa"},{"line_number":57,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":58,"context_line":"from neutron.db import tag_db  # noqa"},{"line_number":59,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":60,"context_line":"from neutron.extraroute_db import models  # noqa"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_94a3ebb1","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":12},"in_reply_to":"1a122d0e_2199fbc4","updated":"2016-04-19 19:05:16.000000000","message":"Done","commit_id":"9cb6dc2a04eb4cdbb3e3be63d27ae46b65a0f884"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"92e7956d6056880d1092dac29e6559093f5bb695","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from neutron.db import dvr_mac_db  # noqa"},{"line_number":30,"context_line":"from neutron.db import external_net_db  # noqa"},{"line_number":31,"context_line":"from neutron.db.extra_dhcp_opt import models  # noqa"},{"line_number":32,"context_line":"from neutron.db import extradhcpopt_db  # noqa"},{"line_number":33,"context_line":"from neutron.db import extraroute_db  # noqa"},{"line_number":34,"context_line":"from neutron.db import flavors_db  # noqa"},{"line_number":35,"context_line":"from neutron.db import l3_agentschedulers_db  # noqa"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_aa8c2680","line":32,"updated":"2016-06-27 20:38:06.000000000","message":"not relevant to the patch","commit_id":"7984543e43850128757518596621ea1b0edab269"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"5340219e4abab4883b2fa0f7a02a85bb290652cf","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from neutron.db import dvr_mac_db  # noqa"},{"line_number":30,"context_line":"from neutron.db import external_net_db  # noqa"},{"line_number":31,"context_line":"from neutron.db.extra_dhcp_opt import models  # noqa"},{"line_number":32,"context_line":"from neutron.db import extradhcpopt_db  # noqa"},{"line_number":33,"context_line":"from neutron.db import extraroute_db  # noqa"},{"line_number":34,"context_line":"from neutron.db import flavors_db  # noqa"},{"line_number":35,"context_line":"from neutron.db import l3_agentschedulers_db  # noqa"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_aaed46f1","line":32,"in_reply_to":"3aaa91ec_aa8c2680","updated":"2016-06-27 20:41:34.000000000","message":"Done","commit_id":"7984543e43850128757518596621ea1b0edab269"}],"neutron/db/router/models.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"675c25a52fbf53f3199619cfa60be98053032beb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"dada55a8_973d502d","updated":"2016-07-21 17:15:37.000000000","message":"A suggestion to rename this to db/l3/models because we may end up moving all model definitions under that tree instead of creating a directory for each. After Router and RouterPort, FloatingIp etc will need same refactor because of of mixins in db/l3_db.py.","commit_id":"5ea0d1578a8daab2f5856a7216d515ffa4ad57f2"}],"neutron/objects/l3.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6acc176888ad535aacffee943abe9ba71634a83f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_5dfa2e44","line":1,"updated":"2016-06-13 14:20:03.000000000","message":"Let\u0027s rename the file into router.py","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"1dd400fd0f3b8f12a1313d169053b1e1fc8607f0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_0e797c82","line":1,"in_reply_to":"7aa08908_5dfa2e44","updated":"2016-06-13 20:55:53.000000000","message":"Done","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6acc176888ad535aacffee943abe9ba71634a83f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":29,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":30,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":31,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"},{"line_number":32,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":33,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":34,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_9d9656ee","line":31,"range":{"start_line":31,"start_character":18,"end_line":31,"end_character":43},"updated":"2016-06-13 14:20:03.000000000","message":"Should we limit the set of possible status values?","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"1dd400fd0f3b8f12a1313d169053b1e1fc8607f0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":29,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":30,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":31,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"},{"line_number":32,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":33,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":34,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_ae87885f","line":31,"range":{"start_line":31,"start_character":18,"end_line":31,"end_character":43},"in_reply_to":"7aa08908_9d9656ee","updated":"2016-06-13 20:55:53.000000000","message":"In the db the model is a string(16), and there are only 2 predefined router status constants in common/constants.py, but it does make sense as an enum. I\u0027m sure I\u0027m missing some options though (\u0027DOWN\u0027?)","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"}],"neutron/objects/router.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d69a89b8b0f590d8c64cb4aede6468afc24dfa","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    db_model \u003d models.Router"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    possible_statuses \u003d [constants.ROUTER_STATUS_ACTIVE,"},{"line_number":29,"context_line":"                         constants.ROUTER_STATUS_ALLOCATING]"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_9f305003","line":28,"updated":"2016-06-21 12:35:17.000000000","message":"How are we sure that\u0027s the only values allowed?","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d69a89b8b0f590d8c64cb4aede6468afc24dfa","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                         constants.ROUTER_STATUS_ALLOCATING]"},{"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":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"        # \u0027status\u0027: obj_fields.EnumField(valid_values\u003dpossible_statuses),"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_ff7074de","line":32,"updated":"2016-06-21 12:35:17.000000000","message":"ids should be StringFields. See: I93488701c824a51b5588093b9aba499068ba36e8","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fd5d2f024a9a27e2127613102ed4b388909613f8","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                         constants.ROUTER_STATUS_ALLOCATING]"},{"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":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"        # \u0027status\u0027: obj_fields.EnumField(valid_values\u003dpossible_statuses),"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_e72e72f9","line":32,"in_reply_to":"5a9d85d2_ff7074de","updated":"2016-06-27 16:43:55.000000000","message":"Sorry, was giving you wrong impression. The string type should be used for tenant_id field ONLY.","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d69a89b8b0f590d8c64cb4aede6468afc24dfa","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":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"        # \u0027status\u0027: obj_fields.EnumField(valid_values\u003dpossible_statuses),"},{"line_number":36,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_7f7da4b0","line":33,"updated":"2016-06-21 12:35:17.000000000","message":"Ditto","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d69a89b8b0f590d8c64cb4aede6468afc24dfa","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        # \u0027status\u0027: obj_fields.EnumField(valid_values\u003dpossible_statuses),"},{"line_number":36,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"},{"line_number":37,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":38,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":39,"context_line":"        # \u0027attached_ports\u0027: obj_fields.ObjectField(\u0027RouterPort\u0027),"},{"line_number":40,"context_line":"        # \u0027l3_agents\u0027: obj_fields.ObjectField(\u0027Agent\u0027)"},{"line_number":41,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_1f45806f","line":38,"updated":"2016-06-21 12:35:17.000000000","message":"Ditto","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fd5d2f024a9a27e2127613102ed4b388909613f8","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        # \u0027status\u0027: obj_fields.EnumField(valid_values\u003dpossible_statuses),"},{"line_number":36,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"},{"line_number":37,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":38,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":39,"context_line":"        # \u0027attached_ports\u0027: obj_fields.ObjectField(\u0027RouterPort\u0027),"},{"line_number":40,"context_line":"        # \u0027l3_agents\u0027: obj_fields.ObjectField(\u0027Agent\u0027)"},{"line_number":41,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_873e8e27","line":38,"in_reply_to":"5a9d85d2_1f45806f","updated":"2016-06-27 16:43:55.000000000","message":"disregard","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d69a89b8b0f590d8c64cb4aede6468afc24dfa","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":38,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":39,"context_line":"        # \u0027attached_ports\u0027: obj_fields.ObjectField(\u0027RouterPort\u0027),"},{"line_number":40,"context_line":"        # \u0027l3_agents\u0027: obj_fields.ObjectField(\u0027Agent\u0027)"},{"line_number":41,"context_line":"    }"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_3f083c2d","line":40,"updated":"2016-06-21 12:35:17.000000000","message":"you need to implement those, but I guess you know about it, just not there yet.","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d69a89b8b0f590d8c64cb4aede6468afc24dfa","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027port_id\u0027]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    fields \u003d {"},{"line_number":54,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":55,"context_line":"        \u0027port_id\u0027: obj_fields.UUIDField(),"},{"line_number":56,"context_line":"        \u0027port_type\u0027: obj_fields.StringField(),"},{"line_number":57,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_ff47d474","line":54,"updated":"2016-06-21 12:35:17.000000000","message":"ditto here and below","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fd5d2f024a9a27e2127613102ed4b388909613f8","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027port_id\u0027]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    fields \u003d {"},{"line_number":54,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":55,"context_line":"        \u0027port_id\u0027: obj_fields.UUIDField(),"},{"line_number":56,"context_line":"        \u0027port_type\u0027: obj_fields.StringField(),"},{"line_number":57,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_a7458ab4","line":54,"in_reply_to":"5a9d85d2_ff47d474","updated":"2016-06-27 16:43:55.000000000","message":"disregard","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d69a89b8b0f590d8c64cb4aede6468afc24dfa","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    fields \u003d {"},{"line_number":54,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":55,"context_line":"        \u0027port_id\u0027: obj_fields.UUIDField(),"},{"line_number":56,"context_line":"        \u0027port_type\u0027: obj_fields.StringField(),"},{"line_number":57,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_320fd32f","line":56,"updated":"2016-06-21 12:35:17.000000000","message":"What are possible values for the type field?","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5db3c183a1dd1a66dce2fe9205fe79a25c7d9795","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"9ad45d7e_5e527e14","updated":"2016-08-09 06:52:19.000000000","message":"FloatingIP should also be defined in this file, but lets see what other reviewers says","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bc95367696513b2657bf78d8977f8195a3b1c3d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"7a8ec9b2_75170eee","in_reply_to":"3ac371cc_27ea9bac","updated":"2016-09-21 17:14:43.000000000","message":"I\u0027m going to keep it here until it\u0027s decided to include the correct location[1]\n\n[1] https://review.openstack.org/#/c/352577/","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bc95367696513b2657bf78d8977f8195a3b1c3d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"7a8ec9b2_15adea9a","in_reply_to":"9ad45d7e_5e527e14","updated":"2016-09-21 17:14:43.000000000","message":"You\u0027re right, following that logic FloatingIP should be here","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"eeb56eeb9d73f2dd78aec048f08586f4be26da77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"9ad45d7e_83962dee","in_reply_to":"9ad45d7e_5e527e14","updated":"2016-08-10 01:19:29.000000000","message":"if that, the file should be named as l3.py","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":18332,"name":"Ankur","email":"ankur.gupta@intel.com","username":"ankur-gupta-f"},"change_message_id":"75011ce9d787656b294f09dabc539d05377399ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"3ac371cc_27ea9bac","in_reply_to":"9ad45d7e_83962dee","updated":"2016-08-17 19:46:37.000000000","message":"move file into own dir /objects/router/router.py","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5db3c183a1dd1a66dce2fe9205fe79a25c7d9795","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields \u003d {"},{"line_number":38,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":39,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":40,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":42,"context_line":"        \u0027gw_port_id\u0027: obj_fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":20,"id":"9ad45d7e_eaf57183","line":39,"range":{"start_line":39,"start_character":9,"end_line":39,"end_character":20},"updated":"2016-08-09 06:52:19.000000000","message":"should be project_id now","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bc95367696513b2657bf78d8977f8195a3b1c3d3","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields \u003d {"},{"line_number":38,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":39,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":40,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":42,"context_line":"        \u0027gw_port_id\u0027: obj_fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a8ec9b2_759c6e6a","line":39,"range":{"start_line":39,"start_character":9,"end_line":39,"end_character":20},"in_reply_to":"9ad45d7e_03ccfd68","updated":"2016-09-21 17:14:43.000000000","message":"Done","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"eeb56eeb9d73f2dd78aec048f08586f4be26da77","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields \u003d {"},{"line_number":38,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":39,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":40,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":42,"context_line":"        \u0027gw_port_id\u0027: obj_fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":20,"id":"9ad45d7e_03ccfd68","line":39,"range":{"start_line":39,"start_character":9,"end_line":39,"end_character":20},"in_reply_to":"9ad45d7e_eaf57183","updated":"2016-08-10 01:19:29.000000000","message":"yes, I see that in https://review.openstack.org/#/c/348562/16/neutron/db/models/l3.py , we have changed it as project_id, will update.","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"01e8b707670e3d74b2346fdf18df9868243ba575","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":42,"context_line":"        \u0027gw_port_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":43,"context_line":"        \u0027gw_port\u0027: obj_fields.ObjectField(\u0027Port\u0027, nullable\u003dTrue),"},{"line_number":44,"context_line":"        \u0027status\u0027: obj_fields.EnumField(valid_values\u003dpossible_statuses),"},{"line_number":45,"context_line":"        \u0027flavor_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":46,"context_line":"        \u0027attached_ports\u0027: obj_fields.ListOfObjectsField(\u0027RouterPort\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9ad45d7e_460ec33b","line":43,"range":{"start_line":43,"start_character":7,"end_line":43,"end_character":65},"updated":"2016-08-11 02:06:02.000000000","message":"We need implement Port object first https://review.openstack.org/351368","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bc95367696513b2657bf78d8977f8195a3b1c3d3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":41,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":42,"context_line":"        \u0027gw_port_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":43,"context_line":"        \u0027gw_port\u0027: obj_fields.ObjectField(\u0027Port\u0027, nullable\u003dTrue),"},{"line_number":44,"context_line":"        \u0027status\u0027: obj_fields.EnumField(valid_values\u003dpossible_statuses),"},{"line_number":45,"context_line":"        \u0027flavor_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":46,"context_line":"        \u0027attached_ports\u0027: obj_fields.ListOfObjectsField(\u0027RouterPort\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a8ec9b2_15b24ae5","line":43,"range":{"start_line":43,"start_character":7,"end_line":43,"end_character":65},"in_reply_to":"9ad45d7e_460ec33b","updated":"2016-09-21 17:14:43.000000000","message":"Right, that patch is almost done, so putting this patch on top of the other one can add more complexity to handle it later.","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"01e8b707670e3d74b2346fdf18df9868243ba575","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        \u0027gw_port\u0027: obj_fields.ObjectField(\u0027Port\u0027, nullable\u003dTrue),"},{"line_number":44,"context_line":"        \u0027status\u0027: obj_fields.EnumField(valid_values\u003dpossible_statuses),"},{"line_number":45,"context_line":"        \u0027flavor_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":46,"context_line":"        \u0027attached_ports\u0027: obj_fields.ListOfObjectsField(\u0027RouterPort\u0027,"},{"line_number":47,"context_line":"                                                        nullable\u003dTrue),"},{"line_number":48,"context_line":"        \u0027l3_agents\u0027: obj_fields.ListOfObjectsField(\u0027Agent\u0027, nullable\u003dTrue),"},{"line_number":49,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":20,"id":"9ad45d7e_013f9587","line":46,"range":{"start_line":46,"start_character":55,"end_line":46,"end_character":69},"updated":"2016-08-11 02:06:02.000000000","message":"Besides, we need to add attached_ports to synthetic_fields to load RouterPort(which has 2 foreign_keys), currently in the base of object implement, it will fail due to \nhttps://github.com/openstack/neutron/blob/9.0.0.0b2/neutron/objects/base.py#L430\n\nNeed to figure out how to adopt base class first.","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bc95367696513b2657bf78d8977f8195a3b1c3d3","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        \u0027gw_port\u0027: obj_fields.ObjectField(\u0027Port\u0027, nullable\u003dTrue),"},{"line_number":44,"context_line":"        \u0027status\u0027: obj_fields.EnumField(valid_values\u003dpossible_statuses),"},{"line_number":45,"context_line":"        \u0027flavor_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":46,"context_line":"        \u0027attached_ports\u0027: obj_fields.ListOfObjectsField(\u0027RouterPort\u0027,"},{"line_number":47,"context_line":"                                                        nullable\u003dTrue),"},{"line_number":48,"context_line":"        \u0027l3_agents\u0027: obj_fields.ListOfObjectsField(\u0027Agent\u0027, nullable\u003dTrue),"},{"line_number":49,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a8ec9b2_95d57ae6","line":46,"range":{"start_line":46,"start_character":55,"end_line":46,"end_character":69},"in_reply_to":"9ad45d7e_013f9587","updated":"2016-09-21 17:14:43.000000000","message":"Yeah, we didn\u0027t cover multiple primary keys scenario before.","commit_id":"27b598990928ce54a281633c75703ce99c40f60e"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"588903af0f941dc36e892d9fa58e200cb02e72e0","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \u0027enable_snat\u0027: obj_fields.BooleanField(default\u003dTrue),"},{"line_number":62,"context_line":"    }"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    synthetic_fields \u003d [\u0027attached_ports\u0027, \u0027l3_agents\u0027]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":22,"id":"da6895a0_c9899dcc","line":64,"updated":"2016-10-21 15:13:19.000000000","message":"I think a synthetic field for router extra attributes should also be added? As seen from [1], [2] it will helpful to side load the extra attributes because it can be used in integration here [3].\n\n[1] - https://github.com/openstack/neutron/blob/master/neutron/db/models/l3_attrs.py#L44\n[2] - https://review.openstack.org/#/c/356766/37/neutron/objects/router.py@80\n[3] - https://github.com/openstack/neutron/blob/master/neutron/db/l3_attrs_db.py#L46-L48","commit_id":"6cdc10194caa85cd003a7f9ac89f035bcc846db5"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"301f2d9ef76d321520b0a887d7fcf997bb492353","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \u0027enable_snat\u0027: obj_fields.BooleanField(default\u003dTrue),"},{"line_number":62,"context_line":"    }"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    synthetic_fields \u003d [\u0027attached_ports\u0027, \u0027l3_agents\u0027]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":22,"id":"da6895a0_a0cd375f","line":64,"in_reply_to":"da6895a0_c9899dcc","updated":"2016-10-24 09:53:23.000000000","message":"Got it, I\u0027m going to add it later, thanks.","commit_id":"6cdc10194caa85cd003a7f9ac89f035bcc846db5"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"200206fe7ea20434135e4627b56ff1fa5d76854f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":77,"context_line":"        \u0027floating_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":78,"context_line":"        \u0027floating_network_id\u0027: obj_fields.UUIDField(),"},{"line_number":79,"context_line":"        \u0027floating_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":80,"context_line":"        \u0027fixed_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":81,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":82,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a95cdbc_28839457","line":79,"range":{"start_line":79,"start_character":8,"end_line":79,"end_character":51},"updated":"2016-10-06 16:47:15.000000000","message":"this is a foreign key, so it should have foreignkeys attribute in this object","commit_id":"6cdc10194caa85cd003a7f9ac89f035bcc846db5"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"301f2d9ef76d321520b0a887d7fcf997bb492353","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":77,"context_line":"        \u0027floating_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":78,"context_line":"        \u0027floating_network_id\u0027: obj_fields.UUIDField(),"},{"line_number":79,"context_line":"        \u0027floating_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":80,"context_line":"        \u0027fixed_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":81,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":82,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":22,"id":"da6895a0_a091b754","line":79,"range":{"start_line":79,"start_character":8,"end_line":79,"end_character":51},"in_reply_to":"1a95cdbc_28839457","updated":"2016-10-24 09:53:23.000000000","message":"The foreign key that you\u0027re referring depends on having a synthetic field, in this case there is no synthetic field in port that reflect the need of a foreign key here.","commit_id":"6cdc10194caa85cd003a7f9ac89f035bcc846db5"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"fe3f9805805776cc165e271bc2324f465374668f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":87,"context_line":"        \u0027status\u0027: common_types.RouterStatusEnumField(),"},{"line_number":88,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":89,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":90,"context_line":"        \u0027flavor_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":91,"context_line":"        \u0027enable_snat\u0027: obj_fields.BooleanField(default\u003dTrue),"},{"line_number":92,"context_line":"        \u0027extra_attributes\u0027: obj_fields.ListOfObjectsField("},{"line_number":93,"context_line":"            \u0027RouterExtraAttributes\u0027, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_11f469f0","line":90,"range":{"start_line":89,"start_character":8,"end_line":90,"end_character":57},"updated":"2016-10-24 21:37:35.000000000","message":"these both are string field in db, may be need conversion to and from string.","commit_id":"6af2aedcc4c61ed7fd11d206a4d20f57526fdd11"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"fe3f9805805776cc165e271bc2324f465374668f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":89,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":90,"context_line":"        \u0027flavor_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":91,"context_line":"        \u0027enable_snat\u0027: obj_fields.BooleanField(default\u003dTrue),"},{"line_number":92,"context_line":"        \u0027extra_attributes\u0027: obj_fields.ListOfObjectsField("},{"line_number":93,"context_line":"            \u0027RouterExtraAttributes\u0027, nullable\u003dFalse)"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_d15e71e8","line":93,"range":{"start_line":91,"start_character":8,"end_line":93,"end_character":52},"updated":"2016-10-24 21:37:35.000000000","message":"I can\u0027t spot these in db model ? are these added for having extra info attribute to object ?","commit_id":"6af2aedcc4c61ed7fd11d206a4d20f57526fdd11"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"fe3f9805805776cc165e271bc2324f465374668f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            \u0027RouterExtraAttributes\u0027, nullable\u003dFalse)"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @property"},{"line_number":99,"context_line":"    def attached_ports(self):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_1159c9fe","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":20},"updated":"2016-10-24 21:37:35.000000000","message":"why missing l3_agents ?","commit_id":"6af2aedcc4c61ed7fd11d206a4d20f57526fdd11"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"7c7cbf43ccd18d0fcc0d96d900bd4f9e4704352e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":129,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":130,"context_line":"        \u0027flavor_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":131,"context_line":"        \u0027enable_snat\u0027: obj_fields.BooleanField(default\u003dTrue),"},{"line_number":132,"context_line":"        \u0027extra_attributes\u0027: obj_fields.ObjectField("},{"line_number":133,"context_line":"            \u0027RouterExtraAttributes\u0027, nullable\u003dTrue)"},{"line_number":134,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a629dbe_d7905def","line":131,"updated":"2016-11-07 19:36:26.000000000","message":"I do not see \u0027enable_snat\u0027 in the model [1]. May I know from where is this introduced from?\n\n[1] - https://github.com/openstack/neutron/blob/master/neutron/db/models/l3.py#L47-L65","commit_id":"14ff5a07e6d47acac9f75c1f5050773b488d6caf"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"9741e4d9a2f4f0f9ab7b2ce67967421678cc7605","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":129,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":130,"context_line":"        \u0027flavor_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":131,"context_line":"        \u0027enable_snat\u0027: obj_fields.BooleanField(default\u003dTrue),"},{"line_number":132,"context_line":"        \u0027extra_attributes\u0027: obj_fields.ObjectField("},{"line_number":133,"context_line":"            \u0027RouterExtraAttributes\u0027, nullable\u003dTrue)"},{"line_number":134,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a629dbe_9c49a58e","line":131,"in_reply_to":"9a629dbe_d7905def","updated":"2016-11-07 21:29:12.000000000","message":"This looks like it belongs to l3_ext_gw_mode, done.","commit_id":"14ff5a07e6d47acac9f75c1f5050773b488d6caf"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"20c8c56e1b1e5fe299b6831d1539c1e38f059855","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    db_model \u003d l3.Router"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    fields \u003d {"},{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_a578cc90","line":123,"updated":"2016-11-16 13:55:02.000000000","message":"Missing agents as synthetic field?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"e6847b3a87ed510e6a06d7c996e0a974eb88511e","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    db_model \u003d l3.Router"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    fields \u003d {"},{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_edefb784","line":123,"in_reply_to":"7a77a97e_4cee3ced","updated":"2016-11-18 00:04:07.000000000","message":"Artur, are you referring to l3_agents?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    db_model \u003d l3.Router"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    fields \u003d {"},{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_4cee3ced","line":123,"in_reply_to":"7a77a97e_a578cc90","updated":"2016-11-16 22:08:24.000000000","message":"This means that we need a foreign key in Agent OVO class, isn\u0027t it?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    fields \u003d {"},{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":127,"context_line":"        \u0027status\u0027: common_types.RouterStatusEnumField(),"},{"line_number":128,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_ab79af95","line":125,"range":{"start_line":125,"start_character":33,"end_line":125,"end_character":42},"updated":"2016-11-15 16:45:34.000000000","message":"project_id cannot be UUID because that type enforces UUID-ness, and project_id may be a random string. Please use StringField.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    fields \u003d {"},{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":127,"context_line":"        \u0027status\u0027: common_types.RouterStatusEnumField(),"},{"line_number":128,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_ecfaa8bc","line":125,"range":{"start_line":125,"start_character":33,"end_line":125,"end_character":42},"in_reply_to":"7a77a97e_ab79af95","updated":"2016-11-16 22:08:24.000000000","message":"Done","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    fields \u003d {"},{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":127,"context_line":"        \u0027status\u0027: common_types.RouterStatusEnumField(),"},{"line_number":128,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":129,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_eb73a7af","line":126,"updated":"2016-11-15 16:45:34.000000000","message":"nullable\u003dTrue?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    fields \u003d {"},{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":127,"context_line":"        \u0027status\u0027: common_types.RouterStatusEnumField(),"},{"line_number":128,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":129,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_6c13f8b8","line":126,"in_reply_to":"7a77a97e_eb73a7af","updated":"2016-11-16 22:08:24.000000000","message":"Done","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":127,"context_line":"        \u0027status\u0027: common_types.RouterStatusEnumField(),"},{"line_number":128,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":129,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":130,"context_line":"        \u0027flavor_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_2b667fed","line":127,"updated":"2016-11-15 16:45:34.000000000","message":"nullable\u003dTrue?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":127,"context_line":"        \u0027status\u0027: common_types.RouterStatusEnumField(),"},{"line_number":128,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":129,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":130,"context_line":"        \u0027flavor_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_cc108cab","line":127,"in_reply_to":"7a77a97e_2b667fed","updated":"2016-11-16 22:08:24.000000000","message":"Done","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":127,"context_line":"        \u0027status\u0027: common_types.RouterStatusEnumField(),"},{"line_number":128,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":129,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":130,"context_line":"        \u0027flavor_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":131,"context_line":"        \u0027extra_attributes\u0027: obj_fields.ObjectField("}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_aba0cff5","line":128,"updated":"2016-11-15 16:45:34.000000000","message":"nullable\u003dTrue?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(),"},{"line_number":127,"context_line":"        \u0027status\u0027: common_types.RouterStatusEnumField(),"},{"line_number":128,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(),"},{"line_number":129,"context_line":"        \u0027gw_port_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":130,"context_line":"        \u0027flavor_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":131,"context_line":"        \u0027extra_attributes\u0027: obj_fields.ObjectField("}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_4c1d5cbc","line":128,"in_reply_to":"7a77a97e_aba0cff5","updated":"2016-11-16 22:08:24.000000000","message":"Done","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @property"},{"line_number":138,"context_line":"    def attached_ports(self):"},{"line_number":139,"context_line":"        return self.db_obj.attached_ports"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_4bc57b3a","line":139,"range":{"start_line":137,"start_character":4,"end_line":139,"end_character":41},"updated":"2016-11-15 16:45:34.000000000","message":"So it will return SQLAlchemy models. I think we should do better here, exposing RouterPort objects. BTW why not just having it exposed as another ListOfObjectsField on the Router object? If that\u0027s because it\u0027s not eagerly loaded (?) then just check how we load \u0027rules\u0027 field in QosPolicy: you define obj_load_attr that will capture __getattr__ on the object and will allow you to implement a custom extractor for the field.\n\nIt would also be nice to see how the property is supposed to be used.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"e6847b3a87ed510e6a06d7c996e0a974eb88511e","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @property"},{"line_number":138,"context_line":"    def attached_ports(self):"},{"line_number":139,"context_line":"        return self.db_obj.attached_ports"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_ed7a57f0","line":139,"range":{"start_line":137,"start_character":4,"end_line":139,"end_character":41},"in_reply_to":"7a77a97e_2c08202c","updated":"2016-11-18 00:04:07.000000000","message":"I tried to implement this as QoSPolicy does and I got this error[1], did I missing something?\n\n    def obj_load_attr(self, attrname):\n        if attrname !\u003d \u0027attached_ports\u0027:\n            raise exceptions.ObjectActionError(\n                action\u003d\u0027obj_load_attr\u0027,\n                reason\u003d_(\u0027unable to load %s\u0027) % attrname)\n\n        if not hasattr(self, attrname):\n            self.reload_attached_ports()\n\n    def reload_attached_ports(self):\n        attached_ports \u003d RouterPort.get_objects(self.obj_context, self.id)\n        setattr(self, \u0027attached_ports\u0027, attached_ports)\n        self.obj_reset_changes([\u0027attached_ports\u0027])\n\n[1] http://paste.openstack.org/show/589652/","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @property"},{"line_number":138,"context_line":"    def attached_ports(self):"},{"line_number":139,"context_line":"        return self.db_obj.attached_ports"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_2c08202c","line":139,"range":{"start_line":137,"start_character":4,"end_line":139,"end_character":41},"in_reply_to":"7a77a97e_4bc57b3a","updated":"2016-11-16 22:08:24.000000000","message":"Exactly, this is because is no eagerly loaded[1] or it\u0027s loaded dynamically.  I explored the option to modify the model but that alternative never worked[2], I\u0027ll take a look of that object.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/db/models/l3.py#L61\n[2] https://review.openstack.org/#/c/307964/22/neutron/db/l3_dvr_db.py@121","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"88718bd8e4d83d415e30991c6029579185dfe5a4","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @property"},{"line_number":138,"context_line":"    def attached_ports(self):"},{"line_number":139,"context_line":"        return self.db_obj.attached_ports"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_d19963d2","line":139,"range":{"start_line":137,"start_character":4,"end_line":139,"end_character":41},"in_reply_to":"7a77a97e_ed7a57f0","updated":"2016-11-21 15:01:59.000000000","message":"You were missing router_id\u003dself.id in reload_attached_ports():\n\n\n    def reload_attached_ports(self):\n        attached_ports \u003d RouterPort.get_objects(self.obj_context, router_id\u003dself.id)\n        setattr(self, \u0027attached_ports\u0027, attached_ports)\n        self.obj_reset_changes([\u0027attached_ports\u0027])\n\nAlso I would call super().obj_laod_attr when attrname is not \u0027attached_ports\u0027","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    fields \u003d {"},{"line_number":150,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":151,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":152,"context_line":"        \u0027floating_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":153,"context_line":"        \u0027floating_network_id\u0027: obj_fields.UUIDField(),"},{"line_number":154,"context_line":"        \u0027floating_port_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_2b52ff67","line":151,"range":{"start_line":151,"start_character":33,"end_line":151,"end_character":42},"updated":"2016-11-15 16:45:34.000000000","message":"StringField","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    fields \u003d {"},{"line_number":150,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":151,"context_line":"        \u0027project_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":152,"context_line":"        \u0027floating_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":153,"context_line":"        \u0027floating_network_id\u0027: obj_fields.UUIDField(),"},{"line_number":154,"context_line":"        \u0027floating_port_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_e23b8fcf","line":151,"range":{"start_line":151,"start_character":33,"end_line":151,"end_character":42},"in_reply_to":"7a77a97e_2b52ff67","updated":"2016-11-16 22:08:24.000000000","message":"Done","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        \u0027floating_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":153,"context_line":"        \u0027floating_network_id\u0027: obj_fields.UUIDField(),"},{"line_number":154,"context_line":"        \u0027floating_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":155,"context_line":"        \u0027fixed_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":156,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":157,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":158,"context_line":"        \u0027last_known_router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_4b82db95","line":155,"updated":"2016-11-15 16:45:34.000000000","message":"nullable\u003dTrue","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        \u0027floating_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":153,"context_line":"        \u0027floating_network_id\u0027: obj_fields.UUIDField(),"},{"line_number":154,"context_line":"        \u0027floating_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":155,"context_line":"        \u0027fixed_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":156,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":157,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":158,"context_line":"        \u0027last_known_router_id\u0027: obj_fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_c2ce93b3","line":155,"in_reply_to":"7a77a97e_4b82db95","updated":"2016-11-16 22:08:24.000000000","message":"Done","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        \u0027floating_network_id\u0027: obj_fields.UUIDField(),"},{"line_number":154,"context_line":"        \u0027floating_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":155,"context_line":"        \u0027fixed_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":156,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":157,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":158,"context_line":"        \u0027last_known_router_id\u0027: obj_fields.UUIDField(),"},{"line_number":159,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_cb442b76","line":156,"updated":"2016-11-15 16:45:34.000000000","message":"nullable\u003dTrue","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        \u0027floating_network_id\u0027: obj_fields.UUIDField(),"},{"line_number":154,"context_line":"        \u0027floating_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":155,"context_line":"        \u0027fixed_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":156,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":157,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":158,"context_line":"        \u0027last_known_router_id\u0027: obj_fields.UUIDField(),"},{"line_number":159,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_82d49b47","line":156,"in_reply_to":"7a77a97e_cb442b76","updated":"2016-11-16 22:08:24.000000000","message":"Done","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        \u0027floating_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":155,"context_line":"        \u0027fixed_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":156,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":157,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":158,"context_line":"        \u0027last_known_router_id\u0027: obj_fields.UUIDField(),"},{"line_number":159,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"},{"line_number":160,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_6b56b72a","line":157,"updated":"2016-11-15 16:45:34.000000000","message":"I believe it\u0027s nullable\u003dTrue too?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        \u0027floating_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":155,"context_line":"        \u0027fixed_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":156,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":157,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":158,"context_line":"        \u0027last_known_router_id\u0027: obj_fields.UUIDField(),"},{"line_number":159,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"},{"line_number":160,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_e24c6f44","line":157,"in_reply_to":"7a77a97e_6b56b72a","updated":"2016-11-16 22:08:24.000000000","message":"Yes, Done","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        \u0027fixed_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":156,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":157,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":158,"context_line":"        \u0027last_known_router_id\u0027: obj_fields.UUIDField(),"},{"line_number":159,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"},{"line_number":160,"context_line":"    }"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_ab1d2f75","line":158,"updated":"2016-11-15 16:45:34.000000000","message":"nullable\u003dTrue","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        \u0027fixed_port_id\u0027: obj_fields.UUIDField(),"},{"line_number":156,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":157,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":158,"context_line":"        \u0027last_known_router_id\u0027: obj_fields.UUIDField(),"},{"line_number":159,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"},{"line_number":160,"context_line":"    }"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_c25cd3ef","line":158,"in_reply_to":"7a77a97e_ab1d2f75","updated":"2016-11-16 22:08:24.000000000","message":"Done","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":157,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":158,"context_line":"        \u0027last_known_router_id\u0027: obj_fields.UUIDField(),"},{"line_number":159,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"},{"line_number":160,"context_line":"    }"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_cb126b62","line":159,"updated":"2016-11-15 16:45:34.000000000","message":"nullable\u003dTrue. Also, should we define a new enum type to include \n\nFLOATINGIP_STATUS_ACTIVE \u003d \u0027ACTIVE\u0027\nFLOATINGIP_STATUS_DOWN \u003d \u0027DOWN\u0027\nFLOATINGIP_STATUS_ERROR \u003d \u0027ERROR\u0027\n\nonly?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(),"},{"line_number":157,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":158,"context_line":"        \u0027last_known_router_id\u0027: obj_fields.UUIDField(),"},{"line_number":159,"context_line":"        \u0027status\u0027: obj_fields.StringField(),"},{"line_number":160,"context_line":"    }"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_fd6ed42d","line":159,"in_reply_to":"7a77a97e_cb126b62","updated":"2016-11-16 22:08:24.000000000","message":"It looks like, at least the only ones defined in neutron lib.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"828f86ace27b921217f030ff8d6e0023e5c2438f","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027port_id\u0027]"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    fields \u003d {"},{"line_number":110,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":111,"context_line":"        \u0027port_id\u0027: obj_fields.UUIDField(),"},{"line_number":112,"context_line":"        \u0027port_type\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_665c17ee","line":109,"updated":"2016-11-24 12:06:48.000000000","message":"missing \u0027port\u0027 as synthetic field? it should be already side loaded because it is defined as lazy joined.","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"5eeb069fedb67ef13ea988589d709270c21908dc","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027port_id\u0027]"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    fields \u003d {"},{"line_number":110,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":111,"context_line":"        \u0027port_id\u0027: obj_fields.UUIDField(),"},{"line_number":112,"context_line":"        \u0027port_type\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_c9e0e1cf","line":109,"in_reply_to":"5a74a57a_665c17ee","updated":"2016-11-29 17:01:59.000000000","message":"I could be wrong but I didn\u0027t find a place where that field is consumed","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"4e48cd26e2aed5ed231216fd20f4a7853fb16160","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027port_id\u0027]"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    fields \u003d {"},{"line_number":110,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":111,"context_line":"        \u0027port_id\u0027: obj_fields.UUIDField(),"},{"line_number":112,"context_line":"        \u0027port_type\u0027: obj_fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_d57bdd27","line":109,"in_reply_to":"5a74a57a_c9e0e1cf","updated":"2016-11-30 16:49:43.000000000","message":"I believe here:\nhttps://github.com/openstack/neutron/blob/master/neutron/db/l3_db.py#L1563","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"828f86ace27b921217f030ff8d6e0023e5c2438f","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    fields \u003d {"},{"line_number":110,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":111,"context_line":"        \u0027port_id\u0027: obj_fields.UUIDField(),"},{"line_number":112,"context_line":"        \u0027port_type\u0027: obj_fields.StringField(),"},{"line_number":113,"context_line":"    }"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_46363b53","line":112,"range":{"start_line":112,"start_character":43,"end_line":112,"end_character":45},"updated":"2016-11-24 12:06:48.000000000","message":"nullable\u003dTrue","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"5eeb069fedb67ef13ea988589d709270c21908dc","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    fields \u003d {"},{"line_number":110,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":111,"context_line":"        \u0027port_id\u0027: obj_fields.UUIDField(),"},{"line_number":112,"context_line":"        \u0027port_type\u0027: obj_fields.StringField(),"},{"line_number":113,"context_line":"    }"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_3ed7cdc0","line":112,"range":{"start_line":112,"start_character":43,"end_line":112,"end_character":45},"in_reply_to":"5a74a57a_46363b53","updated":"2016-11-29 17:01:59.000000000","message":"Done","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"70da46589531bd934a92ccc121199d23a6bcda85","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    db_model \u003d l3.Router"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    fields \u003d {"},{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a77a97e_6811ae5c","line":123,"updated":"2016-11-18 19:22:45.000000000","message":"why is enable_snat and standard_attribute_id not added in the fields? (it is there in the router table in the database)","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"5eeb069fedb67ef13ea988589d709270c21908dc","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    db_model \u003d l3.Router"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    fields \u003d {"},{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_5ea9e923","line":123,"in_reply_to":"5a74a57a_b474909c","updated":"2016-11-29 17:01:59.000000000","message":"Done","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"828f86ace27b921217f030ff8d6e0023e5c2438f","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    db_model \u003d l3.Router"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    fields \u003d {"},{"line_number":124,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_b474909c","line":123,"in_reply_to":"7a77a97e_6811ae5c","updated":"2016-11-24 12:06:48.000000000","message":"standard_attr_id is not exposed since it is covered by DeclarativeObject and add_standard_attributes. The id would be exposed via new property under NeutronDbObject, and the mechanism will be generic for all objects that has standard attributes.\n\nThe enable_snat is not in router model. But it is added here [1]. We should definitely add it to Router fields.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/db/l3_gwmode_db.py#L36","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"828f86ace27b921217f030ff8d6e0023e5c2438f","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @property"},{"line_number":138,"context_line":"    def attached_ports(self):"},{"line_number":139,"context_line":"        return self.db_obj.attached_ports"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_f4d1a8ce","line":139,"range":{"start_line":137,"start_character":4,"end_line":139,"end_character":41},"updated":"2016-11-24 12:06:48.000000000","message":"it should be declared as synthetic fields, as it was discussed in PS30.","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"5eeb069fedb67ef13ea988589d709270c21908dc","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @property"},{"line_number":138,"context_line":"    def attached_ports(self):"},{"line_number":139,"context_line":"        return self.db_obj.attached_ports"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_c92f013d","line":139,"range":{"start_line":137,"start_character":4,"end_line":139,"end_character":41},"in_reply_to":"5a74a57a_f4d1a8ce","updated":"2016-11-29 17:01:59.000000000","message":"Yeah, I explored that option in the PS22 but I had to modify the definition of model class[1] which cascades several changes in other places[2]. I\u0027m going to explore the Ihar\u0027s suggestion\n\n[1] https://review.openstack.org/#/c/307964/22/neutron/db/models/l3.py\n[2] https://review.openstack.org/#/c/307964/22/neutron/db/l3_dvr_db.py@121","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"70da46589531bd934a92ccc121199d23a6bcda85","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        \u0027fixed_ip_address\u0027: obj_fields.IPAddressField(nullable\u003dTrue),"},{"line_number":157,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":158,"context_line":"        \u0027last_known_router_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":159,"context_line":"        \u0027status\u0027: common_types.FloatingIPStatusEnumField(nullable\u003dTrue),"},{"line_number":160,"context_line":"    }"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a77a97e_b58f9e73","line":159,"updated":"2016-11-18 19:22:45.000000000","message":"There is standard_attr_id field in the floating_ips tables in database.","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"e9e85b02ce43c240127bebbb06b83588346a819d","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027port_id\u0027]"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    fields \u003d {"},{"line_number":110,"context_line":"        \u0027router_id\u0027: common_types.UUIDField(),"},{"line_number":111,"context_line":"        \u0027port_id\u0027: common_types.UUIDField(),"},{"line_number":112,"context_line":"        \u0027port_type\u0027: obj_fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":41,"id":"ba5201f7_642d24a7","line":109,"updated":"2017-01-02 16:27:36.000000000","message":"https://review.openstack.org/#/c/307964/31/neutron/objects/router.py@109","commit_id":"ccfd86d49a591ca9d492a6fa384cb87bf43534b4"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"8c2e26a585760cc8a60294418f43cdc9366478fe","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \u0027enable_snat\u0027: obj_fields.BooleanField()"},{"line_number":134,"context_line":"    }"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    @property"},{"line_number":139,"context_line":"    def attached_ports(self):"}],"source_content_type":"text/x-python","patch_set":41,"id":"ba5201f7_b80ec189","line":136,"range":{"start_line":136,"start_character":4,"end_line":136,"end_character":43},"updated":"2017-01-06 05:14:52.000000000","message":"Do we have a way to deal with l3 agents here [1]? I met some issues in [2] when trying to integrate router OVO based on this PS. Not sure if it should be covered by creation phase or integration phase. \n\n[1] https://github.com/openstack/neutron/blob/master/neutron/db/models/l3.py#L62-#L64\n[2] https://github.com/openstack/neutron/blob/master/neutron/db/l3_agentschedulers_db.py#L554","commit_id":"ccfd86d49a591ca9d492a6fa384cb87bf43534b4"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"e9e85b02ce43c240127bebbb06b83588346a819d","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    @property"},{"line_number":139,"context_line":"    def attached_ports(self):"},{"line_number":140,"context_line":"        return self.db_obj.attached_ports"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"ba5201f7_27115e53","line":138,"updated":"2017-01-02 16:27:36.000000000","message":"https://review.openstack.org/#/c/307964/30/neutron/objects/router.py@139","commit_id":"ccfd86d49a591ca9d492a6fa384cb87bf43534b4"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"54ff48c163a5a53b3a2abc7f05881c62d5e365d5","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        \u0027port_id\u0027: common_types.UUIDField(),"},{"line_number":112,"context_line":"        \u0027port_type\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":113,"context_line":"    }"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":117,"context_line":"class Router(base.NeutronDbObject):"}],"source_content_type":"text/x-python","patch_set":51,"id":"1a430d35_c06dc799","line":114,"updated":"2017-02-06 06:35:09.000000000","message":"While working on the RouterPort integration, found the query [1]. According to this, port should be a synthetic field in RouterPort object right?\n\n[1]https://review.openstack.org/#/c/424154/2/neutron/db/l3_db.py@1599","commit_id":"e18b9ed70480762f75e123d58d0fba5fb884a5b8"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"b7a140a42f713169f8a0fc35f5f63832b928eacf","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \u0027enable_snat\u0027: obj_fields.BooleanField()"},{"line_number":134,"context_line":"    }"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    @property"},{"line_number":139,"context_line":"    def attached_ports(self):"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa31d9ce_c60e6f3a","line":136,"range":{"start_line":136,"start_character":0,"end_line":136,"end_character":43},"updated":"2017-02-14 05:04:11.000000000","message":"I\u0027m working on Router OVO integration, and I think port should be a synthetic field of router object, according to \u003chttps://review.openstack.org/#/c/421863/8/neutron/db/l3_db.py@413\u003e\n\nAlso, how about L3 agent?  \n[1] https://github.com/openstack/neutron/blob/master/neutron/db/models/l3.py#L62-#L64\n[2] https://github.com/openstack/neutron/blob/master/neutron/db/l3_agentschedulers_db.py#L577","commit_id":"162431802cecd75de9fed7b664b90217ad241fca"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"b539c4a2902418a1aa29330de81a31870224bb74","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027destination\u0027, \u0027nexthop\u0027]"},{"line_number":40,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027}}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"},{"line_number":43,"context_line":"    def modify_fields_from_db(cls, db_obj):"}],"source_content_type":"text/x-python","patch_set":56,"id":"ffe62b97_74534d3a","line":40,"range":{"start_line":40,"start_character":4,"end_line":40,"end_character":50},"updated":"2017-03-29 07:41:32.000000000","message":"I think we need to add RouterRoute as a synthetic field of Router [1]. \n\n[1] https://github.com/openstack/neutron/blob/master/neutron/db/extraroute_db.py#L45-#L49","commit_id":"70dfe5e490d221e49ba883aa8768de715d7b0e61"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5e6daa0241bdd2a818ac0778383822d968914018","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    db_model \u003d l3.Router"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    fields \u003d {"},{"line_number":124,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"},{"line_number":125,"context_line":"        \u0027project_id\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027name\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":127,"context_line":"        \u0027status\u0027: common_types.RouterStatusEnumField(nullable\u003dTrue),"},{"line_number":128,"context_line":"        \u0027admin_state_up\u0027: obj_fields.BooleanField(nullable\u003dTrue),"},{"line_number":129,"context_line":"        \u0027gw_port_id\u0027: common_types.UUIDField(nullable\u003dTrue),"},{"line_number":130,"context_line":"        \u0027flavor_id\u0027: common_types.UUIDField(nullable\u003dTrue),"},{"line_number":131,"context_line":"        \u0027extra_attributes\u0027: obj_fields.ObjectField("},{"line_number":132,"context_line":"            \u0027RouterExtraAttributes\u0027, nullable\u003dTrue),"},{"line_number":133,"context_line":"        \u0027enable_snat\u0027: obj_fields.BooleanField()"},{"line_number":134,"context_line":"    }"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    synthetic_fields \u003d [\u0027extra_attributes\u0027]"}],"source_content_type":"text/x-python","patch_set":58,"id":"dfeb2761_fb7333b0","line":133,"range":{"start_line":124,"start_character":8,"end_line":133,"end_character":48},"updated":"2017-04-03 16:51:55.000000000","message":"l3_agents ?? synthetic field ?","commit_id":"078a5096ae3d4c8bbdf587b50743784c2fca2ed9"}],"neutron/objects/router/extensions/extraroute.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6acc176888ad535aacffee943abe9ba71634a83f","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":22,"context_line":"class RouterRoute(base.NeutronDbObject):"},{"line_number":23,"context_line":"    # Version 1.0: Initial version"},{"line_number":24,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_5d56ae2a","line":22,"updated":"2016-06-13 14:20:03.000000000","message":"Should we also model Router so that it has a synthetic field that would contain all routes?","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"1dd400fd0f3b8f12a1313d169053b1e1fc8607f0","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":22,"context_line":"class RouterRoute(base.NeutronDbObject):"},{"line_number":23,"context_line":"    # Version 1.0: Initial version"},{"line_number":24,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_8e460cbe","line":22,"in_reply_to":"7aa08908_5d56ae2a","updated":"2016-06-13 20:55:53.000000000","message":"I attempted to implement this a couple of ways but failed. Will be completed in next patchset.","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6acc176888ad535aacffee943abe9ba71634a83f","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027destination\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027nexthop\u0027: obj_fields.StringField(),"},{"line_number":34,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_3d7c82b4","line":32,"range":{"start_line":32,"start_character":23,"end_line":32,"end_character":48},"updated":"2016-06-13 14:20:03.000000000","message":"Doesn\u0027t destination map to some netaddr object? Like IPNetwork?","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"1dd400fd0f3b8f12a1313d169053b1e1fc8607f0","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027destination\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027nexthop\u0027: obj_fields.StringField(),"},{"line_number":34,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_ae6308b0","line":32,"range":{"start_line":32,"start_character":23,"end_line":32,"end_character":48},"in_reply_to":"7aa08908_3d7c82b4","updated":"2016-06-13 20:55:53.000000000","message":"Done","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6acc176888ad535aacffee943abe9ba71634a83f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027destination\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027nexthop\u0027: obj_fields.StringField(),"},{"line_number":34,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_9d4bf686","line":33,"range":{"start_line":33,"start_character":19,"end_line":33,"end_character":44},"updated":"2016-06-13 14:20:03.000000000","message":"ditto","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"1dd400fd0f3b8f12a1313d169053b1e1fc8607f0","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027destination\u0027: obj_fields.StringField(),"},{"line_number":33,"context_line":"        \u0027nexthop\u0027: obj_fields.StringField(),"},{"line_number":34,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_ee5990fe","line":33,"range":{"start_line":33,"start_character":19,"end_line":33,"end_character":44},"in_reply_to":"7aa08908_9d4bf686","updated":"2016-06-13 20:55:53.000000000","message":"Done","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c4ed5f4e40dae23a43c2d08075c88376f1d8cb4d","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027destination\u0027: obj_fields.IPNetwork(),"},{"line_number":33,"context_line":"        \u0027nexthop\u0027: obj_fields.IPNetwork()"},{"line_number":34,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_c66a441a","line":32,"updated":"2016-06-20 15:30:34.000000000","message":"Shouldn\u0027t it be IPNetworkField?","commit_id":"9a609174408e584730992895fb1f095d1a11af32"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c4ed5f4e40dae23a43c2d08075c88376f1d8cb4d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":32,"context_line":"        \u0027destination\u0027: obj_fields.IPNetwork(),"},{"line_number":33,"context_line":"        \u0027nexthop\u0027: obj_fields.IPNetwork()"},{"line_number":34,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_6660b036","line":33,"updated":"2016-06-20 15:30:34.000000000","message":"ditto","commit_id":"9a609174408e584730992895fb1f095d1a11af32"}],"neutron/objects/router/extensions/extraroute_db.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"5e9825cedf90bbe3a029eff44f2f08acc6bfde75","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from neutron.objects import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class RouterRoute(base.NeutronDbObject):"},{"line_number":21,"context_line":"    # Version 1.0: Initial version"},{"line_number":22,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_c1f647f8","line":20,"range":{"start_line":20,"start_character":6,"end_line":20,"end_character":17},"updated":"2016-04-19 18:35:29.000000000","message":"I think that you have to register this class","commit_id":"9cb6dc2a04eb4cdbb3e3be63d27ae46b65a0f884"},{"author":{"_account_id":19591,"name":"Saisrikiran Mudigonda","email":"saisrikiran.mudigonda@intel.com","username":"saisrikiran"},"change_message_id":"5e02a9f51ccd111797425242ee878d137f200a82","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from neutron.objects import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class RouterRoute(base.NeutronDbObject):"},{"line_number":21,"context_line":"    # Version 1.0: Initial version"},{"line_number":22,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_d480c3f9","line":20,"range":{"start_line":20,"start_character":6,"end_line":20,"end_character":17},"in_reply_to":"1a122d0e_c1f647f8","updated":"2016-04-19 19:05:16.000000000","message":"Added @obj_base.VersionedObjectRegistry.register","commit_id":"9cb6dc2a04eb4cdbb3e3be63d27ae46b65a0f884"}],"neutron/objects/router_obj/extensions/extraroute.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d69a89b8b0f590d8c64cb4aede6468afc24dfa","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    # Version 1.0: Initial version"},{"line_number":24,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    db_model \u003d Route"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027destination\u0027, \u0027nexthop\u0027]"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_9fab301d","line":26,"updated":"2016-06-21 12:35:17.000000000","message":"What\u0027s the object for? Is it part of Router object? I think the class is not even a model. It\u0027s used for SubnetRoute, but then, how is it related to Router object?\n\nI think the object should be removed from the patch; the patch should solve one thing, which is the Router object.","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"a6e4cf30cc2477ebebef1a1cc5dba40b1abac8ed","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    # Version 1.0: Initial version"},{"line_number":24,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    db_model \u003d Route"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027destination\u0027, \u0027nexthop\u0027]"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_e39a9262","line":26,"in_reply_to":"5a9d85d2_9fab301d","updated":"2016-06-21 15:29:53.000000000","message":"There seems to be some confusion as to what objects this patch should address. The spec (https://blueprints.launchpad.net/neutron/+spec/adopt-oslo-versioned-objects-for-db) says \"RouterRoute and ExtraRoutes\", the original author went after \"Route, RoutePort and RouterRoutes\", which I attempted to finalize unsuccessfully, now you mention \"Router\". Please clarify which object(s) you want this patch to address.","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"1fc68c13ef6d6b747c1f5712c3cb9612da46ab5c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    # Version 1.0: Initial version"},{"line_number":24,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    db_model \u003d Route"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027destination\u0027, \u0027nexthop\u0027]"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_93a9bb27","line":26,"in_reply_to":"5a9d85d2_e39a9262","updated":"2016-06-27 14:10:49.000000000","message":"I am not sure which spec you refer to. There is no spec for the effort. And I don\u0027t see where the blueprint suggest any specific objects.\n\nBut the general idea is to switch all models used in db code to objects. So the effort is driven by actual code being in the tree. If there is no model, why do you need an object for that?","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"}],"neutron/tests/tools.py":[{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"7c7cbf43ccd18d0fcc0d96d900bd4f9e4704352e","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        return ip"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"def get_ramdom_router_status():"},{"line_number":273,"context_line":"    return random.choice(n_const.VALID_ROUTER_STATUS)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"9a629dbe_77b0718c","line":272,"updated":"2016-11-07 19:36:26.000000000","message":"Typo: Should be \u0027random\u0027.","commit_id":"14ff5a07e6d47acac9f75c1f5050773b488d6caf"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"073d7fa4c1b3dfe4b668164d761d93bbfa98fcde","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        return ip"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"def get_ramdom_router_status():"},{"line_number":273,"context_line":"    return random.choice(n_const.VALID_ROUTER_STATUS)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"9a629dbe_995d37ec","line":272,"in_reply_to":"9a629dbe_77b0718c","updated":"2016-11-07 21:08:09.000000000","message":"Done","commit_id":"14ff5a07e6d47acac9f75c1f5050773b488d6caf"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"bfe9cc8ab5234a09fcb439b88e163a9ad4956aaf","unresolved":false,"context_lines":[{"line_number":307,"context_line":"    return random.choice(list(constants.IP_PROTOCOL_MAP.keys()))"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"def get_random_port_binding_statuses():"},{"line_number":311,"context_line":"    return random.choice(n_const.PORT_BINDING_STATUSES)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"3a461143_32a69d53","line":310,"range":{"start_line":310,"start_character":34,"end_line":310,"end_character":36},"updated":"2017-01-28 17:43:22.000000000","message":"nit: should this be the singular \"get_random_port_binding_status\"? It seem\u0027s so, the other get_random_*\u0027s are singular.","commit_id":"a5bb9148e2e033d9de81e4c89ea6747b339bcc2b"}],"neutron/tests/unit/objects/router/extensions/test_extraroute.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6acc176888ad535aacffee943abe9ba71634a83f","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def setUp(self):"},{"line_number":58,"context_line":"        super(RouterRoutePortBindingDbObjectTestCase, self).setUp()"},{"line_number":59,"context_line":"        "},{"line_number":60,"context_line":"        self._create_test_network()"},{"line_number":61,"context_line":"        self._create_test_port(self._network)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_fd231abb","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":8},"updated":"2016-06-13 14:20:03.000000000","message":"nit: please remove that red thingy","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"1dd400fd0f3b8f12a1313d169053b1e1fc8607f0","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def setUp(self):"},{"line_number":58,"context_line":"        super(RouterRoutePortBindingDbObjectTestCase, self).setUp()"},{"line_number":59,"context_line":"        "},{"line_number":60,"context_line":"        self._create_test_network()"},{"line_number":61,"context_line":"        self._create_test_port(self._network)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_6e8ac065","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":8},"in_reply_to":"7aa08908_fd231abb","updated":"2016-06-13 20:55:53.000000000","message":"Done","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6acc176888ad535aacffee943abe9ba71634a83f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                                      router_id\u003dobj_route.id,"},{"line_number":69,"context_line":"                                      port_id\u003dself._port.id,"},{"line_number":70,"context_line":"                                      port_type\u003d\u0027\u0027)"},{"line_number":71,"context_line":"                                    # constants.DEVICE_OWNER_DHCP)"},{"line_number":72,"context_line":"        obj_routeport.create()"},{"line_number":73,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields):"},{"line_number":74,"context_line":"            obj[\u0027router_id\u0027] \u003d obj_route.id"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_9d19368b","line":71,"range":{"start_line":71,"start_character":36,"end_line":71,"end_character":66},"updated":"2016-06-13 14:20:03.000000000","message":"?","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"1dd400fd0f3b8f12a1313d169053b1e1fc8607f0","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                                      router_id\u003dobj_route.id,"},{"line_number":69,"context_line":"                                      port_id\u003dself._port.id,"},{"line_number":70,"context_line":"                                      port_type\u003d\u0027\u0027)"},{"line_number":71,"context_line":"                                    # constants.DEVICE_OWNER_DHCP)"},{"line_number":72,"context_line":"        obj_routeport.create()"},{"line_number":73,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields):"},{"line_number":74,"context_line":"            obj[\u0027router_id\u0027] \u003d obj_route.id"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_0ef05cfc","line":71,"range":{"start_line":71,"start_character":36,"end_line":71,"end_character":66},"in_reply_to":"7aa08908_9d19368b","updated":"2016-06-13 20:55:53.000000000","message":"Done","commit_id":"b1bfd496ea85210371034faec99e296774d5f6fe"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d69a89b8b0f590d8c64cb4aede6468afc24dfa","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        obj_route \u003d Router(self.context, id\u003duuidutils.generate_uuid())"},{"line_number":67,"context_line":"        obj_route.create()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        obj_routeport \u003d RouterPort(self.context,"},{"line_number":70,"context_line":"                                          id\u003duuidutils.generate_uuid(),"},{"line_number":71,"context_line":"                                          router_id\u003dobj_route.id,"},{"line_number":72,"context_line":"                                          port_id\u003dself._port.id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_924fa7bc","line":69,"updated":"2016-06-21 12:35:17.000000000","message":"you attempt to create the port here, but then your test cases will try to do the same with the same values, triggering duplicate db errors for you. Please remove the object creation from here.","commit_id":"9b7e24c3c325fdde34c831619dbd6f4284939c31"}],"neutron/tests/unit/objects/test_base.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"200206fe7ea20434135e4627b56ff1fa5d76854f","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        # TODO(ihrachys) remove obj_fields since they duplicate self.objs"},{"line_number":466,"context_line":"        self.obj_fields \u003d [self._test_class.modify_fields_from_db(db_obj)"},{"line_number":467,"context_line":"                           for db_obj in self.db_objs]"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        self.objs \u003d ["},{"line_number":470,"context_line":"            self._test_class(self.context, **fields)"},{"line_number":471,"context_line":"            for fields in self.obj_fields"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a95cdbc_08e41839","line":468,"updated":"2016-10-06 16:47:15.000000000","message":"why adding a line here ?","commit_id":"6cdc10194caa85cd003a7f9ac89f035bcc846db5"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"301f2d9ef76d321520b0a887d7fcf997bb492353","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        # TODO(ihrachys) remove obj_fields since they duplicate self.objs"},{"line_number":466,"context_line":"        self.obj_fields \u003d [self._test_class.modify_fields_from_db(db_obj)"},{"line_number":467,"context_line":"                           for db_obj in self.db_objs]"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        self.objs \u003d ["},{"line_number":470,"context_line":"            self._test_class(self.context, **fields)"},{"line_number":471,"context_line":"            for fields in self.obj_fields"}],"source_content_type":"text/x-python","patch_set":22,"id":"da6895a0_6086bf14","line":468,"in_reply_to":"1a95cdbc_08e41839","updated":"2016-10-24 09:53:23.000000000","message":"Done","commit_id":"6cdc10194caa85cd003a7f9ac89f035bcc846db5"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"fe3f9805805776cc165e271bc2324f465374668f","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        # TODO(ihrachys) remove obj_fields since they duplicate self.objs"},{"line_number":467,"context_line":"        self.obj_fields \u003d [self._test_class.modify_fields_from_db(db_obj)"},{"line_number":468,"context_line":"                           for db_obj in self.db_objs]"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        self.objs \u003d ["},{"line_number":471,"context_line":"            self._test_class(self.context, **fields)"},{"line_number":472,"context_line":"            for fields in self.obj_fields"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_51734180","line":469,"updated":"2016-10-24 21:37:35.000000000","message":"extra line ??","commit_id":"6af2aedcc4c61ed7fd11d206a4d20f57526fdd11"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"7c7cbf43ccd18d0fcc0d96d900bd4f9e4704352e","unresolved":false,"context_lines":[{"line_number":417,"context_line":"    common_types.IpProtocolEnumField: tools.get_random_ip_protocol,"},{"line_number":418,"context_line":"    common_types.PortRangeField: tools.get_random_port,"},{"line_number":419,"context_line":"    common_types.SetOfUUIDsField: get_set_of_random_uuids,"},{"line_number":420,"context_line":"    common_types.RouterStatusEnumField: tools.get_ramdom_router_status,"},{"line_number":421,"context_line":"}"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"9a629dbe_b7812992","line":420,"updated":"2016-11-07 19:36:26.000000000","message":"Typo: \u0027random\u0027.","commit_id":"14ff5a07e6d47acac9f75c1f5050773b488d6caf"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"073d7fa4c1b3dfe4b668164d761d93bbfa98fcde","unresolved":false,"context_lines":[{"line_number":417,"context_line":"    common_types.IpProtocolEnumField: tools.get_random_ip_protocol,"},{"line_number":418,"context_line":"    common_types.PortRangeField: tools.get_random_port,"},{"line_number":419,"context_line":"    common_types.SetOfUUIDsField: get_set_of_random_uuids,"},{"line_number":420,"context_line":"    common_types.RouterStatusEnumField: tools.get_ramdom_router_status,"},{"line_number":421,"context_line":"}"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"9a629dbe_190127af","line":420,"in_reply_to":"9a629dbe_b7812992","updated":"2016-11-07 21:08:09.000000000","message":"Done","commit_id":"14ff5a07e6d47acac9f75c1f5050773b488d6caf"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"20c8c56e1b1e5fe299b6831d1539c1e38f059855","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from neutron.common import utils"},{"line_number":32,"context_line":"from neutron import context"},{"line_number":33,"context_line":"from neutron.db import db_base_plugin_v2"},{"line_number":34,"context_line":"from neutron.db import flavors_db"},{"line_number":35,"context_line":"from neutron.db import model_base"},{"line_number":36,"context_line":"from neutron.db.models import external_net as ext_net_model"},{"line_number":37,"context_line":"from neutron.db.models import l3 as l3_model"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_45c0d87b","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":33},"updated":"2016-11-16 13:55:02.000000000","message":"Please use relocated model: neutron/db/model/flavor.py","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from neutron.common import utils"},{"line_number":32,"context_line":"from neutron import context"},{"line_number":33,"context_line":"from neutron.db import db_base_plugin_v2"},{"line_number":34,"context_line":"from neutron.db import flavors_db"},{"line_number":35,"context_line":"from neutron.db import model_base"},{"line_number":36,"context_line":"from neutron.db.models import external_net as ext_net_model"},{"line_number":37,"context_line":"from neutron.db.models import l3 as l3_model"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_dda3d84d","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":33},"in_reply_to":"7a77a97e_45c0d87b","updated":"2016-11-16 22:08:24.000000000","message":"Done","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"    def _create_test_port(self, network):"},{"line_number":1212,"context_line":"        self._port \u003d self._create_port(network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":1213,"context_line":""},{"line_number":1214,"context_line":"    def _create_test_flavor(self):"},{"line_number":1215,"context_line":"        name \u003d \"test-flavor-%s\" % tools.get_random_string(4)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"        self._flavor \u003d obj_db_api.create_object(self.context,"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_4ee82911","line":1214,"updated":"2016-11-15 16:45:34.000000000","message":"I don\u0027t think it\u0027s required to have a flavour to test floating-ip/router objects. I suggest we skip that change.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"20c8c56e1b1e5fe299b6831d1539c1e38f059855","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"    def _create_test_port(self, network):"},{"line_number":1212,"context_line":"        self._port \u003d self._create_port(network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":1213,"context_line":""},{"line_number":1214,"context_line":"    def _create_test_flavor(self):"},{"line_number":1215,"context_line":"        name \u003d \"test-flavor-%s\" % tools.get_random_string(4)"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"        self._flavor \u003d obj_db_api.create_object(self.context,"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_e513a40b","line":1214,"in_reply_to":"7a77a97e_4ee82911","updated":"2016-11-16 13:55:02.000000000","message":"Floating IP has foreign key contain to flavors.id, and since we are generating all fields, the flavor ID need to exist. If flavor_id would be None, then creating flavor is not required.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":1334,"context_line":"        obj.create()"},{"line_number":1335,"context_line":""},{"line_number":1336,"context_line":"        for field in remove_timestamps_from_fields(get_obj_db_fields(obj)):"},{"line_number":1337,"context_line":"            if not isinstance(obj[field], list):"},{"line_number":1338,"context_line":"                filters \u003d {field: [obj[field]]}"},{"line_number":1339,"context_line":"            else:"},{"line_number":1340,"context_line":"                filters \u003d {field: obj[field]}"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_8ed08155","line":1337,"updated":"2016-11-15 16:45:34.000000000","message":"it should be the same. why the change?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":1334,"context_line":"        obj.create()"},{"line_number":1335,"context_line":""},{"line_number":1336,"context_line":"        for field in remove_timestamps_from_fields(get_obj_db_fields(obj)):"},{"line_number":1337,"context_line":"            if not isinstance(obj[field], list):"},{"line_number":1338,"context_line":"                filters \u003d {field: [obj[field]]}"},{"line_number":1339,"context_line":"            else:"},{"line_number":1340,"context_line":"                filters \u003d {field: obj[field]}"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_78757296","line":1337,"in_reply_to":"7a77a97e_8ed08155","updated":"2016-11-16 22:08:24.000000000","message":"I got different values[1] and for me, it didn\u0027t make sense to me use different variables for testing filters(we can use whatever was used for the creation), anyway I can revert this change in the next PS.\n\n[1] http://paste.openstack.org/show/589524/","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"828f86ace27b921217f030ff8d6e0023e5c2438f","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"        attrs \u003d {"},{"line_number":1211,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1212,"context_line":"        }"},{"line_number":1213,"context_line":"        # TODO(sindhu): Replace with the router object once its ready"},{"line_number":1214,"context_line":"        self._router \u003d router.Router(self.context, **attrs)"},{"line_number":1215,"context_line":"        self._router.create()"},{"line_number":1216,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_94687489","line":1213,"range":{"start_line":1213,"start_character":8,"end_line":1213,"end_character":69},"updated":"2016-11-24 12:06:48.000000000","message":"After replacing, the comment can be removed.","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"1109a6023f22536c3d7af43a2bff39c84d79ae5c","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"        attrs \u003d {"},{"line_number":1211,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1212,"context_line":"        }"},{"line_number":1213,"context_line":"        # TODO(sindhu): Replace with the router object once its ready"},{"line_number":1214,"context_line":"        self._router \u003d router.Router(self.context, **attrs)"},{"line_number":1215,"context_line":"        self._router.create()"},{"line_number":1216,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_dd9a23c5","line":1213,"range":{"start_line":1213,"start_character":8,"end_line":1213,"end_character":69},"in_reply_to":"5a74a57a_5ef009ca","updated":"2016-11-30 16:55:30.000000000","message":"I meant, this comment can be removed in this PS. :)","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"5eeb069fedb67ef13ea988589d709270c21908dc","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"        attrs \u003d {"},{"line_number":1211,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1212,"context_line":"        }"},{"line_number":1213,"context_line":"        # TODO(sindhu): Replace with the router object once its ready"},{"line_number":1214,"context_line":"        self._router \u003d router.Router(self.context, **attrs)"},{"line_number":1215,"context_line":"        self._router.create()"},{"line_number":1216,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_5ef009ca","line":1213,"range":{"start_line":1213,"start_character":8,"end_line":1213,"end_character":69},"in_reply_to":"5a74a57a_94687489","updated":"2016-11-29 17:01:59.000000000","message":"This PS is replacing that method","commit_id":"9a01ed4065c608937b8b2800bbf616b1d79d9012"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"3e81d79189f9f6b20729d9fea062cc090f7b1e7d","unresolved":false,"context_lines":[{"line_number":1300,"context_line":"        attrs \u003d {"},{"line_number":1301,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1302,"context_line":"        }"},{"line_number":1303,"context_line":"        # TODO(sindhu): Replace with the router object once its ready"},{"line_number":1304,"context_line":"        self._router \u003d router.Router(self.context, **attrs)"},{"line_number":1305,"context_line":"        self._router.create()"},{"line_number":1306,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"ba5201f7_1c5f7273","line":1303,"range":{"start_line":1303,"start_character":8,"end_line":1303,"end_character":69},"updated":"2016-12-29 18:16:52.000000000","message":"nit: This can be removed now as router object is being used in the next line","commit_id":"ccfd86d49a591ca9d492a6fa384cb87bf43534b4"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"b127e7d1170701f4000bdc61c8ca23e92b210de0","unresolved":false,"context_lines":[{"line_number":452,"context_line":"    obj_fields.ListOfStringsField: tools.get_random_string_list,"},{"line_number":453,"context_line":"    obj_fields.ObjectField: lambda: None,"},{"line_number":454,"context_line":"    obj_fields.StringField: lambda: helpers.get_random_string(10),"},{"line_number":455,"context_line":"    common_types.RouterStatusEnumField: tools.get_random_router_status,"},{"line_number":456,"context_line":"    common_types.FloatingIPStatusEnumField: tools.get_random_floatingip_status,"},{"line_number":457,"context_line":"}"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7a3c09a3_4b1f6f09","line":456,"range":{"start_line":455,"start_character":4,"end_line":456,"end_character":79},"updated":"2017-01-19 00:34:20.000000000","message":"this should be in alphabetical order","commit_id":"f66ee1301484b07f4129b6570380dc3143f9964b"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"b127e7d1170701f4000bdc61c8ca23e92b210de0","unresolved":false,"context_lines":[{"line_number":1351,"context_line":"        attrs \u003d {"},{"line_number":1352,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1353,"context_line":"        }"},{"line_number":1354,"context_line":"        # TODO(sindhu): Replace with the router object once its ready"},{"line_number":1355,"context_line":"        self._router \u003d router.Router(self.context, **attrs)"},{"line_number":1356,"context_line":"        self._router.create()"},{"line_number":1357,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7a3c09a3_4bcdaf85","line":1354,"range":{"start_line":1354,"start_character":9,"end_line":1354,"end_character":69},"updated":"2017-01-19 00:34:20.000000000","message":"this comment must be removed","commit_id":"f66ee1301484b07f4129b6570380dc3143f9964b"}],"neutron/tests/unit/objects/test_objects.py":[{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"36294ddde8a904ea7ef3035b580d0030f57f590e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    \u0027DNSNameServer\u0027: \u00271.0-bf87a85327e2d812d1666ede99d9918b\u0027,"},{"line_number":36,"context_line":"    \u0027ExtraDhcpOpt\u0027: \u00271.0-632f689cbeb36328995a7aed1d0a78d3\u0027,"},{"line_number":37,"context_line":"    \u0027FloatingIPDNS\u0027: \u00271.0-ee3db848500fa1825235f701828c06d5\u0027,"},{"line_number":38,"context_line":"    \u0027FloatingIP\u0027: \u00271.0-ea69515cfe08b5efc0600e6446efe64f\u0027,"},{"line_number":39,"context_line":"    \u0027IPAllocation\u0027: \u00271.0-47251b4c6d45c3b5feb0297fe5c461f2\u0027,"},{"line_number":40,"context_line":"    \u0027IPAllocationPool\u0027: \u00271.0-371016a6480ed0b4299319cb46d9215d\u0027,"},{"line_number":41,"context_line":"    \u0027Network\u0027: \u00271.0-f2f6308f79731a767b92b26b0f4f3849\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_a5ada8ea","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":57},"updated":"2016-12-06 22:46:46.000000000","message":"FloatingIP will come before FloatingIPDNS","commit_id":"d18b8549d5223385aa423d519c95dc1995ae7125"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"36294ddde8a904ea7ef3035b580d0030f57f590e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    \u0027RouterExtraAttributes\u0027: \u00271.0-ef8d61ae2864f0ec9af0ab7939cab318\u0027,"},{"line_number":59,"context_line":"    \u0027Router\u0027: \u00271.0-ba60171e82e7fd010f81b1e1624df515\u0027,"},{"line_number":60,"context_line":"    \u0027RouterRoute\u0027: \u00271.0-07fc5337c801fb8c6ccfbcc5afb45907\u0027,"},{"line_number":61,"context_line":"    \u0027RouterPort\u0027: \u00271.0-c8c8f499bcdd59186fcd83f323106908\u0027,"},{"line_number":62,"context_line":"    \u0027SecurityGroup\u0027: \u00271.0-e26b90c409b31fd2e3c6fcec402ac0b9\u0027,"},{"line_number":63,"context_line":"    \u0027SecurityGroupRule\u0027: \u00271.0-e9b8dace9d48b936c62ad40fe1f339d5\u0027,"},{"line_number":64,"context_line":"    \u0027SegmentHostMapping\u0027: \u00271.0-521597cf82ead26217c3bd10738f00f0\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_657e306b","line":61,"range":{"start_line":61,"start_character":2,"end_line":61,"end_character":57},"updated":"2016-12-06 22:46:46.000000000","message":"RouterPort will come after Router as alphabetical order needs to be maintained","commit_id":"d18b8549d5223385aa423d519c95dc1995ae7125"}],"neutron/tests/unit/objects/test_router.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"fe3f9805805776cc165e271bc2324f465374668f","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            obj[\u0027flavor_id\u0027] \u003d self._flavor[\u0027id\u0027]"},{"line_number":66,"context_line":"        for db_obj in self.db_objs:"},{"line_number":67,"context_line":"            for port in db_obj[\u0027attached_ports\u0027]:"},{"line_number":68,"context_line":"                self._create_test_port(self._network)"},{"line_number":69,"context_line":"                port[\u0027port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":70,"context_line":"                port[\u0027router_id\u0027] \u003d self.id"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da6895a0_b1681d89","line":68,"range":{"start_line":68,"start_character":16,"end_line":68,"end_character":53},"updated":"2016-10-24 21:37:35.000000000","message":"I would suggest using the helper method that return port instead of overwriting self._port all the times.","commit_id":"6af2aedcc4c61ed7fd11d206a4d20f57526fdd11"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"7c7cbf43ccd18d0fcc0d96d900bd4f9e4704352e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    _test_class \u003d router.Router"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def setUp(self):"},{"line_number":82,"context_line":"        print(\u0027Setting up router\u0027)"},{"line_number":83,"context_line":"        super(RouterDbObjectTestCase, self).setUp()"},{"line_number":84,"context_line":"        print(\u0027out of super()\u0027)"},{"line_number":85,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a629dbe_972265b8","line":82,"updated":"2016-11-07 19:36:26.000000000","message":"I think the print statements are leftover here from debugging. Please remove them.","commit_id":"14ff5a07e6d47acac9f75c1f5050773b488d6caf"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"073d7fa4c1b3dfe4b668164d761d93bbfa98fcde","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    _test_class \u003d router.Router"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def setUp(self):"},{"line_number":82,"context_line":"        print(\u0027Setting up router\u0027)"},{"line_number":83,"context_line":"        super(RouterDbObjectTestCase, self).setUp()"},{"line_number":84,"context_line":"        print(\u0027out of super()\u0027)"},{"line_number":85,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a629dbe_99e29702","line":82,"in_reply_to":"9a629dbe_972265b8","updated":"2016-11-07 21:08:09.000000000","message":"Done","commit_id":"14ff5a07e6d47acac9f75c1f5050773b488d6caf"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from neutron.tests.unit import testlib_api"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class RouterTestMixin(obj_test_base.BaseDbObjectTestCase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def setUp(self):"},{"line_number":25,"context_line":"        super(RouterTestMixin, self).setUp()"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_6e1ec5bb","line":22,"range":{"start_line":22,"start_character":6,"end_line":22,"end_character":21},"updated":"2016-11-15 16:45:34.000000000","message":"Once we stop creating the flavour (see comments below), I don\u0027t think there is any justification to keep that mixin. It\u0027s better to duplicate two lines (26-27) in each test class than have the mixin/multiple inheritance magic injected into the code.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        super(RouterTestMixin, self).setUp()"},{"line_number":26,"context_line":"        self._create_test_network()"},{"line_number":27,"context_line":"        self._create_test_port(self._network)"},{"line_number":28,"context_line":"        self._create_test_flavor()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class RouterRouteIfaceObjectTestCase("}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_0e21d14d","line":28,"updated":"2016-11-15 16:45:34.000000000","message":"I believe there is no *need* to create one.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        super(RouterTestMixin, self).setUp()"},{"line_number":26,"context_line":"        self._create_test_network()"},{"line_number":27,"context_line":"        self._create_test_port(self._network)"},{"line_number":28,"context_line":"        self._create_test_flavor()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class RouterRouteIfaceObjectTestCase("}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_6dd204d4","line":28,"in_reply_to":"7a77a97e_0e21d14d","updated":"2016-11-16 22:08:24.000000000","message":"It\u0027s not need it but the current implementation of the test framework generates a random ID for UUIDField instead of leaving it as None.  I\u0027ll try to modify this behavior.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"e6847b3a87ed510e6a06d7c996e0a974eb88511e","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        super(RouterTestMixin, self).setUp()"},{"line_number":26,"context_line":"        self._create_test_network()"},{"line_number":27,"context_line":"        self._create_test_port(self._network)"},{"line_number":28,"context_line":"        self._create_test_flavor()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class RouterRouteIfaceObjectTestCase("}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_bfec06f4","line":28,"in_reply_to":"7a77a97e_6dd204d4","updated":"2016-11-18 00:04:07.000000000","message":"I tried to modify the way that field\u0027s values are generated[1]\n\n    @classmethod\n    def generate_object_keys(cls, obj_cls, field_names\u003dNone):\n        if field_names is None:\n            field_names \u003d obj_cls.primary_keys\n        keys \u003d {}\n        for field in field_names:\n            field_obj \u003d obj_cls.fields[field]\n            keys[field] \u003d None\n            if not field_obj.nullable:\n                generator \u003d FIELD_TYPE_VALUE_GENERATOR_MAP[type(field_obj)]\n                keys[field] \u003d generator()\n        return keys\n\nBut it was failing with similar errors:\n\noslo_db.exception.DBReferenceError: (sqlite3.IntegrityError) FOREIGN KEY constraint failed [SQL: \u0027INSERT INTO routers (project_id, id, name, status, admin_state_up, gw_port_id, flavor_id, standard_attr_id, enable_snat) VALUES (?, ?, ?, \n?, ?, ?, ?, ?, ?)\u0027] [parameters: (\u0027rbzlpkbtqb\u0027, \u002760151b90-853b-4748-85ec-73a49011a4cc\u0027, \u0027cxkqdlvvuw\u0027, \u0027ACTIVE\u0027, 0, \u0027ad3082ad-acdf-4873-90f5-dd15107e46c2\u0027, \u0027ae7844fe-96a3-4130-a0d7-b297a9a759af\u0027, 3, 1)]\n\n[1] https://github.com/electrocucaracha/neutron/blob/master/neutron/tests/unit/objects/test_base.py#L364-L372","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def setUp(self):"},{"line_number":82,"context_line":"        super(RouterDbObjectTestCase, self).setUp()"},{"line_number":83,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":84,"context_line":"            obj[\u0027gw_port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":85,"context_line":"            obj[\u0027flavor_id\u0027] \u003d self._flavor[\u0027id\u0027]"},{"line_number":86,"context_line":"        for db_obj in self.db_objs:"},{"line_number":87,"context_line":"            for port in db_obj[\u0027attached_ports\u0027]:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_ae09bd97","line":84,"updated":"2016-11-15 16:45:34.000000000","message":"it\u0027s nullable, so why do we need to set it?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        super(RouterDbObjectTestCase, self).setUp()"},{"line_number":83,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":84,"context_line":"            obj[\u0027gw_port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":85,"context_line":"            obj[\u0027flavor_id\u0027] \u003d self._flavor[\u0027id\u0027]"},{"line_number":86,"context_line":"        for db_obj in self.db_objs:"},{"line_number":87,"context_line":"            for port in db_obj[\u0027attached_ports\u0027]:"},{"line_number":88,"context_line":"                self._create_test_port(self._network)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_cefef96a","line":85,"updated":"2016-11-15 16:45:34.000000000","message":"same here","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"20c8c56e1b1e5fe299b6831d1539c1e38f059855","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        super(RouterDbObjectTestCase, self).setUp()"},{"line_number":83,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":84,"context_line":"            obj[\u0027gw_port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":85,"context_line":"            obj[\u0027flavor_id\u0027] \u003d self._flavor[\u0027id\u0027]"},{"line_number":86,"context_line":"        for db_obj in self.db_objs:"},{"line_number":87,"context_line":"            for port in db_obj[\u0027attached_ports\u0027]:"},{"line_number":88,"context_line":"                self._create_test_port(self._network)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_c5b148e3","line":85,"in_reply_to":"7a77a97e_cefef96a","updated":"2016-11-16 13:55:02.000000000","message":"why flavor_id should be nullable? It will be generated isn\u0027t it?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            obj[\u0027gw_port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":85,"context_line":"            obj[\u0027flavor_id\u0027] \u003d self._flavor[\u0027id\u0027]"},{"line_number":86,"context_line":"        for db_obj in self.db_objs:"},{"line_number":87,"context_line":"            for port in db_obj[\u0027attached_ports\u0027]:"},{"line_number":88,"context_line":"                self._create_test_port(self._network)"},{"line_number":89,"context_line":"                port[\u0027port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":90,"context_line":"                port[\u0027router_id\u0027] \u003d self.id"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_4ef3c99e","line":87,"updated":"2016-11-15 16:45:34.000000000","message":"can\u0027t we have no attached ports? if so, why do we need to mess with it here?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    _test_class \u003d router.RouterPort"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class RouterPortDbObjectTestCase(RouterTestMixin, testlib_api.SqlTestCase):"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    _test_class \u003d router.RouterPort"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_ae9a9d12","line":98,"range":{"start_line":98,"start_character":33,"end_line":98,"end_character":48},"updated":"2016-11-15 16:45:34.000000000","message":"seems like the only thing you really need from the mixin is test network creation. Why not just create it here and avoid the complexity of multiple inheritance?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def setUp(self):"},{"line_number":103,"context_line":"        super(RouterPortDbObjectTestCase, self).setUp()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        router_db_obj \u003d self.get_random_fields(router.Router)"},{"line_number":106,"context_line":"        router_fields \u003d router.Router.modify_fields_from_db("},{"line_number":107,"context_line":"            router_db_obj)"},{"line_number":108,"context_line":"        self._router \u003d router.Router("},{"line_number":109,"context_line":"            self.context,"},{"line_number":110,"context_line":"            **obj_test_base.remove_timestamps_from_fields(router_fields))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self._router.gw_port_id \u003d self._port[\u0027id\u0027]"},{"line_number":113,"context_line":"        self._router.flavor_id \u003d self._flavor[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_ce5a7983","line":110,"range":{"start_line":105,"start_character":8,"end_line":110,"end_character":73},"updated":"2016-11-15 16:45:34.000000000","message":"does it suggest a \u0027_create_test_router\u0027 function in base class?","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7f7b943794c3eb7b0b8abb9bb3b78d0aa70d4b94","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def setUp(self):"},{"line_number":103,"context_line":"        super(RouterPortDbObjectTestCase, self).setUp()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        router_db_obj \u003d self.get_random_fields(router.Router)"},{"line_number":106,"context_line":"        router_fields \u003d router.Router.modify_fields_from_db("},{"line_number":107,"context_line":"            router_db_obj)"},{"line_number":108,"context_line":"        self._router \u003d router.Router("},{"line_number":109,"context_line":"            self.context,"},{"line_number":110,"context_line":"            **obj_test_base.remove_timestamps_from_fields(router_fields))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self._router.gw_port_id \u003d self._port[\u0027id\u0027]"},{"line_number":113,"context_line":"        self._router.flavor_id \u003d self._flavor[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_6d276464","line":110,"range":{"start_line":105,"start_character":8,"end_line":110,"end_character":73},"in_reply_to":"7a77a97e_ce5a7983","updated":"2016-11-16 22:08:24.000000000","message":"I didn\u0027t notice the Sindu\u0027s patch added this method, I\u0027m going to reuse it.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self._router \u003d router.Router("},{"line_number":109,"context_line":"            self.context,"},{"line_number":110,"context_line":"            **obj_test_base.remove_timestamps_from_fields(router_fields))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self._router.gw_port_id \u003d self._port[\u0027id\u0027]"},{"line_number":113,"context_line":"        self._router.flavor_id \u003d self._flavor[\u0027id\u0027]"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        self._router.create()"},{"line_number":116,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_4e4ae9c6","line":113,"range":{"start_line":111,"start_character":0,"end_line":113,"end_character":51},"updated":"2016-11-15 16:45:34.000000000","message":"not needed","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        super(FloatingIPDbObjectTestCase, self).setUp()"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        router_db_obj \u003d self.get_random_fields(router.Router)"},{"line_number":135,"context_line":"        router_fields \u003d router.Router.modify_fields_from_db("},{"line_number":136,"context_line":"            router_db_obj)"},{"line_number":137,"context_line":"        self._router \u003d router.Router("},{"line_number":138,"context_line":"            self.context,"},{"line_number":139,"context_line":"            **obj_test_base.remove_timestamps_from_fields(router_fields))"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        self._router.gw_port_id \u003d self._port[\u0027id\u0027]"},{"line_number":142,"context_line":"        self._router.flavor_id \u003d self._flavor[\u0027id\u0027]"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        self._router.create()"},{"line_number":145,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":146,"context_line":"            obj[\u0027floating_port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":147,"context_line":"            obj[\u0027fixed_port_id\u0027] \u003d self._port[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_eebbb570","line":144,"range":{"start_line":135,"start_character":8,"end_line":144,"end_character":29},"updated":"2016-11-15 16:45:34.000000000","message":"see, you duplicate code here, so _create_test_router is definitely worth a consideration.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        self._router.create()"},{"line_number":145,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":146,"context_line":"            obj[\u0027floating_port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":147,"context_line":"            obj[\u0027fixed_port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":148,"context_line":"            obj[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_0e78f1c3","line":147,"range":{"start_line":146,"start_character":12,"end_line":147,"end_character":51},"updated":"2016-11-15 16:45:34.000000000","message":"that does not seem very realistic, having the same port for both fixed and floating ip. I suggest you just avoid setting fixed_port_id at all, because floating IPs can be not associated.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3c634cf89f6d0cda828f6e5bba84a4325568248","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":146,"context_line":"            obj[\u0027floating_port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":147,"context_line":"            obj[\u0027fixed_port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":148,"context_line":"            obj[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_2e5ccd4a","line":148,"updated":"2016-11-15 16:45:34.000000000","message":"I don\u0027t think a floating IP always has a router attached, so I suggest we remove the line too.","commit_id":"6d8f485a10b569bfe689b249ed7d6419726b61c6"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"36294ddde8a904ea7ef3035b580d0030f57f590e","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self._create_test_port(self._network)"},{"line_number":76,"context_line":"        self._create_test_flavor()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":79,"context_line":"            obj[\u0027gw_port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":80,"context_line":"            obj[\u0027flavor_id\u0027] \u003d self._flavor[\u0027id\u0027]"},{"line_number":81,"context_line":"        for db_obj in self.db_objs:"},{"line_number":82,"context_line":"            for port in db_obj[\u0027attached_ports\u0027]:"},{"line_number":83,"context_line":"                self._create_test_port(self._network)"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_85d42cec","line":80,"range":{"start_line":78,"start_character":0,"end_line":80,"end_character":49},"updated":"2016-12-06 22:46:46.000000000","message":"i believe this can be updated to\nself.update_obj_fields({\u0027\u0027gw_port_id\u0027\u0027:self._port[\u0027id\u0027]}) \nself.update_obj_fields({\u0027\u0027flavor_id\u0027\u0027:self._flavor[\u0027id\u0027]}) \n\nupdate_obj_fields() methods exists in  [1]. Usage can be found in [2]\n[1] - https://github.com/openstack/neutron/blob/master/neutron/tests/unit/objects/test_base.py#L505-#L538\n[2] https://github.com/openstack/neutron/blob/master/neutron/tests/unit/objects/test_provisioning_blocks.py#L32","commit_id":"d18b8549d5223385aa423d519c95dc1995ae7125"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"32a85563d028c081a07ca941760049fdb2dd58f4","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self._create_test_port(self._network)"},{"line_number":76,"context_line":"        self._create_test_flavor()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":79,"context_line":"            obj[\u0027gw_port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":80,"context_line":"            obj[\u0027flavor_id\u0027] \u003d self._flavor[\u0027id\u0027]"},{"line_number":81,"context_line":"        for db_obj in self.db_objs:"},{"line_number":82,"context_line":"            for port in db_obj[\u0027attached_ports\u0027]:"},{"line_number":83,"context_line":"                self._create_test_port(self._network)"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_5446da21","line":80,"range":{"start_line":78,"start_character":0,"end_line":80,"end_character":49},"in_reply_to":"3a71b18c_85d42cec","updated":"2016-12-08 21:35:04.000000000","message":"+1","commit_id":"d18b8549d5223385aa423d519c95dc1995ae7125"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"32a85563d028c081a07ca941760049fdb2dd58f4","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self._create_test_router()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":105,"context_line":"            self._create_test_port(self._network)"},{"line_number":106,"context_line":"            obj[\u0027router_id\u0027] \u003d self._router[\u0027id\u0027]"},{"line_number":107,"context_line":"            obj[\u0027port_id\u0027] \u003d self._port[\u0027id\u0027]"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_546dfa97","line":105,"updated":"2016-12-08 21:35:04.000000000","message":"Ditto","commit_id":"d18b8549d5223385aa423d519c95dc1995ae7125"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"32a85563d028c081a07ca941760049fdb2dd58f4","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        super(FloatingIPDbObjectTestCase, self).setUp()"},{"line_number":122,"context_line":"        self._create_test_router()"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":125,"context_line":"            self._create_test_network()"},{"line_number":126,"context_line":"            self._create_test_port(self._network)"},{"line_number":127,"context_line":"            obj[\u0027floating_port_id\u0027] \u003d self._port[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_946792b6","line":124,"updated":"2016-12-08 21:35:04.000000000","message":"Ditto","commit_id":"d18b8549d5223385aa423d519c95dc1995ae7125"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a39853c4c356e48150159e2f309c03fe65dfe5f5","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self._create_test_port(self._network)"},{"line_number":76,"context_line":"        self._create_test_flavor()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        # def getter():"},{"line_number":79,"context_line":"        #     self._create_test_port(self._network)"},{"line_number":80,"context_line":"        #     return self._port[\u0027id\u0027]"},{"line_number":81,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":35,"id":"1a6eadb0_016d4904","line":78,"updated":"2016-12-12 20:56:40.000000000","message":"I am assuming you forgot to remove this or probably include this and remove lines 88-95?","commit_id":"560013cfc4cbf91e6f63a0952d8d95649cf52e4e"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a39853c4c356e48150159e2f309c03fe65dfe5f5","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def setUp(self):"},{"line_number":109,"context_line":"        super(RouterPortDbObjectTestCase, self).setUp()"},{"line_number":110,"context_line":"        self._create_test_network()"},{"line_number":111,"context_line":"        self._create_test_port(self._network)"},{"line_number":112,"context_line":"        self._create_test_router()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        def getter():"}],"source_content_type":"text/x-python","patch_set":35,"id":"1a6eadb0_418901ca","line":111,"updated":"2016-12-12 20:56:40.000000000","message":"I think this is redundant, you are already creating test_port in the getter method.","commit_id":"560013cfc4cbf91e6f63a0952d8d95649cf52e4e"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"f06b22489eab7c7a9cc30e3b5f0f49a2af468680","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self._create_test_port(self._network)"},{"line_number":74,"context_line":"        self._create_test_flavor()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        def getter():"},{"line_number":77,"context_line":"            self._create_test_port(self._network)"},{"line_number":78,"context_line":"            return self._port[\u0027id\u0027]"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1a6eadb0_d8bf84f9","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":21},"updated":"2016-12-13 22:43:52.000000000","message":"this method is not being used anywhere","commit_id":"d4a2c0ea747e6d83560c7c38383d052fc1e9bb3b"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"f06b22489eab7c7a9cc30e3b5f0f49a2af468680","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        # TODO(sshank): Attached ports is missing."},{"line_number":81,"context_line":"        self.update_obj_fields("},{"line_number":82,"context_line":"            {\u0027gw_port_id\u0027: self._port.id,"},{"line_number":83,"context_line":"             \u0027flavor_id\u0027: self._flavor.id})"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1a6eadb0_7324d3ae","line":82,"range":{"start_line":82,"start_character":13,"end_line":82,"end_character":41},"updated":"2016-12-13 22:43:52.000000000","message":"this seems like a place where getter method can be used\n\u0027gw_port_id\u0027: getter","commit_id":"d4a2c0ea747e6d83560c7c38383d052fc1e9bb3b"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"f06b22489eab7c7a9cc30e3b5f0f49a2af468680","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            {\u0027floating_port_id\u0027: getter,"},{"line_number":131,"context_line":"             \u0027fixed_port_id\u0027: getter,"},{"line_number":132,"context_line":"             \u0027router_id\u0027: self._router.id}"},{"line_number":133,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a6eadb0_b3abcbd5","line":133,"range":{"start_line":133,"start_character":7,"end_line":133,"end_character":9},"updated":"2016-12-13 22:43:52.000000000","message":"nit: can be moved to previous line","commit_id":"d4a2c0ea747e6d83560c7c38383d052fc1e9bb3b"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5e6daa0241bdd2a818ac0778383822d968914018","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def setUp(self):"},{"line_number":71,"context_line":"        super(RouterDbObjectTestCase, self).setUp()"},{"line_number":72,"context_line":"        self._create_test_network()"},{"line_number":73,"context_line":"        self._create_test_port(self._network)"},{"line_number":74,"context_line":"        self._create_test_flavor()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        def getter():"}],"source_content_type":"text/x-python","patch_set":58,"id":"dfeb2761_3b663b53","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":45},"updated":"2017-04-03 16:51:55.000000000","message":"why creating port twice ?","commit_id":"078a5096ae3d4c8bbdf587b50743784c2fca2ed9"}]}
