)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"fe1d51cfd6467e7c7c6f18632af443b095da644a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Manjeet Singh Bhatia \u003cmanjeet.s.bhatia@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-29 01:10:11 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Refactor Router Db Models"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As we have started oslo versioned objects implementations. There"},{"line_number":10,"context_line":"would be issue of cyclic import while implementation for objects"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bacf61ea_2ecad66e","line":7,"updated":"2016-07-29 01:44:35.000000000","message":"\"Relocate L3 DB Models\"","commit_id":"3f5702cae1699e0c1fa50bdd8f4d2fab6175b89a"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"42f5f08425e6354512fe9855da617284afafc619","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Manjeet Singh Bhatia \u003cmanjeet.s.bhatia@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-29 01:10:11 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Refactor Router Db Models"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As we have started oslo versioned objects implementations. There"},{"line_number":10,"context_line":"would be issue of cyclic import while implementation for objects"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bacf61ea_a62706b5","line":7,"in_reply_to":"bacf61ea_2ecad66e","updated":"2016-07-29 05:52:41.000000000","message":"Done","commit_id":"3f5702cae1699e0c1fa50bdd8f4d2fab6175b89a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bff3e5ee5106b50da5b1d901e5e824dc5cc1998b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"As we have started oslo versioned objects implementations. There"},{"line_number":10,"context_line":"would be issue of cyclic import while implementation for objects"},{"line_number":11,"context_line":"which have db models definitions and mixins in same file. This patch"},{"line_number":12,"context_line":"will refactor routers models as discussed in [1]."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"For example DNS models and some queries are in same file [2]. for object"},{"line_number":15,"context_line":"implementation I have separate models definitions and mixins where"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"5a8bc5a2_b7430fae","line":12,"range":{"start_line":12,"start_character":5,"end_line":12,"end_character":13},"updated":"2016-09-27 13:30:29.000000000","message":"move","commit_id":"68e4d474638a821529ac71130a85896e69d6cc03"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7416bdfdb6c818a858e0fbd33a05a42d4704a9b6","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As we have started oslo versioned objects implementations. There"},{"line_number":10,"context_line":"would be issue of cyclic import while implementation for objects"},{"line_number":11,"context_line":"which have db models definitions and mixins in same file. This patch"},{"line_number":12,"context_line":"will move routers models as discussed in [1]."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"For example DNS models and some queries are in same file [2]. for object"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":36,"id":"5a8bc5a2_da527f12","line":11,"range":{"start_line":11,"start_character":14,"end_line":11,"end_character":20},"updated":"2016-09-27 13:50:29.000000000","message":"nit: s/models/model","commit_id":"105e9946dd3a571f16b4a6a5b4d0fdb8c39816ee"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7416bdfdb6c818a858e0fbd33a05a42d4704a9b6","unresolved":false,"context_lines":[{"line_number":12,"context_line":"will move routers models as discussed in [1]."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"For example DNS models and some queries are in same file [2]. for object"},{"line_number":15,"context_line":"implementation I have separate models definitions and mixins where"},{"line_number":16,"context_line":"queries were being done [3]."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[1]. https://www.mail-archive.com/openstack-dev@lists.openstack.org/msg88910.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":36,"id":"5a8bc5a2_5a3f4fb3","line":15,"range":{"start_line":15,"start_character":31,"end_line":15,"end_character":37},"updated":"2016-09-27 13:50:29.000000000","message":"nit: s/models/model","commit_id":"105e9946dd3a571f16b4a6a5b4d0fdb8c39816ee"}],"neutron/common/utils.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cffb6adb6f6bccbe583479c11edcb7096b92300b","unresolved":false,"context_lines":[{"line_number":695,"context_line":"    return details % args"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"def _deprecate_class(new_class, old_class, old_module, message\u003dNone,"},{"line_number":699,"context_line":"                     version\u003dNone, removal_version\u003dNone):"},{"line_number":700,"context_line":"    if not inspect.isclass(new_class):"},{"line_number":701,"context_line":"        raise TypeError(\"Unexpected class %s does not exists\" % new_class)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_0cd9b722","line":698,"range":{"start_line":698,"start_character":4,"end_line":698,"end_character":20},"updated":"2016-08-04 14:00:55.000000000","message":"This method should be public because it is used from outside of the module.","commit_id":"739d43632633b09d1325758525c845b8d35edcfe"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"129085abbdc01b3ab8a0991d9ae75c25362b92f1","unresolved":false,"context_lines":[{"line_number":695,"context_line":"    return details % args"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"def _deprecate_class(new_class, old_class, old_module, message\u003dNone,"},{"line_number":699,"context_line":"                     version\u003dNone, removal_version\u003dNone):"},{"line_number":700,"context_line":"    if not inspect.isclass(new_class):"},{"line_number":701,"context_line":"        raise TypeError(\"Unexpected class %s does not exists\" % new_class)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_78b642dd","line":698,"range":{"start_line":698,"start_character":21,"end_line":698,"end_character":41},"updated":"2016-08-04 07:24:23.000000000","message":"some are strings, some are classes. Can we rename parameters to make it explicit? Please also add a docstring describing the function, including its params.","commit_id":"739d43632633b09d1325758525c845b8d35edcfe"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"129085abbdc01b3ab8a0991d9ae75c25362b92f1","unresolved":false,"context_lines":[{"line_number":695,"context_line":"    return details % args"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"def _deprecate_class(new_class, old_class, old_module, message\u003dNone,"},{"line_number":699,"context_line":"                     version\u003dNone, removal_version\u003dNone):"},{"line_number":700,"context_line":"    if not inspect.isclass(new_class):"},{"line_number":701,"context_line":"        raise TypeError(\"Unexpected class %s does not exists\" % new_class)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_d8e2ce00","line":698,"updated":"2016-08-04 07:24:23.000000000","message":"the helper should be renamed into moved_model.","commit_id":"739d43632633b09d1325758525c845b8d35edcfe"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"129085abbdc01b3ab8a0991d9ae75c25362b92f1","unresolved":false,"context_lines":[{"line_number":698,"context_line":"def _deprecate_class(new_class, old_class, old_module, message\u003dNone,"},{"line_number":699,"context_line":"                     version\u003dNone, removal_version\u003dNone):"},{"line_number":700,"context_line":"    if not inspect.isclass(new_class):"},{"line_number":701,"context_line":"        raise TypeError(\"Unexpected class %s does not exists\" % new_class)"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    old_name \u003d \".\".join((old_module, old_class))"},{"line_number":704,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_d8c92e7b","line":701,"range":{"start_line":701,"start_character":45,"end_line":701,"end_character":60},"updated":"2016-08-04 07:24:23.000000000","message":"does not exist","commit_id":"739d43632633b09d1325758525c845b8d35edcfe"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"129085abbdc01b3ab8a0991d9ae75c25362b92f1","unresolved":false,"context_lines":[{"line_number":703,"context_line":"    old_name \u003d \".\".join((old_module, old_class))"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"    prefix \u003d \"Class \u0027%s\u0027 has moved to \u0027%s\u0027\" % (old_name, new_class)"},{"line_number":706,"context_line":"    out_message \u003d debtcollector._utils.generate_message("},{"line_number":707,"context_line":"        prefix, message\u003dmessage, version\u003dversion,"},{"line_number":708,"context_line":"        removal_version\u003dremoval_version)"},{"line_number":709,"context_line":"    debtcollector._utils.deprecation(out_message)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_3804cabe","line":706,"updated":"2016-08-04 07:24:23.000000000","message":"We should not access internal modules from debtcollector. Can we achieve that in some other way? Isn\u0027t there a public API to issue and format warnings?","commit_id":"739d43632633b09d1325758525c845b8d35edcfe"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cffb6adb6f6bccbe583479c11edcb7096b92300b","unresolved":false,"context_lines":[{"line_number":703,"context_line":"    old_name \u003d \".\".join((old_module, old_class))"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"    prefix \u003d \"Class \u0027%s\u0027 has moved to \u0027%s\u0027\" % (old_name, new_class)"},{"line_number":706,"context_line":"    out_message \u003d debtcollector._utils.generate_message("},{"line_number":707,"context_line":"        prefix, message\u003dmessage, version\u003dversion,"},{"line_number":708,"context_line":"        removal_version\u003dremoval_version)"},{"line_number":709,"context_line":"    debtcollector._utils.deprecation(out_message)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_eca703a5","line":706,"in_reply_to":"bacf61ea_3804cabe","updated":"2016-08-04 14:00:55.000000000","message":"Can\u0027t we use debtcollector.deprecate()?\n\nhttp://docs.openstack.org/developer/debtcollector/examples.html#deprecating-anything-else","commit_id":"739d43632633b09d1325758525c845b8d35edcfe"}],"neutron/db/external_net_db.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"7416bdfdb6c818a858e0fbd33a05a42d4704a9b6","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                       rbac.action \u003d\u003d \u0027access_as_external\u0027,"},{"line_number":262,"context_line":"                       rbac.target_tenant !\u003d \u0027*\u0027))"},{"line_number":263,"context_line":"            router \u003d router.filter("},{"line_number":264,"context_line":"                ~l3_models.Router.tenant_id.in_(tenants_with_entries))"},{"line_number":265,"context_line":"            if new_tenant:"},{"line_number":266,"context_line":"                # if this is an update we also need to ignore any router"},{"line_number":267,"context_line":"                # interfaces that belong to the new target."}],"source_content_type":"text/x-python","patch_set":36,"id":"5a8bc5a2_5a94af89","line":264,"range":{"start_line":264,"start_character":16,"end_line":264,"end_character":17},"updated":"2016-09-27 13:50:29.000000000","message":"I noticed that this character was present in previous version, I just wondering if this has special functionality in this method.","commit_id":"105e9946dd3a571f16b4a6a5b4d0fdb8c39816ee"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"cdf8aa5916f3be3a523a1765f9c09c5d23cda820","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                       rbac.action \u003d\u003d \u0027access_as_external\u0027,"},{"line_number":262,"context_line":"                       rbac.target_tenant !\u003d \u0027*\u0027))"},{"line_number":263,"context_line":"            router \u003d router.filter("},{"line_number":264,"context_line":"                ~l3_models.Router.tenant_id.in_(tenants_with_entries))"},{"line_number":265,"context_line":"            if new_tenant:"},{"line_number":266,"context_line":"                # if this is an update we also need to ignore any router"},{"line_number":267,"context_line":"                # interfaces that belong to the new target."}],"source_content_type":"text/x-python","patch_set":36,"id":"5a8bc5a2_e6e6c2ae","line":264,"range":{"start_line":264,"start_character":16,"end_line":264,"end_character":17},"in_reply_to":"5a8bc5a2_5a94af89","updated":"2016-09-27 14:57:54.000000000","message":"In python it\u0027s the bitwise NOT operator, so from this sqlalchemy generates the \u0027NOT IN\u0027 sql filter.","commit_id":"105e9946dd3a571f16b4a6a5b4d0fdb8c39816ee"}],"neutron/db/l3_db.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"0e83d6bfb40208f2a63bfbaf52a4ea56ee5d20c1","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from neutron.common import rpc as n_rpc"},{"line_number":38,"context_line":"from neutron.common import utils"},{"line_number":39,"context_line":"from neutron.db import common_db_mixin"},{"line_number":40,"context_line":"from neutron.db.models.l3_models import FloatingIP"},{"line_number":41,"context_line":"from neutron.db.models.l3_models import Router"},{"line_number":42,"context_line":"from neutron.db.models.l3_models import RouterPort"},{"line_number":43,"context_line":"from neutron.db import models_v2"},{"line_number":44,"context_line":"from neutron.db import standardattrdescription_db as st_attr"},{"line_number":45,"context_line":"from neutron.extensions import external_net"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_e79eb905","line":42,"range":{"start_line":40,"start_character":0,"end_line":42,"end_character":50},"updated":"2016-08-01 13:31:30.000000000","message":"Due to [1] we should not import classes, only modules.\n\nfrom neutron.db.models import l3_models\nl3_models.FloatinIP\n\n[1] http://docs.openstack.org/developer/hacking/#imports","commit_id":"470410fd7ddd39118c0e1510d4aed5dc3bfffab9"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"764a3a557c2ee1a00fb0d8c9326c141cb6459e64","unresolved":false,"context_lines":[{"line_number":64,"context_line":"API_TO_DB_COLUMN_MAP \u003d {\u0027port_id\u0027: \u0027fixed_port_id\u0027}"},{"line_number":65,"context_line":"CORE_ROUTER_ATTRS \u003d (\u0027id\u0027, \u0027name\u0027, \u0027tenant_id\u0027, \u0027admin_state_up\u0027, \u0027status\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class RouterPort(model_base.BASEV2):"},{"line_number":69,"context_line":"    router_id \u003d sa.Column("},{"line_number":70,"context_line":"        sa.String(36),"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_c82e00a4","side":"PARENT","line":67,"updated":"2016-08-02 06:33:58.000000000","message":"This change will break out-of-tree plugins which implements L3 features. Can we add proxy objects like below?\n\n  Router \u003d l3_models.Router\n  FloatingIP \u003d l3_models.FloatingIP\n\nIt is recommended to use debcollector to inform the relocation to plugin maintainers.\nhttp://docs.openstack.org/developer/debtcollector/examples.html#moving-a-class","commit_id":"fb040a09707565710c11e4a9e7ddfce2c9261402"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bd803515a684b845bf7decbf203297e487c93d12","unresolved":false,"context_lines":[{"line_number":64,"context_line":"API_TO_DB_COLUMN_MAP \u003d {\u0027port_id\u0027: \u0027fixed_port_id\u0027}"},{"line_number":65,"context_line":"CORE_ROUTER_ATTRS \u003d (\u0027id\u0027, \u0027name\u0027, \u0027tenant_id\u0027, \u0027admin_state_up\u0027, \u0027status\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class RouterPort(model_base.BASEV2):"},{"line_number":69,"context_line":"    router_id \u003d sa.Column("},{"line_number":70,"context_line":"        sa.String(36),"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_6e427daf","side":"PARENT","line":67,"in_reply_to":"bacf61ea_c82e00a4","updated":"2016-08-02 06:56:51.000000000","message":"It was already pointed out in the dev list\nhttp://lists.openstack.org/pipermail/openstack-dev/2016-July/100419.html\nand https://review.openstack.org/#/c/330870/13/neutron/db/agents_db.py\n\nThe review comment suggests the utility function in some common module.","commit_id":"fb040a09707565710c11e4a9e7ddfce2c9261402"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"1998ebc0c4c1ab4b1b39b0463a41a51726623302","unresolved":false,"context_lines":[{"line_number":63,"context_line":"CORE_ROUTER_ATTRS \u003d (\u0027id\u0027, \u0027name\u0027, \u0027tenant_id\u0027, \u0027admin_state_up\u0027, \u0027status\u0027)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Router \u003d utils.moved_model(l3_models.Router, \"Router\")"},{"line_number":67,"context_line":"RouterPort \u003d utils.moved_model(l3_models.RouterPort, \"RouterPort\")"},{"line_number":68,"context_line":"FloatingIP \u003d utils.moved_model(l3_models.FloatingIP, \"FloatingIP\")"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class L3_NAT_dbonly_mixin(l3.RouterPluginBase,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bacf61ea_2e6a8fed","line":68,"range":{"start_line":66,"start_character":0,"end_line":68,"end_character":66},"updated":"2016-08-05 04:18:29.000000000","message":"This simply prints a deprecation warning when this module is imported, regardless of whether the old classes are referenced or not. We went through a similar problem when moving constants to neutron-lib. If you remove the above three lines you can use dougwig\u0027s diabolical _DeprecateSubset:\n\n from neutron.common import _deprecate\n \n ...\n \n # WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE\n _OLD_REF \u003d sys.modules[__name__]\n sys.modules[__name__] \u003d _deprecate._DeprecateSubset(globals(), l3_models)\n # WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE","commit_id":"c45a03c17da6b8235d0794a0b1af812b52a67e00"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d296b1c9a3d2ef33d2acc22f897e463357294b30","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        only part of a router\u0027s information was populated in sync_routers"},{"line_number":147,"context_line":"        due to it being deleted during the sync."},{"line_number":148,"context_line":"        \"\"\""},{"line_number":149,"context_line":"        Router \u003d l3_models.Router"},{"line_number":150,"context_line":"        router_ids \u003d set(r[\u0027id\u0027] for r in routers)"},{"line_number":151,"context_line":"        query \u003d (context.session.query(Router.id)."},{"line_number":152,"context_line":"                 filter("}],"source_content_type":"text/x-python","patch_set":12,"id":"bacf61ea_9600f702","line":149,"updated":"2016-08-04 23:12:51.000000000","message":"Maybe this line is not required given that you have defined a previous class[1].\n\n[1] https://review.openstack.org/#/c/348562/12/neutron/db/l3_db.py@66","commit_id":"c45a03c17da6b8235d0794a0b1af812b52a67e00"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"7e7d416efc26891d32ff930de8ec3899f9dcde80","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        only part of a router\u0027s information was populated in sync_routers"},{"line_number":147,"context_line":"        due to it being deleted during the sync."},{"line_number":148,"context_line":"        \"\"\""},{"line_number":149,"context_line":"        Router \u003d l3_models.Router"},{"line_number":150,"context_line":"        router_ids \u003d set(r[\u0027id\u0027] for r in routers)"},{"line_number":151,"context_line":"        query \u003d (context.session.query(Router.id)."},{"line_number":152,"context_line":"                 filter("}],"source_content_type":"text/x-python","patch_set":12,"id":"bacf61ea_76662352","line":149,"in_reply_to":"bacf61ea_9600f702","updated":"2016-08-04 23:49:33.000000000","message":"it will work without this but since we are deprecating old one and at some point all occurences should use l3_models. \nmoved_models is being added to prevent third party plugins from breakage. once they start receiving the warning they need that transition to. I used variable here queries below were little complex for readability I used the Router here.","commit_id":"c45a03c17da6b8235d0794a0b1af812b52a67e00"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"d296b1c9a3d2ef33d2acc22f897e463357294b30","unresolved":false,"context_lines":[{"line_number":928,"context_line":"        # Among them, if the router\u0027s interface address matches"},{"line_number":929,"context_line":"        # with subnet\u0027s gateway-ip, return that router."},{"line_number":930,"context_line":"        # Otherwise return the first router."},{"line_number":931,"context_line":"        RouterPort \u003d l3_models.RouterPort"},{"line_number":932,"context_line":"        gw_port \u003d orm.aliased(models_v2.Port, name\u003d\"gw_port\")"},{"line_number":933,"context_line":"        routerport_qry \u003d context.session.query("},{"line_number":934,"context_line":"            RouterPort.router_id, models_v2.IPAllocation.ip_address).join("}],"source_content_type":"text/x-python","patch_set":12,"id":"bacf61ea_d606ef1a","line":931,"updated":"2016-08-04 23:12:51.000000000","message":"ditto: line 149","commit_id":"c45a03c17da6b8235d0794a0b1af812b52a67e00"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"ae85bc0bad87307505d1ccfc0c3b763b4fa47e26","unresolved":false,"context_lines":[{"line_number":1811,"context_line":""},{"line_number":1812,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"},{"line_number":1813,"context_line":"_OLD_REF \u003d sys.modules[__name__]"},{"line_number":1814,"context_line":"sys.modules[__name__] \u003d _deprecate._DeprecateSubset(globals(), router_models)"},{"line_number":1815,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_27825ec8","line":1814,"range":{"start_line":1814,"start_character":0,"end_line":1814,"end_character":77},"updated":"2016-08-18 15:17:16.000000000","message":"It\u0027s a tough call. We loses floatingip_models here.","commit_id":"4e68b87f7f245436958540a1dc935d5c97b40260"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8658f80b9cd7a35b1c549b5394e89c6cdd9189d9","unresolved":false,"context_lines":[{"line_number":1811,"context_line":""},{"line_number":1812,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"},{"line_number":1813,"context_line":"_OLD_REF \u003d sys.modules[__name__]"},{"line_number":1814,"context_line":"sys.modules[__name__] \u003d _deprecate._DeprecateSubset(globals(), router_models)"},{"line_number":1815,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_79e19a29","line":1814,"range":{"start_line":1814,"start_character":0,"end_line":1814,"end_character":77},"in_reply_to":"3ac371cc_27825ec8","updated":"2016-08-18 15:22:31.000000000","message":"Yes. I forgot to add it :-(","commit_id":"4e68b87f7f245436958540a1dc935d5c97b40260"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ff05bf3ed3cb4288d355ffc3f21be9a571da3720","unresolved":false,"context_lines":[{"line_number":1811,"context_line":""},{"line_number":1812,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"},{"line_number":1813,"context_line":"_OLD_REF \u003d sys.modules[__name__]"},{"line_number":1814,"context_line":"sys.modules[__name__] \u003d _deprecate._DeprecateSubset(globals(), router_models)"},{"line_number":1815,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_bca020f5","line":1814,"range":{"start_line":1814,"start_character":0,"end_line":1814,"end_character":77},"in_reply_to":"3ac371cc_79e19a29","updated":"2016-08-18 15:32:44.000000000","message":"Done","commit_id":"4e68b87f7f245436958540a1dc935d5c97b40260"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"21bac5d84bb1bea4cb0c79056a9a79030455d627","unresolved":false,"context_lines":[{"line_number":1818,"context_line":""},{"line_number":1819,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"},{"line_number":1820,"context_line":"_OLD_REF \u003d sys.modules[__name__]"},{"line_number":1821,"context_line":"sys.modules[__name__] \u003d _deprecate._DeprecateSubset(globals(), l3_models)"},{"line_number":1822,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa7ab95a_0de71941","line":1821,"updated":"2016-08-31 12:44:31.000000000","message":"Needs updating now that https://review.openstack.org/352601 has merged. Please follow the deprecation examples from that patch.","commit_id":"c79e736bf96d93c3413292a47d41674c2786e130"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"cdf8aa5916f3be3a523a1765f9c09c5d23cda820","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"5a8bc5a2_c69aa613","line":1840,"updated":"2016-09-27 14:57:54.000000000","message":"Missing the _deprecate._MovedGlobals() here.","commit_id":"105e9946dd3a571f16b4a6a5b4d0fdb8c39816ee"},{"author":{"_account_id":12906,"name":"tonytan4ever","email":"tony.tan@rackspace.com","username":"tonytan4ever"},"change_message_id":"f744a9e1970be0c357134f3fdfcaab22288f93bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"5a8bc5a2_a32e6740","line":1840,"in_reply_to":"5a8bc5a2_c69aa613","updated":"2016-09-27 15:44:09.000000000","message":"+1","commit_id":"105e9946dd3a571f16b4a6a5b4d0fdb8c39816ee"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"2573a04c9053ede313d905b7f7221278b9e35065","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"5a8bc5a2_4ab8502a","line":1840,"in_reply_to":"5a8bc5a2_c69aa613","updated":"2016-09-27 16:59:54.000000000","message":"Done","commit_id":"105e9946dd3a571f16b4a6a5b4d0fdb8c39816ee"}],"neutron/db/models/l3.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2da82713273e2378803a6e81f792ec197b9f73aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"3ac371cc_87d1a125","updated":"2016-08-18 13:38:31.000000000","message":"https://review.openstack.org/#/c/354797/ introduces models/router.py. This raises me a question Router and RouterPort models should be placed in models/router.py. This means we split this module into router.py and floatingip.py. Thought?","commit_id":"79c30e0bcc4347fe4167ba54e87b503496e5007a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bff3e5ee5106b50da5b1d901e5e824dc5cc1998b","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import sqlalchemy as sa"},{"line_number":15,"context_line":"from sqlalchemy import orm"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.db import model_base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.api.v2 import attributes"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a8bc5a2_1759238e","line":16,"updated":"2016-09-27 13:30:29.000000000","message":"there should be no newline between line 15 and 16: both imports are 3parties for neutron sake.","commit_id":"68e4d474638a821529ac71130a85896e69d6cc03"},{"author":{"_account_id":12906,"name":"tonytan4ever","email":"tony.tan@rackspace.com","username":"tonytan4ever"},"change_message_id":"f744a9e1970be0c357134f3fdfcaab22288f93bd","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import sqlalchemy as sa"},{"line_number":15,"context_line":"from sqlalchemy import orm"},{"line_number":16,"context_line":"from neutron_lib.db import model_base"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a8bc5a2_83140be9","line":13,"updated":"2016-09-27 15:44:09.000000000","message":"Import order is not alphabetical","commit_id":"105e9946dd3a571f16b4a6a5b4d0fdb8c39816ee"}],"neutron/db/models/l3_models.py":[{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"0cdf28661ad8df66b02336ca520485cfe078e8c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"bacf61ea_dedbd7eb","updated":"2016-08-04 07:55:45.000000000","message":"This file should be named neutron/db/models/l3.py. No need to repeat the l3_models in name.","commit_id":"739d43632633b09d1325758525c845b8d35edcfe"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cffb6adb6f6bccbe583479c11edcb7096b92300b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"bacf61ea_0c01b7af","in_reply_to":"bacf61ea_dedbd7eb","updated":"2016-08-04 14:00:55.000000000","message":"+1","commit_id":"739d43632633b09d1325758525c845b8d35edcfe"}]}
