)]}'
{".pylintrc":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"664577c42cb7339cde25cab9da4b195d377e0bce","unresolved":false,"context_lines":[{"line_number":17,"context_line":" import-error,"},{"line_number":18,"context_line":"# \"I\" Informational noise"},{"line_number":19,"context_line":" locally-disabled,"},{"line_number":20,"context_line":" file-ignored,"},{"line_number":21,"context_line":"# \"E\" Error for important programming issues (likely bugs)"},{"line_number":22,"context_line":" access-member-before-definition,"},{"line_number":23,"context_line":" no-member,"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"5a5ae5dd_1248ff86","line":20,"updated":"2016-02-09 09:33:50.000000000","message":"why this change?","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"37f36f4c674d28b8eef6ea1bcb8159db57d94c8c","unresolved":false,"context_lines":[{"line_number":17,"context_line":" import-error,"},{"line_number":18,"context_line":"# \"I\" Informational noise"},{"line_number":19,"context_line":" locally-disabled,"},{"line_number":20,"context_line":" file-ignored,"},{"line_number":21,"context_line":"# \"E\" Error for important programming issues (likely bugs)"},{"line_number":22,"context_line":" access-member-before-definition,"},{"line_number":23,"context_line":" no-member,"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"3a57f1b5_05043e7c","line":20,"in_reply_to":"3a57f1b5_27a71451","updated":"2016-02-10 01:05:59.000000000","message":"Done","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6ecbbda2c91e4c542cf654907de92607e0c3f845","unresolved":false,"context_lines":[{"line_number":17,"context_line":" import-error,"},{"line_number":18,"context_line":"# \"I\" Informational noise"},{"line_number":19,"context_line":" locally-disabled,"},{"line_number":20,"context_line":" file-ignored,"},{"line_number":21,"context_line":"# \"E\" Error for important programming issues (likely bugs)"},{"line_number":22,"context_line":" access-member-before-definition,"},{"line_number":23,"context_line":" no-member,"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"5a5ae5dd_981645a6","line":20,"in_reply_to":"5a5ae5dd_1248ff86","updated":"2016-02-09 12:58:51.000000000","message":"Not needed any more, right?","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"296630783337a947e394d4bb0bfc85ac6c6097d0","unresolved":false,"context_lines":[{"line_number":17,"context_line":" import-error,"},{"line_number":18,"context_line":"# \"I\" Informational noise"},{"line_number":19,"context_line":" locally-disabled,"},{"line_number":20,"context_line":" file-ignored,"},{"line_number":21,"context_line":"# \"E\" Error for important programming issues (likely bugs)"},{"line_number":22,"context_line":" access-member-before-definition,"},{"line_number":23,"context_line":" no-member,"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"3a57f1b5_27a71451","line":20,"in_reply_to":"5a5ae5dd_981645a6","updated":"2016-02-09 17:50:18.000000000","message":"I\u0027ll check. Even if needed, it should have a TODO().","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"}],"neutron/common/_deprecate.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4b18718d6739dc51a8d1b5d129e0135a720e80e1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        self.my_globals \u003d copy.copy(my_globals)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __getattr__(self, name):"},{"line_number":23,"context_line":"        if name[:2] !\u003d \"__\" and name in dir(self.other_mod):"},{"line_number":24,"context_line":"            import debtcollector"},{"line_number":25,"context_line":"            debtcollector.deprecate("},{"line_number":26,"context_line":"                    name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_3ac4db90","line":23,"range":{"start_line":23,"start_character":40,"end_line":23,"end_character":43},"updated":"2016-02-09 16:45:32.000000000","message":"I think you can/should use vars() instead of dir() here.\n\nI also wonder if you should check that name is not a ModuleType?","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6ecbbda2c91e4c542cf654907de92607e0c3f845","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        self.my_globals \u003d copy.copy(my_globals)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __getattr__(self, name):"},{"line_number":23,"context_line":"        if name[:2] !\u003d \"__\" and name in dir(self.other_mod):"},{"line_number":24,"context_line":"            import debtcollector"},{"line_number":25,"context_line":"            debtcollector.deprecate("},{"line_number":26,"context_line":"                    name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_387b917d","line":23,"updated":"2016-02-09 12:58:51.000000000","message":"super nit: could say name.startswith(\"__\") for readability.","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"296630783337a947e394d4bb0bfc85ac6c6097d0","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        self.my_globals \u003d copy.copy(my_globals)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __getattr__(self, name):"},{"line_number":23,"context_line":"        if name[:2] !\u003d \"__\" and name in dir(self.other_mod):"},{"line_number":24,"context_line":"            import debtcollector"},{"line_number":25,"context_line":"            debtcollector.deprecate("},{"line_number":26,"context_line":"                    name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_a7ba246d","line":23,"in_reply_to":"5a5ae5dd_387b917d","updated":"2016-02-09 17:50:18.000000000","message":"Neat, didn\u0027t know that existed.","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"37f36f4c674d28b8eef6ea1bcb8159db57d94c8c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        self.my_globals \u003d copy.copy(my_globals)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __getattr__(self, name):"},{"line_number":23,"context_line":"        if name[:2] !\u003d \"__\" and name in dir(self.other_mod):"},{"line_number":24,"context_line":"            import debtcollector"},{"line_number":25,"context_line":"            debtcollector.deprecate("},{"line_number":26,"context_line":"                    name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_85f82e7e","line":23,"range":{"start_line":23,"start_character":40,"end_line":23,"end_character":43},"in_reply_to":"5a5ae5dd_3ac4db90","updated":"2016-02-10 01:05:59.000000000","message":"dir is just vars().keys.  modulecheck - done","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6ecbbda2c91e4c542cf654907de92607e0c3f845","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __getattr__(self, name):"},{"line_number":23,"context_line":"        if name[:2] !\u003d \"__\" and name in dir(self.other_mod):"},{"line_number":24,"context_line":"            import debtcollector"},{"line_number":25,"context_line":"            debtcollector.deprecate("},{"line_number":26,"context_line":"                    name,"},{"line_number":27,"context_line":"                    message\u003d\u0027moved to neutron_lib\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_d85efd11","line":24,"updated":"2016-02-09 12:58:51.000000000","message":"move to top of file","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"296630783337a947e394d4bb0bfc85ac6c6097d0","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __getattr__(self, name):"},{"line_number":23,"context_line":"        if name[:2] !\u003d \"__\" and name in dir(self.other_mod):"},{"line_number":24,"context_line":"            import debtcollector"},{"line_number":25,"context_line":"            debtcollector.deprecate("},{"line_number":26,"context_line":"                    name,"},{"line_number":27,"context_line":"                    message\u003d\u0027moved to neutron_lib\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_0793f8fb","line":24,"in_reply_to":"5a5ae5dd_d85efd11","updated":"2016-02-09 17:50:18.000000000","message":"This is inline because if you don\u0027t reference a moved constant, you don\u0027t need it imported.","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"32ddaea5fad6a105f99a5d1e217024bda5352bf3","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __getattr__(self, name):"},{"line_number":24,"context_line":"        a \u003d self.my_globals.get(name)"},{"line_number":25,"context_line":"        if not name.startswith(\"__\") and not inspect.ismodule(a) and \\"},{"line_number":26,"context_line":"            name in dir(self.other_mod):"},{"line_number":27,"context_line":"            import debtcollector"},{"line_number":28,"context_line":"            debtcollector.deprecate("}],"source_content_type":"text/x-python","patch_set":10,"id":"3a57f1b5_50be7200","line":25,"range":{"start_line":25,"start_character":45,"end_line":25,"end_character":61},"updated":"2016-02-10 01:21:35.000000000","message":"You could also do isinstance(a, types.ModuleType) -- I wonder which is more lightweight?","commit_id":"78b89436a1f47091c17be3d447a6af2b954a532e"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"5765c614c24b76729d4f2bd91a569466fe9d60a8","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __getattr__(self, name):"},{"line_number":24,"context_line":"        a \u003d self.my_globals.get(name)"},{"line_number":25,"context_line":"        if not name.startswith(\"__\") and not inspect.ismodule(a) and \\"},{"line_number":26,"context_line":"            name in dir(self.other_mod):"},{"line_number":27,"context_line":"            import debtcollector"},{"line_number":28,"context_line":"            debtcollector.deprecate("}],"source_content_type":"text/x-python","patch_set":10,"id":"3a57f1b5_bd6d3e34","line":25,"range":{"start_line":25,"start_character":45,"end_line":25,"end_character":61},"in_reply_to":"3a57f1b5_50be7200","updated":"2016-02-10 02:52:48.000000000","message":"ismodule seems clearer to me, but I\u0027m not strongly tied to either.","commit_id":"78b89436a1f47091c17be3d447a6af2b954a532e"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"32ddaea5fad6a105f99a5d1e217024bda5352bf3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    def __getattr__(self, name):"},{"line_number":24,"context_line":"        a \u003d self.my_globals.get(name)"},{"line_number":25,"context_line":"        if not name.startswith(\"__\") and not inspect.ismodule(a) and \\"},{"line_number":26,"context_line":"            name in dir(self.other_mod):"},{"line_number":27,"context_line":"            import debtcollector"},{"line_number":28,"context_line":"            debtcollector.deprecate("},{"line_number":29,"context_line":"                    name,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a57f1b5_303c1693","line":26,"range":{"start_line":26,"start_character":20,"end_line":26,"end_character":23},"updated":"2016-02-10 01:21:35.000000000","message":"Wouldn\u0027t it be better to be consistent with line 33?","commit_id":"78b89436a1f47091c17be3d447a6af2b954a532e"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"5765c614c24b76729d4f2bd91a569466fe9d60a8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    def __getattr__(self, name):"},{"line_number":24,"context_line":"        a \u003d self.my_globals.get(name)"},{"line_number":25,"context_line":"        if not name.startswith(\"__\") and not inspect.ismodule(a) and \\"},{"line_number":26,"context_line":"            name in dir(self.other_mod):"},{"line_number":27,"context_line":"            import debtcollector"},{"line_number":28,"context_line":"            debtcollector.deprecate("},{"line_number":29,"context_line":"                    name,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a57f1b5_5d7e8ae5","line":26,"range":{"start_line":26,"start_character":20,"end_line":26,"end_character":23},"in_reply_to":"3a57f1b5_303c1693","updated":"2016-02-10 02:52:48.000000000","message":"I don\u0027t care, but you clearly do, so \u0027Done\u0027.","commit_id":"78b89436a1f47091c17be3d447a6af2b954a532e"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b280b64032a52def19b13093c672fb224e0d00b","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __getattr__(self, name):"},{"line_number":24,"context_line":"        a \u003d self.my_globals.get(name)"},{"line_number":25,"context_line":"        if not name.startswith(\"__\") and not inspect.ismodule(a) and \\"},{"line_number":26,"context_line":"            name in vars(self.other_mod):"},{"line_number":27,"context_line":"            import debtcollector"},{"line_number":28,"context_line":"            debtcollector.deprecate("}],"source_content_type":"text/x-python","patch_set":12,"id":"3a57f1b5_021189ac","line":25,"updated":"2016-02-10 08:10:37.000000000","message":"if (not name.startswith(\"__\") and\n    not inspect.ismodule(a) and\n    name in vars(self.other_mod)):\n\nI prefer brackets to the \\","commit_id":"6cb747d29bcc351b835cc1e6da6700a9d5d4d33a"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6abafc5e4452484a2f77c88615bc1e5b6e080119","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __getattr__(self, name):"},{"line_number":24,"context_line":"        a \u003d self.my_globals.get(name)"},{"line_number":25,"context_line":"        if not name.startswith(\"__\") and not inspect.ismodule(a) and \\"},{"line_number":26,"context_line":"            name in vars(self.other_mod):"},{"line_number":27,"context_line":"            import debtcollector"},{"line_number":28,"context_line":"            debtcollector.deprecate("}],"source_content_type":"text/x-python","patch_set":12,"id":"3a57f1b5_c0c7d810","line":25,"in_reply_to":"3a57f1b5_021189ac","updated":"2016-02-10 14:23:40.000000000","message":"+1","commit_id":"6cb747d29bcc351b835cc1e6da6700a9d5d4d33a"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"19285ea32f78d923828676de3ae00c1924c98d4f","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __getattr__(self, name):"},{"line_number":24,"context_line":"        a \u003d self.my_globals.get(name)"},{"line_number":25,"context_line":"        if not name.startswith(\"__\") and not inspect.ismodule(a) and \\"},{"line_number":26,"context_line":"            name in vars(self.other_mod):"},{"line_number":27,"context_line":"            import debtcollector"},{"line_number":28,"context_line":"            debtcollector.deprecate("}],"source_content_type":"text/x-python","patch_set":12,"id":"3a57f1b5_0bb0a842","line":25,"in_reply_to":"3a57f1b5_c0c7d810","updated":"2016-02-10 17:01:04.000000000","message":"Done","commit_id":"6cb747d29bcc351b835cc1e6da6700a9d5d4d33a"}],"neutron/common/constants.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"521c7a25956ac598420b8dacd9756a5fe2fd7c74","unresolved":false,"context_lines":[{"line_number":142,"context_line":"# Neighbor Advertisement (136)"},{"line_number":143,"context_line":"ICMPV6_ALLOWED_TYPES \u003d [130, 131, 132, 135, 136]"},{"line_number":144,"context_line":"ICMPV6_TYPE_RA \u003d 134"},{"line_number":145,"context_line":"ICMPV6_TYPE_NA \u003d 136"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"DHCPV6_STATEFUL \u003d \u0027dhcpv6-stateful\u0027"},{"line_number":148,"context_line":"DHCPV6_STATELESS \u003d \u0027dhcpv6-stateless\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6ed579_b43fbf85","side":"PARENT","line":145,"updated":"2016-01-15 17:03:35.000000000","message":"There some open reviews modifying these, which would have to be split into two reviews.  But I guess we have to pull the band-aid off sometime.","commit_id":"2c599814fbf7f13504218000c07de81eb6f25f5a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4073546c77ada75ff6ade447f3fec219c547447a","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import debtcollector"},{"line_number":17,"context_line":"debtcollector.deprecate("},{"line_number":18,"context_line":"    \"constants from neutron_lib will be removed soon\","},{"line_number":19,"context_line":"    version\u003d\u0027newton\u0027)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_7524cbc5","line":18,"range":{"start_line":18,"start_character":20,"end_line":18,"end_character":31},"updated":"2016-01-26 12:14:15.000000000","message":"neutron_lib -\u003e \"%s\" % __name__","commit_id":"7f8de5e1c9f8975639c8b0f6d306c9a1902c69aa"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4073546c77ada75ff6ade447f3fec219c547447a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import debtcollector"},{"line_number":17,"context_line":"debtcollector.deprecate("},{"line_number":18,"context_line":"    \"constants from neutron_lib will be removed soon\","},{"line_number":19,"context_line":"    version\u003d\u0027newton\u0027)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# TODO(dougwig) - neutron_lib migration shim, will be removed beginning of N."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_75e60b18","line":19,"updated":"2016-01-26 12:14:15.000000000","message":"Since you specify the version when it will be removed, debtcollector appends \" in version \u0027newton\u0027\". So you can drop \"soon\" from the message.","commit_id":"7f8de5e1c9f8975639c8b0f6d306c9a1902c69aa"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"45effc89262e86a478f11b2e53d6e04f83d0018d","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import debtcollector"},{"line_number":17,"context_line":"debtcollector.deprecate("},{"line_number":18,"context_line":"    \"constants from neutron_lib will be removed\","},{"line_number":19,"context_line":"    version\u003d\u0027newton\u0027)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_6f11335d","line":18,"range":{"start_line":18,"start_character":20,"end_line":18,"end_character":31},"updated":"2016-01-27 01:40:23.000000000","message":"This should be neutron (not neutron_lib), or even better:\n\n  \"constants from %s will be removed\" % __name__","commit_id":"5f37d77dbffeb20992ec1110efe9eb268c8f09f2"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"01c070643439c4bf0a48313078b5af57a70469e3","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import debtcollector"},{"line_number":17,"context_line":"debtcollector.deprecate("},{"line_number":18,"context_line":"    \"constants from neutron_lib will be removed\","},{"line_number":19,"context_line":"    version\u003d\u0027newton\u0027)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_4673274e","line":18,"range":{"start_line":18,"start_character":20,"end_line":18,"end_character":31},"in_reply_to":"9a68dd71_6f11335d","updated":"2016-01-27 13:20:28.000000000","message":"Isn\u0027t __name__ \u003d\u003d __main__?\n\nMaybe just say \"This module is no longer supported in\". The message will add \"newton\".","commit_id":"5f37d77dbffeb20992ec1110efe9eb268c8f09f2"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"01c070643439c4bf0a48313078b5af57a70469e3","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    version\u003d\u0027newton\u0027)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# TODO(dougwig) - neutron_lib migration shim, will be removed beginning of N."},{"line_number":23,"context_line":"# You should not import this module for constants no longer here,"},{"line_number":24,"context_line":"# but instead, import the neutron_lib module"},{"line_number":25,"context_line":"#pylint: skip-file"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_a698db6b","line":22,"updated":"2016-01-27 13:20:28.000000000","message":"Nit: Can remove","commit_id":"5f37d77dbffeb20992ec1110efe9eb268c8f09f2"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"01c070643439c4bf0a48313078b5af57a70469e3","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# TODO(dougwig) - neutron_lib migration shim, will be removed beginning of N."},{"line_number":23,"context_line":"# You should not import this module for constants no longer here,"},{"line_number":24,"context_line":"# but instead, import the neutron_lib module"},{"line_number":25,"context_line":"#pylint: skip-file"},{"line_number":26,"context_line":"from neutron_lib.constants import *  # noqa"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_46c1e72d","line":23,"updated":"2016-01-27 13:20:28.000000000","message":"Why would anyone import a module for constants that are not there? :)\n\nSeriously, maybe we can say...\nYou should import this module, only if you use constants defined here. For migrated constants, you sure directly import the neutron_lib constants module, rather than use this wrapper.","commit_id":"5f37d77dbffeb20992ec1110efe9eb268c8f09f2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4b18718d6739dc51a8d1b5d129e0135a720e80e1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from neutron.common import _deprecate"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"ROUTER_PORT_OWNERS \u003d lib_constants.ROUTER_INTERFACE_OWNERS_SNAT + \\"},{"line_number":24,"context_line":"    (lib_constants.DEVICE_OWNER_ROUTER_GW,)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"L3_AGENT_MODE_DVR \u003d \u0027dvr\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_d225790a","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":18},"updated":"2016-02-09 16:45:32.000000000","message":"Just curious: Why is this not in neutron-lib?","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"296630783337a947e394d4bb0bfc85ac6c6097d0","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from neutron.common import _deprecate"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"ROUTER_PORT_OWNERS \u003d lib_constants.ROUTER_INTERFACE_OWNERS_SNAT + \\"},{"line_number":24,"context_line":"    (lib_constants.DEVICE_OWNER_ROUTER_GW,)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"L3_AGENT_MODE_DVR \u003d \u0027dvr\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_0781b88f","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":18},"in_reply_to":"5a5ae5dd_d225790a","updated":"2016-02-09 17:50:18.000000000","message":"Submitted after the merge. Once this is in, it can migrate. Same as the ip constants below.","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"664577c42cb7339cde25cab9da4b195d377e0bce","unresolved":false,"context_lines":[{"line_number":126,"context_line":"ICMPV6_TYPE_RA \u003d 134"},{"line_number":127,"context_line":"ICMPV6_TYPE_NA \u003d 136"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"DHCPV6_STATEFUL \u003d \u0027dhcpv6-stateful\u0027"},{"line_number":131,"context_line":"DHCPV6_STATELESS \u003d \u0027dhcpv6-stateless\u0027"},{"line_number":132,"context_line":"IPV6_SLAAC \u003d \u0027slaac\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_7257f326","line":129,"updated":"2016-02-09 09:33:50.000000000","message":"no need for this one","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"37f36f4c674d28b8eef6ea1bcb8159db57d94c8c","unresolved":false,"context_lines":[{"line_number":126,"context_line":"ICMPV6_TYPE_RA \u003d 134"},{"line_number":127,"context_line":"ICMPV6_TYPE_NA \u003d 136"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"DHCPV6_STATEFUL \u003d \u0027dhcpv6-stateful\u0027"},{"line_number":131,"context_line":"DHCPV6_STATELESS \u003d \u0027dhcpv6-stateless\u0027"},{"line_number":132,"context_line":"IPV6_SLAAC \u003d \u0027slaac\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a57f1b5_454eb6c2","line":129,"in_reply_to":"5a5ae5dd_7257f326","updated":"2016-02-10 01:05:59.000000000","message":"Done","commit_id":"d64d66361b3043819991ad3b3992bad8f58b0a5e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6abafc5e4452484a2f77c88615bc1e5b6e080119","unresolved":false,"context_lines":[{"line_number":203,"context_line":"# import directly from their new location."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"},{"line_number":206,"context_line":"_OLD_REF \u003d sys.modules[__name__]"},{"line_number":207,"context_line":"sys.modules[__name__] \u003d _deprecate._DeprecateSubset(globals(), lib_constants)"},{"line_number":208,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a57f1b5_405f6841","line":206,"updated":"2016-02-10 14:23:40.000000000","message":"Curios, why are we saving the module name?","commit_id":"6cb747d29bcc351b835cc1e6da6700a9d5d4d33a"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"19285ea32f78d923828676de3ae00c1924c98d4f","unresolved":false,"context_lines":[{"line_number":203,"context_line":"# import directly from their new location."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"},{"line_number":206,"context_line":"_OLD_REF \u003d sys.modules[__name__]"},{"line_number":207,"context_line":"sys.modules[__name__] \u003d _deprecate._DeprecateSubset(globals(), lib_constants)"},{"line_number":208,"context_line":"# WARNING: THESE MUST BE THE LAST TWO LINES IN THIS MODULE"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a57f1b5_cb55b0c6","line":206,"in_reply_to":"3a57f1b5_405f6841","updated":"2016-02-10 17:01:04.000000000","message":"To keep the original module from being garbage collected, which was causing the first set of unit failures in the derived classes. I\u0027ll add a note in the code comments.","commit_id":"6cb747d29bcc351b835cc1e6da6700a9d5d4d33a"}],"neutron/common/exceptions.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4073546c77ada75ff6ade447f3fec219c547447a","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import debtcollector"},{"line_number":21,"context_line":"debtcollector.deprecate("},{"line_number":22,"context_line":"    \"constants from neutron-lib will be removed soon\","},{"line_number":23,"context_line":"    version\u003d\u0027newton\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_157d4fe7","line":22,"range":{"start_line":22,"start_character":20,"end_line":22,"end_character":31},"updated":"2016-01-26 12:14:15.000000000","message":"\"%s\" % __name__","commit_id":"7f8de5e1c9f8975639c8b0f6d306c9a1902c69aa"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4073546c77ada75ff6ade447f3fec219c547447a","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import debtcollector"},{"line_number":21,"context_line":"debtcollector.deprecate("},{"line_number":22,"context_line":"    \"constants from neutron-lib will be removed soon\","},{"line_number":23,"context_line":"    version\u003d\u0027newton\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_d50fb786","line":22,"range":{"start_line":22,"start_character":5,"end_line":22,"end_character":14},"updated":"2016-01-26 12:14:15.000000000","message":"exceptions","commit_id":"7f8de5e1c9f8975639c8b0f6d306c9a1902c69aa"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4073546c77ada75ff6ade447f3fec219c547447a","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import debtcollector"},{"line_number":21,"context_line":"debtcollector.deprecate("},{"line_number":22,"context_line":"    \"constants from neutron-lib will be removed soon\","},{"line_number":23,"context_line":"    version\u003d\u0027newton\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_d55d777a","line":22,"range":{"start_line":22,"start_character":47,"end_line":22,"end_character":52},"updated":"2016-01-26 12:14:15.000000000","message":"omit","commit_id":"7f8de5e1c9f8975639c8b0f6d306c9a1902c69aa"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"45effc89262e86a478f11b2e53d6e04f83d0018d","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import debtcollector"},{"line_number":21,"context_line":"debtcollector.deprecate("},{"line_number":22,"context_line":"    \"exceptions from neutron-lib will be removed\","},{"line_number":23,"context_line":"    version\u003d\u0027newton\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_2f0c9b41","line":22,"range":{"start_line":22,"start_character":21,"end_line":22,"end_character":32},"updated":"2016-01-27 01:40:23.000000000","message":"Ditto","commit_id":"5f37d77dbffeb20992ec1110efe9eb268c8f09f2"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"01c070643439c4bf0a48313078b5af57a70469e3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    version\u003d\u0027newton\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# TODO(dougwig) - neutron_lib migration shim, will be removed beginning of N."},{"line_number":27,"context_line":"# You should not import this module for exception sin neutron_lib,"},{"line_number":28,"context_line":"# but instead, import the neutron_lib module"},{"line_number":29,"context_line":"#pylint: skip-file"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_86f59f84","line":26,"updated":"2016-01-27 13:20:28.000000000","message":"remove","commit_id":"5f37d77dbffeb20992ec1110efe9eb268c8f09f2"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"01c070643439c4bf0a48313078b5af57a70469e3","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# TODO(dougwig) - neutron_lib migration shim, will be removed beginning of N."},{"line_number":27,"context_line":"# You should not import this module for exception sin neutron_lib,"},{"line_number":28,"context_line":"# but instead, import the neutron_lib module"},{"line_number":29,"context_line":"#pylint: skip-file"},{"line_number":30,"context_line":"from neutron_lib.exceptions import *  # noqa"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_e630130a","line":27,"updated":"2016-01-27 13:20:28.000000000","message":"You should import this module, only if you use exceptions defined here. For migrated exceptions, you sure directly import the neutron_lib exceptions module, rather than use this wrapper.","commit_id":"5f37d77dbffeb20992ec1110efe9eb268c8f09f2"}]}
