)]}'
{"neutron/api/extensions.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6a5ef78a34ba3ce807f3fef77234db7d29837744","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                break"},{"line_number":443,"context_line":"        if exts_to_process:"},{"line_number":444,"context_line":"            unloadable_extensions \u003d set(exts_to_process.keys())"},{"line_number":445,"context_line":"            LOG.error(_LE(\"It was impossible to process extensions (%s) \""},{"line_number":446,"context_line":"                          \"because the configured plugins do not satisfy \""},{"line_number":447,"context_line":"                          \"their requirements. Some features will not \""},{"line_number":448,"context_line":"                          \"work as expected.\"),"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_48bcfb05","line":445,"range":{"start_line":445,"start_character":27,"end_line":445,"end_character":55},"updated":"2016-02-05 17:30:21.000000000","message":"Nit: While you\u0027re here can you change this to \"Unable to process ...\"","commit_id":"985aaa45663960b8685dd73d292b7f8c9e2ebdcb"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"32bba08f899f63a1a8cf1334ceebee08c510b3c7","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                break"},{"line_number":443,"context_line":"        if exts_to_process:"},{"line_number":444,"context_line":"            unloadable_extensions \u003d set(exts_to_process.keys())"},{"line_number":445,"context_line":"            LOG.error(_LE(\"It was impossible to process extensions (%s) \""},{"line_number":446,"context_line":"                          \"because the configured plugins do not satisfy \""},{"line_number":447,"context_line":"                          \"their requirements. Some features will not \""},{"line_number":448,"context_line":"                          \"work as expected.\"),"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_f661053a","line":445,"range":{"start_line":445,"start_character":27,"end_line":445,"end_character":55},"in_reply_to":"5a5ae5dd_48bcfb05","updated":"2016-02-05 20:49:48.000000000","message":"Done","commit_id":"985aaa45663960b8685dd73d292b7f8c9e2ebdcb"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6a5ef78a34ba3ce807f3fef77234db7d29837744","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                          \"because the configured plugins do not satisfy \""},{"line_number":447,"context_line":"                          \"their requirements. Some features will not \""},{"line_number":448,"context_line":"                          \"work as expected.\"),"},{"line_number":449,"context_line":"                      \u0027,\u0027.join(unloadable_extensions))"},{"line_number":450,"context_line":"            # Fail gracefully for default extensions, just in case some out"},{"line_number":451,"context_line":"            # of tree plugins are not entirely up to speed"},{"line_number":452,"context_line":"            default_extensions \u003d set(const.DEFAULT_SERVICE_PLUGINS.values())"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_48e5db35","line":449,"range":{"start_line":449,"start_character":22,"end_line":449,"end_character":25},"updated":"2016-02-05 17:30:21.000000000","message":"Super nit: \u0027, \u0027 (add a space after the comma)","commit_id":"985aaa45663960b8685dd73d292b7f8c9e2ebdcb"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"32bba08f899f63a1a8cf1334ceebee08c510b3c7","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                          \"because the configured plugins do not satisfy \""},{"line_number":447,"context_line":"                          \"their requirements. Some features will not \""},{"line_number":448,"context_line":"                          \"work as expected.\"),"},{"line_number":449,"context_line":"                      \u0027,\u0027.join(unloadable_extensions))"},{"line_number":450,"context_line":"            # Fail gracefully for default extensions, just in case some out"},{"line_number":451,"context_line":"            # of tree plugins are not entirely up to speed"},{"line_number":452,"context_line":"            default_extensions \u003d set(const.DEFAULT_SERVICE_PLUGINS.values())"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_b6570d59","line":449,"range":{"start_line":449,"start_character":22,"end_line":449,"end_character":25},"in_reply_to":"5a5ae5dd_48e5db35","updated":"2016-02-05 20:49:48.000000000","message":"Done","commit_id":"985aaa45663960b8685dd73d292b7f8c9e2ebdcb"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6a5ef78a34ba3ce807f3fef77234db7d29837744","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            # Fail gracefully for default extensions, just in case some out"},{"line_number":451,"context_line":"            # of tree plugins are not entirely up to speed"},{"line_number":452,"context_line":"            default_extensions \u003d set(const.DEFAULT_SERVICE_PLUGINS.values())"},{"line_number":453,"context_line":"            if not unloadable_extensions \u003c\u003d default_extensions:"},{"line_number":454,"context_line":"                raise exceptions.ExtensionsNotFound("},{"line_number":455,"context_line":"                    extensions\u003dlist(unloadable_extensions))"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_a81faf06","line":453,"updated":"2016-02-05 17:30:21.000000000","message":"I think this is more readable:\n\n  if unloadable_extensions \u003e default_extensions","commit_id":"985aaa45663960b8685dd73d292b7f8c9e2ebdcb"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"32bba08f899f63a1a8cf1334ceebee08c510b3c7","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            # Fail gracefully for default extensions, just in case some out"},{"line_number":451,"context_line":"            # of tree plugins are not entirely up to speed"},{"line_number":452,"context_line":"            default_extensions \u003d set(const.DEFAULT_SERVICE_PLUGINS.values())"},{"line_number":453,"context_line":"            if not unloadable_extensions \u003c\u003d default_extensions:"},{"line_number":454,"context_line":"                raise exceptions.ExtensionsNotFound("},{"line_number":455,"context_line":"                    extensions\u003dlist(unloadable_extensions))"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_f696e5ee","line":453,"in_reply_to":"5a5ae5dd_a81faf06","updated":"2016-02-05 20:49:48.000000000","message":"my version reads in my head like this:\n\nnot unloadable_extensions contained in default_extensions\n\nyours reads\n\nunloadable is superset of default_extensions\n\nSo it doesn\u0027t feel quite right. I am gonna go with mine.","commit_id":"985aaa45663960b8685dd73d292b7f8c9e2ebdcb"}],"neutron/manager.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"13243d2d70eae2c89f7b806413c1e751856332fc","unresolved":false,"context_lines":[{"line_number":33,"context_line":"DEFAULT_SERVICE_PLUGINS \u003d ("},{"line_number":34,"context_line":"    \u0027auto_allocate\u0027,"},{"line_number":35,"context_line":")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class Manager(periodic_task.PeriodicTasks):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    # Set RPC API version to 1.0 by default."}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_3054da1f","line":36,"updated":"2016-01-28 16:45:37.000000000","message":"Add blank line for PEP8","commit_id":"986284d6bf1d0802fb1ed9fd10a9b7e5887308e3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"13243d2d70eae2c89f7b806413c1e751856332fc","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        self._load_services_from_core_plugin()"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        plugin_providers \u003d cfg.CONF.service_plugins"},{"line_number":177,"context_line":"        plugin_providers.extend(DEFAULT_SERVICE_PLUGINS)"},{"line_number":178,"context_line":"        LOG.debug(\"Loading service plugins: %s\", plugin_providers)"},{"line_number":179,"context_line":"        for provider in plugin_providers:"},{"line_number":180,"context_line":"            if provider \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_8b41df0d","line":177,"updated":"2016-01-28 16:45:37.000000000","message":"Are there tests that will be affected by this change in number of plugin providers?","commit_id":"986284d6bf1d0802fb1ed9fd10a9b7e5887308e3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"97c758f16d28b58252142ca56cd463cb8fec64f4","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        self._load_services_from_core_plugin()"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        plugin_providers \u003d cfg.CONF.service_plugins"},{"line_number":177,"context_line":"        plugin_providers.extend(DEFAULT_SERVICE_PLUGINS)"},{"line_number":178,"context_line":"        LOG.debug(\"Loading service plugins: %s\", plugin_providers)"},{"line_number":179,"context_line":"        for provider in plugin_providers:"},{"line_number":180,"context_line":"            if provider \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_933803f1","line":177,"in_reply_to":"7a5de9d1_06ef2188","updated":"2016-01-29 14:38:16.000000000","message":"Was just politely suggesting you update the tests, because of the change. Will be more explicit next time.","commit_id":"986284d6bf1d0802fb1ed9fd10a9b7e5887308e3"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"e16aee5e9db2598860303d8ae5d02b5ecaaafb1f","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        self._load_services_from_core_plugin()"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        plugin_providers \u003d cfg.CONF.service_plugins"},{"line_number":177,"context_line":"        plugin_providers.extend(DEFAULT_SERVICE_PLUGINS)"},{"line_number":178,"context_line":"        LOG.debug(\"Loading service plugins: %s\", plugin_providers)"},{"line_number":179,"context_line":"        for provider in plugin_providers:"},{"line_number":180,"context_line":"            if provider \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_06ef2188","line":177,"in_reply_to":"7a5de9d1_8b41df0d","updated":"2016-01-28 17:53:00.000000000","message":"of course. If this like breaks you\u0027ll see RED all over the place.","commit_id":"986284d6bf1d0802fb1ed9fd10a9b7e5887308e3"},{"author":{"_account_id":17377,"name":"Federico Ressi","email":"federico.ressi@intel.com","username":"fressi"},"change_message_id":"a26cbaf4f16ef0f2802d9506d53defe7db4f42e3","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self._load_services_from_core_plugin()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        plugin_providers \u003d cfg.CONF.service_plugins"},{"line_number":174,"context_line":"        plugin_providers.extend(constants.DEFAULT_SERVICE_PLUGINS.keys())"},{"line_number":175,"context_line":"        LOG.debug(\"Loading service plugins: %s\", plugin_providers)"},{"line_number":176,"context_line":"        for provider in plugin_providers:"},{"line_number":177,"context_line":"            if provider \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_fb98b31d","line":174,"updated":"2016-02-02 11:14:17.000000000","message":"Iterating on a dictionary already yields its keys. Therefore this should have the same result:\n\n    plugin_providers.extend(constants.DEFAULT_SERVICE_PLUGINS)","commit_id":"776d6773b837699e7e86471fb443402a3e35e47d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"cac1081bfb7b40f2d75a840102364877dc0f5bfc","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self._load_services_from_core_plugin()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        plugin_providers \u003d cfg.CONF.service_plugins"},{"line_number":174,"context_line":"        plugin_providers.extend(constants.DEFAULT_SERVICE_PLUGINS.keys())"},{"line_number":175,"context_line":"        LOG.debug(\"Loading service plugins: %s\", plugin_providers)"},{"line_number":176,"context_line":"        for provider in plugin_providers:"},{"line_number":177,"context_line":"            if provider \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_4dba5170","line":174,"in_reply_to":"7a5de9d1_fb98b31d","updated":"2016-02-02 18:18:31.000000000","message":"Done","commit_id":"776d6773b837699e7e86471fb443402a3e35e47d"}],"neutron/tests/unit/api/test_extensions.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6a5ef78a34ba3ce807f3fef77234db7d29837744","unresolved":false,"context_lines":[{"line_number":512,"context_line":"    def test_missing_required_extensions_gracefully_error(self):"},{"line_number":513,"context_line":"        ext_mgr \u003d extensions.ExtensionManager(\u0027\u0027)"},{"line_number":514,"context_line":"        attr_map \u003d {}"},{"line_number":515,"context_line":"        default_ext \u003d constants.DEFAULT_SERVICE_PLUGINS.values()[0]"},{"line_number":516,"context_line":"        ext_mgr.add_extension(ext_stubs.StubExtensionWithReqs(default_ext))"},{"line_number":517,"context_line":"        ext_mgr.extend_resources(\"2.0\", attr_map)"},{"line_number":518,"context_line":"        self.assertIn(default_ext, ext_mgr.extensions)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_a25d9048","line":515,"updated":"2016-02-05 17:30:21.000000000","message":"dict.value() is an unordered collection so the first element is random. In Python3 the collection cannot be indexed.\n\nI am sure we\u0027ll soon have more than one, so you should probably loop over the default extensions.","commit_id":"985aaa45663960b8685dd73d292b7f8c9e2ebdcb"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"40f0b172695015fe0f1e08499bbfa7af8455c296","unresolved":false,"context_lines":[{"line_number":512,"context_line":"    def test_missing_required_extensions_gracefully_error(self):"},{"line_number":513,"context_line":"        ext_mgr \u003d extensions.ExtensionManager(\u0027\u0027)"},{"line_number":514,"context_line":"        attr_map \u003d {}"},{"line_number":515,"context_line":"        default_ext \u003d constants.DEFAULT_SERVICE_PLUGINS.values()[0]"},{"line_number":516,"context_line":"        ext_mgr.add_extension(ext_stubs.StubExtensionWithReqs(default_ext))"},{"line_number":517,"context_line":"        ext_mgr.extend_resources(\"2.0\", attr_map)"},{"line_number":518,"context_line":"        self.assertIn(default_ext, ext_mgr.extensions)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_f19cafc1","line":515,"in_reply_to":"5a5ae5dd_76b2f595","updated":"2016-02-09 04:42:01.000000000","message":"on second thought, I don\u0027t care about the order or anything...this test is to ensure that any default extension is going to be loaded without failure, the order should not matter.","commit_id":"985aaa45663960b8685dd73d292b7f8c9e2ebdcb"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"32bba08f899f63a1a8cf1334ceebee08c510b3c7","unresolved":false,"context_lines":[{"line_number":512,"context_line":"    def test_missing_required_extensions_gracefully_error(self):"},{"line_number":513,"context_line":"        ext_mgr \u003d extensions.ExtensionManager(\u0027\u0027)"},{"line_number":514,"context_line":"        attr_map \u003d {}"},{"line_number":515,"context_line":"        default_ext \u003d constants.DEFAULT_SERVICE_PLUGINS.values()[0]"},{"line_number":516,"context_line":"        ext_mgr.add_extension(ext_stubs.StubExtensionWithReqs(default_ext))"},{"line_number":517,"context_line":"        ext_mgr.extend_resources(\"2.0\", attr_map)"},{"line_number":518,"context_line":"        self.assertIn(default_ext, ext_mgr.extensions)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_76b2f595","line":515,"in_reply_to":"5a5ae5dd_a25d9048","updated":"2016-02-05 20:49:48.000000000","message":"um, I\u0027ll think of something.","commit_id":"985aaa45663960b8685dd73d292b7f8c9e2ebdcb"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"da693392ff1c35ccea375d1f0b0b5f2db234b4a7","unresolved":false,"context_lines":[{"line_number":512,"context_line":"    def test_missing_required_extensions_gracefully_error(self):"},{"line_number":513,"context_line":"        ext_mgr \u003d extensions.ExtensionManager(\u0027\u0027)"},{"line_number":514,"context_line":"        attr_map \u003d {}"},{"line_number":515,"context_line":"        default_ext \u003d list(constants.DEFAULT_SERVICE_PLUGINS.values())[0]"},{"line_number":516,"context_line":"        ext_mgr.add_extension(ext_stubs.StubExtensionWithReqs(default_ext))"},{"line_number":517,"context_line":"        ext_mgr.extend_resources(\"2.0\", attr_map)"},{"line_number":518,"context_line":"        self.assertIn(default_ext, ext_mgr.extensions)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_acb33a99","line":515,"updated":"2016-02-09 01:19:34.000000000","message":"Barf. :)","commit_id":"6c04249e2300dff51db2069fb493ae94f87d3594"}],"neutron/tests/unit/test_manager.py":[{"author":{"_account_id":17377,"name":"Federico Ressi","email":"federico.ressi@intel.com","username":"fressi"},"change_message_id":"a26cbaf4f16ef0f2802d9506d53defe7db4f42e3","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        cfg.CONF.set_override(\"core_plugin\", DB_PLUGIN_KLASS)"},{"line_number":115,"context_line":"        mgr \u003d manager.NeutronManager.get_instance()"},{"line_number":116,"context_line":"        svc_plugins \u003d mgr.get_service_plugins()"},{"line_number":117,"context_line":"        for plugin in constants.DEFAULT_SERVICE_PLUGINS.values():"},{"line_number":118,"context_line":"            self.assertIn(plugin, svc_plugins.keys())"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def test_post_plugin_validation(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_fb1bd37e","line":117,"updated":"2016-02-02 11:14:17.000000000","message":"For portability to Python 3.4 I would prefer:\n\n  for plugin in six.itervalues(constants.DEFAULT_SERVICE_PLUGINS):\n      ...","commit_id":"776d6773b837699e7e86471fb443402a3e35e47d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"e20f206166110fb1ab1b33b5996da58fc259b910","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        cfg.CONF.set_override(\"core_plugin\", DB_PLUGIN_KLASS)"},{"line_number":115,"context_line":"        mgr \u003d manager.NeutronManager.get_instance()"},{"line_number":116,"context_line":"        svc_plugins \u003d mgr.get_service_plugins()"},{"line_number":117,"context_line":"        for plugin in constants.DEFAULT_SERVICE_PLUGINS.values():"},{"line_number":118,"context_line":"            self.assertIn(plugin, svc_plugins.keys())"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def test_post_plugin_validation(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_4d3fb1d6","line":117,"in_reply_to":"7a5de9d1_fb1bd37e","updated":"2016-02-02 18:18:49.000000000","message":"Done","commit_id":"776d6773b837699e7e86471fb443402a3e35e47d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"081188f7511518adfca87396dcdff6eadb76e057","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        cfg.CONF.set_override(\"core_plugin\", DB_PLUGIN_KLASS)"},{"line_number":115,"context_line":"        mgr \u003d manager.NeutronManager.get_instance()"},{"line_number":116,"context_line":"        svc_plugins \u003d mgr.get_service_plugins()"},{"line_number":117,"context_line":"        for plugin in constants.DEFAULT_SERVICE_PLUGINS.values():"},{"line_number":118,"context_line":"            self.assertIn(plugin, svc_plugins.keys())"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def test_post_plugin_validation(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_24092a32","line":117,"in_reply_to":"7a5de9d1_fb1bd37e","updated":"2016-02-02 20:34:26.000000000","message":"Why? .values() perfectly fine in Python 3.x","commit_id":"776d6773b837699e7e86471fb443402a3e35e47d"},{"author":{"_account_id":17377,"name":"Federico Ressi","email":"federico.ressi@intel.com","username":"fressi"},"change_message_id":"a26cbaf4f16ef0f2802d9506d53defe7db4f42e3","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        mgr \u003d manager.NeutronManager.get_instance()"},{"line_number":116,"context_line":"        svc_plugins \u003d mgr.get_service_plugins()"},{"line_number":117,"context_line":"        for plugin in constants.DEFAULT_SERVICE_PLUGINS.values():"},{"line_number":118,"context_line":"            self.assertIn(plugin, svc_plugins.keys())"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def test_post_plugin_validation(self):"},{"line_number":121,"context_line":"        cfg.CONF.import_opt(\u0027dhcp_agents_per_network\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_cd717aaa","line":118,"updated":"2016-02-02 11:14:17.000000000","message":"Please! you don\u0027t need to covert keys in list to check if it contains that is a O(N) peration. dict implements __contains__ method that should be O(1).\n\n    self.assertIn(plugin, svc_plugins)\n\nThis could not work on python3 because keys() probably returns an iterators instead of a list.","commit_id":"776d6773b837699e7e86471fb443402a3e35e47d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"cac1081bfb7b40f2d75a840102364877dc0f5bfc","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        mgr \u003d manager.NeutronManager.get_instance()"},{"line_number":116,"context_line":"        svc_plugins \u003d mgr.get_service_plugins()"},{"line_number":117,"context_line":"        for plugin in constants.DEFAULT_SERVICE_PLUGINS.values():"},{"line_number":118,"context_line":"            self.assertIn(plugin, svc_plugins.keys())"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def test_post_plugin_validation(self):"},{"line_number":121,"context_line":"        cfg.CONF.import_opt(\u0027dhcp_agents_per_network\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_8d4e0995","line":118,"in_reply_to":"7a5de9d1_cd717aaa","updated":"2016-02-02 18:18:31.000000000","message":"sorry, I copied a bad pattern without my brain switched on.","commit_id":"776d6773b837699e7e86471fb443402a3e35e47d"}],"releasenotes/notes/add-get-me-a-network-56321aeef5389001.yaml":[{"author":{"_account_id":9515,"name":"Matthew Kassawara","email":"mkassawara@gmail.com","username":"ionosphere80"},"change_message_id":"ad1020d3816833b2a317c5c81968308a9987e972","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    The get-me-a-network feature allows to simplify the"},{"line_number":4,"context_line":"    workflow required for a tenant to provide basic"},{"line_number":5,"context_line":"    connectivity to his/her instances."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Once leveraged by Nova, a tenant/admin is no longer"},{"line_number":8,"context_line":"    required to provision networking resources ahead of"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"7a5de9d1_d5f46388","line":5,"updated":"2016-01-28 14:02:50.000000000","message":"The \"get-me-a-network\" feature simplifies the process for launching an instance with basic network connectivity.","commit_id":"986284d6bf1d0802fb1ed9fd10a9b7e5887308e3"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"e16aee5e9db2598860303d8ae5d02b5ecaaafb1f","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    The get-me-a-network feature allows to simplify the"},{"line_number":4,"context_line":"    workflow required for a tenant to provide basic"},{"line_number":5,"context_line":"    connectivity to his/her instances."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Once leveraged by Nova, a tenant/admin is no longer"},{"line_number":8,"context_line":"    required to provision networking resources ahead of"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"7a5de9d1_26f25d70","line":5,"in_reply_to":"7a5de9d1_d5f46388","updated":"2016-01-28 17:53:00.000000000","message":"Done","commit_id":"986284d6bf1d0802fb1ed9fd10a9b7e5887308e3"},{"author":{"_account_id":9515,"name":"Matthew Kassawara","email":"mkassawara@gmail.com","username":"ionosphere80"},"change_message_id":"ad1020d3816833b2a317c5c81968308a9987e972","unresolved":false,"context_lines":[{"line_number":7,"context_line":"  - Once leveraged by Nova, a tenant/admin is no longer"},{"line_number":8,"context_line":"    required to provision networking resources ahead of"},{"line_number":9,"context_line":"    boot process in order to successfully launch an"},{"line_number":10,"context_line":"    instance."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"7a5de9d1_153f5bd7","line":10,"updated":"2016-01-28 14:02:50.000000000","message":"Once nova takes advantage of this feature, a project can launch an instance without explicitly provisioning network resources.","commit_id":"986284d6bf1d0802fb1ed9fd10a9b7e5887308e3"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"e16aee5e9db2598860303d8ae5d02b5ecaaafb1f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"  - Once leveraged by Nova, a tenant/admin is no longer"},{"line_number":8,"context_line":"    required to provision networking resources ahead of"},{"line_number":9,"context_line":"    boot process in order to successfully launch an"},{"line_number":10,"context_line":"    instance."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"7a5de9d1_c6e8297f","line":10,"in_reply_to":"7a5de9d1_153f5bd7","updated":"2016-01-28 17:53:00.000000000","message":"Done","commit_id":"986284d6bf1d0802fb1ed9fd10a9b7e5887308e3"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"081188f7511518adfca87396dcdff6eadb76e057","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    The get-me-a-network feature simplifies the workflow"},{"line_number":4,"context_line":"    required for a tenant to provide basic connectivity"},{"line_number":5,"context_line":"    (via an externally connected private tenant network)"},{"line_number":6,"context_line":"    to his/her instances."},{"line_number":7,"context_line":"features:"},{"line_number":8,"context_line":"  - Once Nova takes advantage of this feature, a user can"},{"line_number":9,"context_line":"    launch an instance without explicitly provisioning"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7a5de9d1_ffae3fe6","line":6,"range":{"start_line":3,"start_character":0,"end_line":6,"end_character":25},"updated":"2016-02-02 20:34:26.000000000","message":"I think Matt\u0027s suggestion from patch set 1 is better.","commit_id":"776d6773b837699e7e86471fb443402a3e35e47d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"4332c957c9779a71e8ffef1ff528015c97498575","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    The get-me-a-network feature simplifies the workflow"},{"line_number":4,"context_line":"    required for a tenant to provide basic connectivity"},{"line_number":5,"context_line":"    (via an externally connected private tenant network)"},{"line_number":6,"context_line":"    to his/her instances."},{"line_number":7,"context_line":"features:"},{"line_number":8,"context_line":"  - Once Nova takes advantage of this feature, a user can"},{"line_number":9,"context_line":"    launch an instance without explicitly provisioning"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7a5de9d1_b1d79bec","line":6,"range":{"start_line":3,"start_character":0,"end_line":6,"end_character":25},"in_reply_to":"7a5de9d1_ffae3fe6","updated":"2016-02-02 21:09:57.000000000","message":"I thought I had copied it...","commit_id":"776d6773b837699e7e86471fb443402a3e35e47d"}]}
