)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a43ee6935f74720bb7c561b071efd7c72137c8e9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"OVO for Router Route"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces and implements OVO for"},{"line_number":10,"context_line":"router route."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Id16ec54b54034f8e3187551ce0dd7eafc80d0fd7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7a8ec9b2_46142643","line":9,"range":{"start_line":9,"start_character":22,"end_line":9,"end_character":37},"updated":"2016-09-21 18:20:36.000000000","message":"This patch is only introducing the OVO class","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"380a6e28dd6ee907a895a5e0c3b4de9bf04770e7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"OVO for Router Route"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces and implements OVO for"},{"line_number":10,"context_line":"router route."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Id16ec54b54034f8e3187551ce0dd7eafc80d0fd7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5a8bc5a2_746ea5ca","line":9,"range":{"start_line":9,"start_character":22,"end_line":9,"end_character":37},"in_reply_to":"7a8ec9b2_46142643","updated":"2016-09-22 18:19:25.000000000","message":"Done","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a43ee6935f74720bb7c561b071efd7c72137c8e9","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Id16ec54b54034f8e3187551ce0dd7eafc80d0fd7"},{"line_number":13,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"},{"line_number":14,"context_line":"Partial-Bug: #1541928"},{"line_number":15,"context_line":"Depends-On: I6b71ab19cc7184ecbcde8808b95ef838379f0a39"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7a8ec9b2_3b5f3742","line":14,"updated":"2016-09-21 18:20:36.000000000","message":"Partial-Bug tag is not required","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"380a6e28dd6ee907a895a5e0c3b4de9bf04770e7","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Id16ec54b54034f8e3187551ce0dd7eafc80d0fd7"},{"line_number":13,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"},{"line_number":14,"context_line":"Partial-Bug: #1541928"},{"line_number":15,"context_line":"Depends-On: I6b71ab19cc7184ecbcde8808b95ef838379f0a39"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5a8bc5a2_947331b1","line":14,"in_reply_to":"7a8ec9b2_3b5f3742","updated":"2016-09-22 18:19:25.000000000","message":"Done","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a43ee6935f74720bb7c561b071efd7c72137c8e9","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Change-Id: Id16ec54b54034f8e3187551ce0dd7eafc80d0fd7"},{"line_number":13,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"},{"line_number":14,"context_line":"Partial-Bug: #1541928"},{"line_number":15,"context_line":"Depends-On: I6b71ab19cc7184ecbcde8808b95ef838379f0a39"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7a8ec9b2_e6045216","line":15,"updated":"2016-09-21 18:20:36.000000000","message":"Depends-On tag is only required when the patch has a dependency on other repo, so this is not required","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"380a6e28dd6ee907a895a5e0c3b4de9bf04770e7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Change-Id: Id16ec54b54034f8e3187551ce0dd7eafc80d0fd7"},{"line_number":13,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"},{"line_number":14,"context_line":"Partial-Bug: #1541928"},{"line_number":15,"context_line":"Depends-On: I6b71ab19cc7184ecbcde8808b95ef838379f0a39"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5a8bc5a2_b4682dbc","line":15,"in_reply_to":"7a8ec9b2_e6045216","updated":"2016-09-22 18:19:25.000000000","message":"Done","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"}],"neutron/objects/router.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"374faec3784590179aab48c671bba96c2bde3fca","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    fields \u003d {"},{"line_number":32,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":33,"context_line":"        \u0027destination\u0027: common_types.IPNetworkField(),"},{"line_number":34,"context_line":"        \u0027nexthop\u0027: obj_fields.IPAddressField()"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027destination\u0027, \u0027nexthop\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_04476f77","line":34,"updated":"2016-09-26 14:32:46.000000000","message":"doesn\u0027t have to provide \"router\" as synthetic field?","commit_id":"00f837a24f2d2a3d3eda396ba4fdf629e9f70576"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"690bc9b242d34119c853d4d97073a3cdbda4e667","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    fields \u003d {"},{"line_number":32,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":33,"context_line":"        \u0027destination\u0027: common_types.IPNetworkField(),"},{"line_number":34,"context_line":"        \u0027nexthop\u0027: obj_fields.IPAddressField()"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027destination\u0027, \u0027nexthop\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_a2678ae7","line":34,"in_reply_to":"5a8bc5a2_04476f77","updated":"2016-09-26 15:09:31.000000000","message":"It is being handled by the \u0027router_id\u0027 foreign key.","commit_id":"00f837a24f2d2a3d3eda396ba4fdf629e9f70576"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"3d94fb028ef70cb2446ea104274e52477589d0a8","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027destination\u0027, \u0027nexthop\u0027]"},{"line_number":38,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027}}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":44,"context_line":"            result[\u0027destination\u0027] \u003d utils.AuthenticIPNetwork("},{"line_number":45,"context_line":"                result[\u0027destination\u0027])"},{"line_number":46,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":47,"context_line":"            result[\u0027nexthop\u0027] \u003d netaddr.IPAddress(result[\u0027nexthop\u0027])"},{"line_number":48,"context_line":"        return result"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":52,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_to_db(fields)"},{"line_number":53,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":54,"context_line":"            result[\u0027destination\u0027] \u003d cls.filter_to_str(result[\u0027destination\u0027])"},{"line_number":55,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":56,"context_line":"            result[\u0027nexthop\u0027] \u003d cls.filter_to_str(result[\u0027nexthop\u0027])"},{"line_number":57,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_e36474e6","line":57,"range":{"start_line":40,"start_character":0,"end_line":57,"end_character":21},"updated":"2016-10-06 15:36:48.000000000","message":"IMHO, it should be nice to have Route base class with those methods.","commit_id":"dd4d5baf7d50693699aaac0fe660d496cd8f62f4"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"c29060c7b02e4808953ef267ce5178568e1e1938","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027destination\u0027, \u0027nexthop\u0027]"},{"line_number":38,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027}}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":44,"context_line":"            result[\u0027destination\u0027] \u003d utils.AuthenticIPNetwork("},{"line_number":45,"context_line":"                result[\u0027destination\u0027])"},{"line_number":46,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":47,"context_line":"            result[\u0027nexthop\u0027] \u003d netaddr.IPAddress(result[\u0027nexthop\u0027])"},{"line_number":48,"context_line":"        return result"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":52,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_to_db(fields)"},{"line_number":53,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":54,"context_line":"            result[\u0027destination\u0027] \u003d cls.filter_to_str(result[\u0027destination\u0027])"},{"line_number":55,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":56,"context_line":"            result[\u0027nexthop\u0027] \u003d cls.filter_to_str(result[\u0027nexthop\u0027])"},{"line_number":57,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_841ee309","line":57,"range":{"start_line":40,"start_character":0,"end_line":57,"end_character":21},"in_reply_to":"1a95cdbc_26e997b7","updated":"2016-10-10 14:27:34.000000000","message":"What is an example for reusing modify_fields... methods in other objects?","commit_id":"dd4d5baf7d50693699aaac0fe660d496cd8f62f4"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"9efb08b213b93a5b5c83e1b6a895341a07bfb157","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027destination\u0027, \u0027nexthop\u0027]"},{"line_number":38,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027}}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":44,"context_line":"            result[\u0027destination\u0027] \u003d utils.AuthenticIPNetwork("},{"line_number":45,"context_line":"                result[\u0027destination\u0027])"},{"line_number":46,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":47,"context_line":"            result[\u0027nexthop\u0027] \u003d netaddr.IPAddress(result[\u0027nexthop\u0027])"},{"line_number":48,"context_line":"        return result"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":52,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_to_db(fields)"},{"line_number":53,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":54,"context_line":"            result[\u0027destination\u0027] \u003d cls.filter_to_str(result[\u0027destination\u0027])"},{"line_number":55,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":56,"context_line":"            result[\u0027nexthop\u0027] \u003d cls.filter_to_str(result[\u0027nexthop\u0027])"},{"line_number":57,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_f85de347","line":57,"range":{"start_line":40,"start_character":0,"end_line":57,"end_character":21},"in_reply_to":"1a95cdbc_841ee309","updated":"2016-10-13 14:13:27.000000000","message":"I\u0027ve noticed that SubnetRoute and RouterRoute Model classes inherit from Route class, so my suggestion is to do something similar like we did for ports[1] having a Route class that shares this functionality.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/objects/ports.py#L54-L69","commit_id":"dd4d5baf7d50693699aaac0fe660d496cd8f62f4"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"bb02673ac724902a5dd5a71abc6ff161ae4c0aa3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027destination\u0027, \u0027nexthop\u0027]"},{"line_number":38,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027}}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":42,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_from_db(db_obj)"},{"line_number":43,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":44,"context_line":"            result[\u0027destination\u0027] \u003d utils.AuthenticIPNetwork("},{"line_number":45,"context_line":"                result[\u0027destination\u0027])"},{"line_number":46,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":47,"context_line":"            result[\u0027nexthop\u0027] \u003d netaddr.IPAddress(result[\u0027nexthop\u0027])"},{"line_number":48,"context_line":"        return result"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":52,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_to_db(fields)"},{"line_number":53,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":54,"context_line":"            result[\u0027destination\u0027] \u003d cls.filter_to_str(result[\u0027destination\u0027])"},{"line_number":55,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":56,"context_line":"            result[\u0027nexthop\u0027] \u003d cls.filter_to_str(result[\u0027nexthop\u0027])"},{"line_number":57,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_26e997b7","line":57,"range":{"start_line":40,"start_character":0,"end_line":57,"end_character":21},"in_reply_to":"1a95cdbc_e36474e6","updated":"2016-10-10 14:01:34.000000000","message":"Hi Victor, Router OVO is still in progress I think.  Is it ok to move once that work is done?","commit_id":"dd4d5baf7d50693699aaac0fe660d496cd8f62f4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7081a0f0934eb34a71a82ae806dc1b319f0dca12","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import netaddr"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_versionedobjects import base as obj_base"},{"line_number":16,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_5bd5e919","line":14,"updated":"2016-10-13 14:23:04.000000000","message":"nit: that empty line is not needed, since both netaddr and oslo.* are 3parties for neutron.","commit_id":"bb9b61090208060f6e0f0e0ef792e07ea2e0f091"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7081a0f0934eb34a71a82ae806dc1b319f0dca12","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    primary_keys \u003d [\u0027router_id\u0027, \u0027destination\u0027, \u0027nexthop\u0027]"},{"line_number":38,"context_line":"    foreign_keys \u003d {\u0027Router\u0027: {\u0027router_id\u0027: \u0027id\u0027}}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def modify_fields_from_db(cls, db_obj):"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_fb3ebd26","line":38,"updated":"2016-10-13 14:23:04.000000000","message":"not strictly needed because we don\u0027t have Router object in the tree yet, but ok.","commit_id":"bb9b61090208060f6e0f0e0ef792e07ea2e0f091"}],"neutron/objects/routerroute.py":[{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"4d6be9687f9b298cc531f476f5a304b3096329d0","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    fields \u003d {"},{"line_number":29,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":30,"context_line":"        \u0027destination\u0027: obj_fields.StringField(),"},{"line_number":31,"context_line":"        \u0027nexthop\u0027: obj_fields.StringField(),"},{"line_number":32,"context_line":"    }"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_3c81e7c3","line":30,"updated":"2016-08-29 22:16:44.000000000","message":"Should \u0027destination\u0027 and \u0027next hop\u0027 be IPAddressField() instead of StringField()? \nIf yes, then modify_fields_from/to_db should be added.","commit_id":"ade0e4dffa5f5d1f5e134395b9eba4a5995d5c90"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"b4ff133bef486dd3e2f831545584774642ad1662","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    fields \u003d {"},{"line_number":29,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":30,"context_line":"        \u0027destination\u0027: obj_fields.StringField(),"},{"line_number":31,"context_line":"        \u0027nexthop\u0027: obj_fields.StringField(),"},{"line_number":32,"context_line":"    }"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_7f961d40","line":30,"in_reply_to":"fa7ab95a_3c81e7c3","updated":"2016-09-15 21:35:30.000000000","message":"Done","commit_id":"ade0e4dffa5f5d1f5e134395b9eba4a5995d5c90"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a43ee6935f74720bb7c561b071efd7c72137c8e9","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":8,"id":"7a8ec9b2_865f0e0e","line":1,"updated":"2016-09-21 18:20:36.000000000","message":"Maybe this object needs to be included in router.py[1]\n\n[1] https://review.openstack.org/#/c/307964/20/neutron/objects/router.py","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"380a6e28dd6ee907a895a5e0c3b4de9bf04770e7","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":8,"id":"5a8bc5a2_94aa51d3","line":1,"in_reply_to":"5a8bc5a2_fcaac084","updated":"2016-09-22 18:19:25.000000000","message":"Done","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"c5d30792e9de16f07fcb69704f4cb41dc266294a","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":8,"id":"7a8ec9b2_c1b660db","line":1,"in_reply_to":"7a8ec9b2_865f0e0e","updated":"2016-09-21 18:42:44.000000000","message":"+1\nThat seems inline with whats been on elsewhere for OVO. For example neutron.objects.subnet.py","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"380a6e28dd6ee907a895a5e0c3b4de9bf04770e7","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":8,"id":"5a8bc5a2_54a0c9f4","line":1,"in_reply_to":"7a8ec9b2_865f0e0e","updated":"2016-09-22 18:19:25.000000000","message":"Done","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"faaa4fe929f5d8bf313799f487571ba996668aa4","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":8,"id":"5a8bc5a2_fcaac084","line":1,"in_reply_to":"7a8ec9b2_c1b660db","updated":"2016-09-22 09:12:29.000000000","message":"+1\nThis can be included in neutron/objects/router.py","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"380a6e28dd6ee907a895a5e0c3b4de9bf04770e7","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":8,"id":"5a8bc5a2_74a5c502","line":1,"in_reply_to":"7a8ec9b2_c1b660db","updated":"2016-09-22 18:19:25.000000000","message":"Done","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"faaa4fe929f5d8bf313799f487571ba996668aa4","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    fields \u003d {"},{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":31,"context_line":"        \u0027destination\u0027: obj_fields.IPNetworkField(),"},{"line_number":32,"context_line":"        \u0027nexthop\u0027: obj_fields.IPAddressField()"},{"line_number":33,"context_line":"    }"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_7c4950d0","line":31,"range":{"start_line":31,"start_character":23,"end_line":31,"end_character":50},"updated":"2016-09-22 09:12:29.000000000","message":"Please use common_types.IPNetworkField(), as in Subnet OVO[1]\n\n[1] https://github.com/openstack/neutron/blob/9.0.0.0b3/neutron/objects/subnet.py#L69","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"380a6e28dd6ee907a895a5e0c3b4de9bf04770e7","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    fields \u003d {"},{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":31,"context_line":"        \u0027destination\u0027: obj_fields.IPNetworkField(),"},{"line_number":32,"context_line":"        \u0027nexthop\u0027: obj_fields.IPAddressField()"},{"line_number":33,"context_line":"    }"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_14b7213a","line":31,"range":{"start_line":31,"start_character":23,"end_line":31,"end_character":50},"in_reply_to":"5a8bc5a2_1b303701","updated":"2016-09-22 18:19:25.000000000","message":"Done","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"49b8b009fe8dd03bfe710ec570d070192d146c4f","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    fields \u003d {"},{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":31,"context_line":"        \u0027destination\u0027: obj_fields.IPNetworkField(),"},{"line_number":32,"context_line":"        \u0027nexthop\u0027: obj_fields.IPAddressField()"},{"line_number":33,"context_line":"    }"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_1b303701","line":31,"range":{"start_line":31,"start_character":23,"end_line":31,"end_character":50},"in_reply_to":"5a8bc5a2_7c4950d0","updated":"2016-09-22 16:07:27.000000000","message":"+1","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"380a6e28dd6ee907a895a5e0c3b4de9bf04770e7","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    fields \u003d {"},{"line_number":30,"context_line":"        \u0027router_id\u0027: obj_fields.UUIDField(),"},{"line_number":31,"context_line":"        \u0027destination\u0027: obj_fields.IPNetworkField(),"},{"line_number":32,"context_line":"        \u0027nexthop\u0027: obj_fields.IPAddressField()"},{"line_number":33,"context_line":"    }"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_d4acd9ef","line":31,"range":{"start_line":31,"start_character":23,"end_line":31,"end_character":50},"in_reply_to":"5a8bc5a2_7c4950d0","updated":"2016-09-22 18:19:25.000000000","message":"Done","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"faaa4fe929f5d8bf313799f487571ba996668aa4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":40,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_from_db(db_obj)"},{"line_number":41,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":42,"context_line":"            result[\u0027destination\u0027] \u003d netaddr.IPNetwork(result[\u0027destination\u0027])"},{"line_number":43,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":44,"context_line":"            result[\u0027nexthop\u0027] \u003d netaddr.IPAddress(result[\u0027nexthop\u0027])"},{"line_number":45,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_fc0ba07b","line":42,"updated":"2016-09-22 09:12:29.000000000","message":"Similar to SubnetRoute, use utils.AuthenticIPNetwork() [1]\n\n[1] https://github.com/openstack/neutron/blob/9.0.0.0b3/neutron/objects/subnet.py#L78","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"380a6e28dd6ee907a895a5e0c3b4de9bf04770e7","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":40,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_from_db(db_obj)"},{"line_number":41,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":42,"context_line":"            result[\u0027destination\u0027] \u003d netaddr.IPNetwork(result[\u0027destination\u0027])"},{"line_number":43,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":44,"context_line":"            result[\u0027nexthop\u0027] \u003d netaddr.IPAddress(result[\u0027nexthop\u0027])"},{"line_number":45,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_5487e960","line":42,"in_reply_to":"5a8bc5a2_3b2df3a7","updated":"2016-09-22 18:19:25.000000000","message":"Done","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"49b8b009fe8dd03bfe710ec570d070192d146c4f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":40,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_from_db(db_obj)"},{"line_number":41,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":42,"context_line":"            result[\u0027destination\u0027] \u003d netaddr.IPNetwork(result[\u0027destination\u0027])"},{"line_number":43,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":44,"context_line":"            result[\u0027nexthop\u0027] \u003d netaddr.IPAddress(result[\u0027nexthop\u0027])"},{"line_number":45,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_3b2df3a7","line":42,"in_reply_to":"5a8bc5a2_fc0ba07b","updated":"2016-09-22 16:07:27.000000000","message":"+1","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"380a6e28dd6ee907a895a5e0c3b4de9bf04770e7","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":40,"context_line":"        result \u003d super(RouterRoute, cls).modify_fields_from_db(db_obj)"},{"line_number":41,"context_line":"        if \u0027destination\u0027 in result:"},{"line_number":42,"context_line":"            result[\u0027destination\u0027] \u003d netaddr.IPNetwork(result[\u0027destination\u0027])"},{"line_number":43,"context_line":"        if \u0027nexthop\u0027 in result:"},{"line_number":44,"context_line":"            result[\u0027nexthop\u0027] \u003d netaddr.IPAddress(result[\u0027nexthop\u0027])"},{"line_number":45,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_34825d53","line":42,"in_reply_to":"5a8bc5a2_fc0ba07b","updated":"2016-09-22 18:19:25.000000000","message":"Done","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"}],"neutron/tests/unit/objects/test_base.py":[{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"49b8b009fe8dd03bfe710ec570d070192d146c4f","unresolved":false,"context_lines":[{"line_number":1100,"context_line":"            \u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":1101,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1102,"context_line":"        }"},{"line_number":1103,"context_line":"        self._router \u003d obj_db_api.create_object(self.context,"},{"line_number":1104,"context_line":"                                                l3_db.Router,"},{"line_number":1105,"context_line":"                                                attrs)"},{"line_number":1106,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_3b7fb3ab","line":1103,"updated":"2016-09-22 16:07:27.000000000","message":"Add a note to replace this with actual object once the object implementation is complete","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"380a6e28dd6ee907a895a5e0c3b4de9bf04770e7","unresolved":false,"context_lines":[{"line_number":1100,"context_line":"            \u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":1101,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1102,"context_line":"        }"},{"line_number":1103,"context_line":"        self._router \u003d obj_db_api.create_object(self.context,"},{"line_number":1104,"context_line":"                                                l3_db.Router,"},{"line_number":1105,"context_line":"                                                attrs)"},{"line_number":1106,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a8bc5a2_9481714d","line":1103,"in_reply_to":"5a8bc5a2_3b7fb3ab","updated":"2016-09-22 18:19:25.000000000","message":"Done","commit_id":"0fc1384b633ee08384b840b19930da5f092d9b25"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"580836c74aa88ce8399c49ef0b5f3a2ad76e4d87","unresolved":false,"context_lines":[{"line_number":1097,"context_line":""},{"line_number":1098,"context_line":"    def _create_test_router(self):"},{"line_number":1099,"context_line":"        attrs \u003d {"},{"line_number":1100,"context_line":"            \u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":1101,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1102,"context_line":"        }"},{"line_number":1103,"context_line":"        # TODO(sindhu): Replace with the router object once its ready"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a98d1f4_8c83f355","line":1100,"updated":"2016-09-29 21:09:40.000000000","message":"The \u0027id\u0027 field is taken care of by the create_object(). It\u0027s not needed here.","commit_id":"fb28d6896472787e289c6bd751ef61e379f532d8"},{"author":{"_account_id":22524,"name":"Mohit Malik","email":"mohit.malik@intel.com","username":"mmalik4"},"change_message_id":"fe755b336d451d05fb06b7e981352722dedb60b5","unresolved":false,"context_lines":[{"line_number":1097,"context_line":""},{"line_number":1098,"context_line":"    def _create_test_router(self):"},{"line_number":1099,"context_line":"        attrs \u003d {"},{"line_number":1100,"context_line":"            \u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":1101,"context_line":"            \u0027name\u0027: \u0027test_router\u0027,"},{"line_number":1102,"context_line":"        }"},{"line_number":1103,"context_line":"        # TODO(sindhu): Replace with the router object once its ready"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a98d1f4_f34c4b44","line":1100,"in_reply_to":"3a98d1f4_8c83f355","updated":"2016-09-30 01:52:38.000000000","message":"Fixed","commit_id":"fb28d6896472787e289c6bd751ef61e379f532d8"}]}
