)]}'
{"quantum/manager.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"30ea8343c0e9d12e9dc45a5ee1a4b88e60b2d760","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _load_services_from_core_plugin(self):"},{"line_number":106,"context_line":"        \"\"\"Puts core plugin in service_plugin dict for"},{"line_number":107,"context_line":"        supported service types"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        LOG.debug(_(\"Loading services supported by the core plugin\"))"},{"line_number":110,"context_line":"        # plugin should define a list of supported service types"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FjKs%3D","line":107,"updated":"2013-05-05 07:48:20.000000000","message":"Missing full stop (following BP on the pep257)","commit_id":"8bc915dba9d060b3b903d461ab0743f0188d20c2"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"64e59495c4c8f46eb6497876453e81b9b8fe5e1e","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _load_services_from_core_plugin(self):"},{"line_number":106,"context_line":"        \"\"\"Puts core plugin in service_plugin dict for"},{"line_number":107,"context_line":"        supported service types"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        LOG.debug(_(\"Loading services supported by the core plugin\"))"},{"line_number":110,"context_line":"        # plugin should define a list of supported service types"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FjJ8%3D","line":107,"in_reply_to":"AAAAOn%2F%2FjKs%3D","updated":"2013-05-05 08:30:29.000000000","message":"Done","commit_id":"8bc915dba9d060b3b903d461ab0743f0188d20c2"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"aab0ebd06fc9b36cf3726e5a9c2dfeccf2949e7a","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        self._load_service_plugins()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _load_services_from_core_plugin(self):"},{"line_number":106,"context_line":"        \"\"\"Puts core plugin in service_plugin dict for"},{"line_number":107,"context_line":"        supported service types."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        LOG.debug(_(\"Loading services supported by the core plugin\"))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2Fij4%3D","line":106,"updated":"2013-05-06 10:56:03.000000000","message":"PEP 257 style docstring for new function. Consider adding to _load_service_plugins() too.","commit_id":"07b3871656062d342795ee98ba87f964938c153d"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":103,"context_line":"        self._load_service_plugins()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _load_services_from_core_plugin(self):"},{"line_number":106,"context_line":"        \"\"\"Puts core plugin in service_plugin dict for"},{"line_number":107,"context_line":"        supported service types."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        LOG.debug(_(\"Loading services supported by the core plugin\"))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2FihI%3D","line":106,"in_reply_to":"AAAAOn%2F%2Fij4%3D","updated":"2013-05-06 10:58:15.000000000","message":"Done","commit_id":"07b3871656062d342795ee98ba87f964938c153d"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"aab0ebd06fc9b36cf3726e5a9c2dfeccf2949e7a","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        supported service types."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        LOG.debug(_(\"Loading services supported by the core plugin\"))"},{"line_number":110,"context_line":"        # plugin should define a list of supported service types"},{"line_number":111,"context_line":"        # which consists of values from quantum.plugins.common.constants"},{"line_number":112,"context_line":"        if not hasattr(self.plugin, \"supported_service_types\"):"},{"line_number":113,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2Fij0%3D","line":110,"updated":"2013-05-06 10:56:03.000000000","message":"Nit:  \"dict\" vs \"list\".","commit_id":"07b3871656062d342795ee98ba87f964938c153d"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":107,"context_line":"        supported service types."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        LOG.debug(_(\"Loading services supported by the core plugin\"))"},{"line_number":110,"context_line":"        # plugin should define a list of supported service types"},{"line_number":111,"context_line":"        # which consists of values from quantum.plugins.common.constants"},{"line_number":112,"context_line":"        if not hasattr(self.plugin, \"supported_service_types\"):"},{"line_number":113,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2FihM%3D","line":110,"in_reply_to":"AAAAOn%2F%2Fij0%3D","updated":"2013-05-06 10:58:15.000000000","message":"In fact, it\u0027s a list, not dict:\nfor ex: [constants.LOADBALANCER, constants.FIREWALL]","commit_id":"07b3871656062d342795ee98ba87f964938c153d"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def _load_services_from_core_plugin(self):"},{"line_number":106,"context_line":"        \"\"\"Puts core plugin in service_plugin dict for"},{"line_number":107,"context_line":"        supported service types."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        LOG.debug(_(\"Loading services supported by the core plugin\"))"},{"line_number":110,"context_line":"        # plugin should define a list of supported service types"},{"line_number":111,"context_line":"        # which consists of values from quantum.plugins.common.constants"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FgyE%3D","line":108,"updated":"2013-05-07 10:42:51.000000000","message":"Consider better adherence to PEP 257.\nFirst line with summary, ending with period.\nBlank line.\nExtended description","commit_id":"b5c729de0ef3cc563be6c65a98b9b1e13f1109c9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def _load_services_from_core_plugin(self):"},{"line_number":106,"context_line":"        \"\"\"Puts core plugin in service_plugin dict for"},{"line_number":107,"context_line":"        supported service types."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        LOG.debug(_(\"Loading services supported by the core plugin\"))"},{"line_number":110,"context_line":"        # plugin should define a list of supported service types"},{"line_number":111,"context_line":"        # which consists of values from quantum.plugins.common.constants"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FgfA%3D","line":108,"in_reply_to":"AAAAOn%2F%2FgyE%3D","updated":"2013-05-07 14:11:23.000000000","message":"Done","commit_id":"b5c729de0ef3cc563be6c65a98b9b1e13f1109c9"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # plugin should define a list of supported service types"},{"line_number":111,"context_line":"        # which consists of values from quantum.plugins.common.constants"},{"line_number":112,"context_line":"        if not hasattr(self.plugin, \"supported_service_types\"):"},{"line_number":113,"context_line":"            return"},{"line_number":114,"context_line":"        for service_type in self.plugin.supported_service_types:"},{"line_number":115,"context_line":"            self.service_plugins[service_type] \u003d self.plugin"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fgx8%3D","line":113,"updated":"2013-05-07 10:42:51.000000000","message":"I wonder if we can infer this information from API extensions. It should be possible I believe.\n\nfor the time being, one could have a static map somewhere mapping extensions to services. So if a plugin implements an extension, it provides a specific service as well.\n\nthis will avoid adding yet another attribute to the plugin instance.","commit_id":"b5c729de0ef3cc563be6c65a98b9b1e13f1109c9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # plugin should define a list of supported service types"},{"line_number":111,"context_line":"        # which consists of values from quantum.plugins.common.constants"},{"line_number":112,"context_line":"        if not hasattr(self.plugin, \"supported_service_types\"):"},{"line_number":113,"context_line":"            return"},{"line_number":114,"context_line":"        for service_type in self.plugin.supported_service_types:"},{"line_number":115,"context_line":"            self.service_plugins[service_type] \u003d self.plugin"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fgew%3D","line":113,"in_reply_to":"AAAAOn%2F%2Fgx8%3D","updated":"2013-05-07 14:11:23.000000000","message":"Currently we can\u0027t infer it because extensions are not loaded at the moment. \nI agree mapping might be a better solution for now.\nI\u0027ll update plugins/common/constants.py with such mapping.","commit_id":"b5c729de0ef3cc563be6c65a98b9b1e13f1109c9"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":122,"context_line":"        # load services from the core plugin first"},{"line_number":123,"context_line":"        self._load_services_from_core_plugin()"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        plugin_providers \u003d cfg.CONF.service_plugins"},{"line_number":126,"context_line":"        LOG.debug(_(\"Loading service plugins: %s\"), plugin_providers)"},{"line_number":127,"context_line":"        for provider in plugin_providers:"},{"line_number":128,"context_line":"            if provider \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fgxw%3D","line":125,"updated":"2013-05-07 10:42:51.000000000","message":"It might be the case to consider being symmetric now when it comes to core and service plugins.\nJust like a core plugin might provide multiple services, a service plugin could too (Think about somebody that has a plugin for a service vm similar to cloudstack\u0027s virtual router).\n\nI think load_services_from_core_plugin can be generalized in order to load services from any plugin.","commit_id":"b5c729de0ef3cc563be6c65a98b9b1e13f1109c9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":122,"context_line":"        # load services from the core plugin first"},{"line_number":123,"context_line":"        self._load_services_from_core_plugin()"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        plugin_providers \u003d cfg.CONF.service_plugins"},{"line_number":126,"context_line":"        LOG.debug(_(\"Loading service plugins: %s\"), plugin_providers)"},{"line_number":127,"context_line":"        for provider in plugin_providers:"},{"line_number":128,"context_line":"            if provider \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fgeo%3D","line":125,"in_reply_to":"AAAAOn%2F%2Fgxw%3D","updated":"2013-05-07 14:11:23.000000000","message":"I would like not to touch the way of configuring plugins here because it would be a disruptive change with much bigger scope, I believe.\nIf then we leave the way of configuring as is and allow service plugin to implement core, that would be a confusion for deployers.\n\nSo probably this is worth to be a separate blueprint/change.","commit_id":"b5c729de0ef3cc563be6c65a98b9b1e13f1109c9"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":142,"context_line":"                raise Exception(_(\"Multiple plugins for service \""},{"line_number":143,"context_line":"                                \"%s were configured\"),"},{"line_number":144,"context_line":"                                plugin_inst.get_plugin_type())"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            self.service_plugins[plugin_inst.get_plugin_type()] \u003d plugin_inst"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            LOG.debug(_(\"Successfully loaded %(type)s plugin. \""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fgx4%3D","line":145,"updated":"2013-05-07 10:42:51.000000000","message":"It is probably now the right time to add a check to ensure the same service type is not defined twice.\nWe are not going to support multiple plugins for the same service type in this release, so it make sense to fail, I think.","commit_id":"b5c729de0ef3cc563be6c65a98b9b1e13f1109c9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":142,"context_line":"                raise Exception(_(\"Multiple plugins for service \""},{"line_number":143,"context_line":"                                \"%s were configured\"),"},{"line_number":144,"context_line":"                                plugin_inst.get_plugin_type())"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            self.service_plugins[plugin_inst.get_plugin_type()] \u003d plugin_inst"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            LOG.debug(_(\"Successfully loaded %(type)s plugin. \""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fges%3D","line":145,"in_reply_to":"AAAAOn%2F%2Fgx4%3D","updated":"2013-05-07 14:11:23.000000000","message":"The code above does exactly what you\u0027re saying.\nIn case service already provided by the core plugin - raise and quit.","commit_id":"b5c729de0ef3cc563be6c65a98b9b1e13f1109c9"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"        for ext_alias in self.plugin.supported_extension_aliases:"},{"line_number":113,"context_line":"            if ext_alias in constants.EXT_TO_SERVICE_MAPPING:"},{"line_number":114,"context_line":"                service_type \u003d constants.EXT_TO_SERVICE_MAPPING[ext_alias]"},{"line_number":115,"context_line":"                self.service_plugins[service_type] \u003d self.plugin"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _load_service_plugins(self):"},{"line_number":118,"context_line":"        \"\"\"Loads service plugins."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FYhg%3D","line":115,"updated":"2013-05-12 05:40:44.000000000","message":"Can we please add a log statement here to indicate that a particular service_type is supported by the core plugin?","commit_id":"033d02f50fb2365d92b912151e3702adfa2f781f"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"        for ext_alias in self.plugin.supported_extension_aliases:"},{"line_number":113,"context_line":"            if ext_alias in constants.EXT_TO_SERVICE_MAPPING:"},{"line_number":114,"context_line":"                service_type \u003d constants.EXT_TO_SERVICE_MAPPING[ext_alias]"},{"line_number":115,"context_line":"                self.service_plugins[service_type] \u003d self.plugin"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _load_service_plugins(self):"},{"line_number":118,"context_line":"        \"\"\"Loads service plugins."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FYgU%3D","line":115,"in_reply_to":"AAAAOn%2F%2FYhg%3D","updated":"2013-05-12 06:17:12.000000000","message":"Done","commit_id":"033d02f50fb2365d92b912151e3702adfa2f781f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":107,"context_line":"        LOG.debug(_(\"Loading services supported by the core plugin\"))"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        # supported service types are derived from supported extensions"},{"line_number":110,"context_line":"        if not hasattr(self.plugin, \"supported_extension_aliases\"):"},{"line_number":111,"context_line":"            return"},{"line_number":112,"context_line":"        for ext_alias in self.plugin.supported_extension_aliases:"},{"line_number":113,"context_line":"            if ext_alias in constants.EXT_TO_SERVICE_MAPPING:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FX58%3D","line":110,"updated":"2013-05-13 10:13:40.000000000","message":"commit message says supported_service_types check, but we are checking supported_extension_aliases, am I right or missing something?","commit_id":"272e0805ad5084fd328c1ae45539658335944e51"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":107,"context_line":"        LOG.debug(_(\"Loading services supported by the core plugin\"))"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        # supported service types are derived from supported extensions"},{"line_number":110,"context_line":"        if not hasattr(self.plugin, \"supported_extension_aliases\"):"},{"line_number":111,"context_line":"            return"},{"line_number":112,"context_line":"        for ext_alias in self.plugin.supported_extension_aliases:"},{"line_number":113,"context_line":"            if ext_alias in constants.EXT_TO_SERVICE_MAPPING:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FXz8%3D","line":110,"in_reply_to":"AAAAOn%2F%2FX58%3D","updated":"2013-05-13 10:23:11.000000000","message":"Ah, that was initial implementation that has checked for types, but then changed to test extension_aliases.\nI\u0027ll change commit message.","commit_id":"272e0805ad5084fd328c1ae45539658335944e51"}],"quantum/plugins/common/constants.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"#maps extension alias to service type"},{"line_number":24,"context_line":"EXT_TO_SERVICE_MAPPING \u003d {"},{"line_number":25,"context_line":"    \u0027dummy\u0027: DUMMY,"},{"line_number":26,"context_line":"    \u0027lbaas\u0027: LOADBALANCER"},{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# TODO(salvatore-orlando): Move these (or derive them) from conf file"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FXmA%3D","line":26,"updated":"2013-05-13 13:02:37.000000000","message":"I got more understand of the service plugin\u0027s implementation. and I think we can refactor it later. thanks","commit_id":"272e0805ad5084fd328c1ae45539658335944e51"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"#maps extension alias to service type"},{"line_number":24,"context_line":"EXT_TO_SERVICE_MAPPING \u003d {"},{"line_number":25,"context_line":"    \u0027dummy\u0027: DUMMY,"},{"line_number":26,"context_line":"    \u0027lbaas\u0027: LOADBALANCER"},{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# TODO(salvatore-orlando): Move these (or derive them) from conf file"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FX5o%3D","line":26,"updated":"2013-05-13 10:13:40.000000000","message":"must we add this more map? why not directly use COMMON_PREFIXES?","commit_id":"272e0805ad5084fd328c1ae45539658335944e51"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"#maps extension alias to service type"},{"line_number":24,"context_line":"EXT_TO_SERVICE_MAPPING \u003d {"},{"line_number":25,"context_line":"    \u0027dummy\u0027: DUMMY,"},{"line_number":26,"context_line":"    \u0027lbaas\u0027: LOADBALANCER"},{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# TODO(salvatore-orlando): Move these (or derive them) from conf file"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FXz4%3D","line":26,"in_reply_to":"AAAAOn%2F%2FX5o%3D","updated":"2013-05-13 10:23:11.000000000","message":"The purpose is different so the values could be different as well.","commit_id":"272e0805ad5084fd328c1ae45539658335944e51"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"#maps extension alias to service type"},{"line_number":24,"context_line":"EXT_TO_SERVICE_MAPPING \u003d {"},{"line_number":25,"context_line":"    \u0027dummy\u0027: DUMMY,"},{"line_number":26,"context_line":"    \u0027lbaas\u0027: LOADBALANCER"},{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# TODO(salvatore-orlando): Move these (or derive them) from conf file"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FXx4%3D","line":26,"in_reply_to":"AAAAOn%2F%2FXz4%3D","updated":"2013-05-13 10:45:18.000000000","message":"how come these values are different? aren\u0027t all the values in EXT_TO_SERVICE_MAPPING  the keys of COMMON_PREFIXES?","commit_id":"272e0805ad5084fd328c1ae45539658335944e51"}],"quantum/tests/unit/test_quantum_manager.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"aab0ebd06fc9b36cf3726e5a9c2dfeccf2949e7a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        cfg.CONF.set_override(\"core_plugin\","},{"line_number":83,"context_line":"                              test_config.get(\u0027plugin_name_v2\u0027,"},{"line_number":84,"context_line":"                                              DB_PLUGIN_KLASS))"},{"line_number":85,"context_line":"        self.assertRaises(Exception, QuantumManager.get_instance)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_multiple_plugins_specified_with_core_plugin(self):"},{"line_number":88,"context_line":"        cfg.CONF.set_override(\"service_plugins\","}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fgq8%3D","line":85,"updated":"2013-05-07 12:09:24.000000000","message":"Should there be a more specific exception type defined and used (here and on line 94)?","commit_id":"b5c729de0ef3cc563be6c65a98b9b1e13f1109c9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":"        cfg.CONF.set_override(\"core_plugin\","},{"line_number":83,"context_line":"                              test_config.get(\u0027plugin_name_v2\u0027,"},{"line_number":84,"context_line":"                                              DB_PLUGIN_KLASS))"},{"line_number":85,"context_line":"        self.assertRaises(Exception, QuantumManager.get_instance)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_multiple_plugins_specified_with_core_plugin(self):"},{"line_number":88,"context_line":"        cfg.CONF.set_override(\"service_plugins\","}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FgfE%3D","line":85,"in_reply_to":"AAAAOn%2F%2Fgq8%3D","updated":"2013-05-07 14:11:23.000000000","message":"No. Quantum manager raises generic Exception.","commit_id":"b5c729de0ef3cc563be6c65a98b9b1e13f1109c9"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":72,"context_line":"                       (dummy_plugin.DummyServicePlugin, types.ClassType)),"},{"line_number":73,"context_line":"            \"loaded plugin should be of type QuantumDummyPlugin\")"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def test_multiple_plugins_specified_for_service_type(self):"},{"line_number":76,"context_line":"        cfg.CONF.set_override(\"service_plugins\","},{"line_number":77,"context_line":"                              [\"quantum.tests.unit.dummy_plugin.\""},{"line_number":78,"context_line":"                               \"DummyServicePlugin\","}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FX0c%3D","line":75,"updated":"2013-05-13 10:13:40.000000000","message":"test_multiple_service_plugins_with_same_type?","commit_id":"272e0805ad5084fd328c1ae45539658335944e51"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":72,"context_line":"                       (dummy_plugin.DummyServicePlugin, types.ClassType)),"},{"line_number":73,"context_line":"            \"loaded plugin should be of type QuantumDummyPlugin\")"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def test_multiple_plugins_specified_for_service_type(self):"},{"line_number":76,"context_line":"        cfg.CONF.set_override(\"service_plugins\","},{"line_number":77,"context_line":"                              [\"quantum.tests.unit.dummy_plugin.\""},{"line_number":78,"context_line":"                               \"DummyServicePlugin\","}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FXzc%3D","line":75,"in_reply_to":"AAAAOn%2F%2FX0c%3D","updated":"2013-05-13 10:23:11.000000000","message":"I think current name is a bit better","commit_id":"272e0805ad5084fd328c1ae45539658335944e51"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                              DB_PLUGIN_KLASS))"},{"line_number":84,"context_line":"        self.assertRaises(Exception, QuantumManager.get_instance)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def test_multiple_plugins_specified_with_core_plugin(self):"},{"line_number":87,"context_line":"        cfg.CONF.set_override(\"service_plugins\","},{"line_number":88,"context_line":"                              [\"quantum.tests.unit.dummy_plugin.\""},{"line_number":89,"context_line":"                               \"DummyServicePlugin\"])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FX0Y%3D","line":86,"updated":"2013-05-13 10:13:40.000000000","message":"test_service_plugin_conflicting_with_core_plugin?","commit_id":"272e0805ad5084fd328c1ae45539658335944e51"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                              DB_PLUGIN_KLASS))"},{"line_number":84,"context_line":"        self.assertRaises(Exception, QuantumManager.get_instance)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def test_multiple_plugins_specified_with_core_plugin(self):"},{"line_number":87,"context_line":"        cfg.CONF.set_override(\"service_plugins\","},{"line_number":88,"context_line":"                              [\"quantum.tests.unit.dummy_plugin.\""},{"line_number":89,"context_line":"                               \"DummyServicePlugin\"])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FXzY%3D","line":86,"in_reply_to":"AAAAOn%2F%2FX0Y%3D","updated":"2013-05-13 10:23:11.000000000","message":"Done","commit_id":"272e0805ad5084fd328c1ae45539658335944e51"}]}
