From dfc0f749c63a0d75e0df713bfee2a2c444afd051 2014-12-18 06:59:19 From: Scott Sanderson Date: 2014-12-18 06:59:19 Subject: [PATCH] MAINT: Use `Type` instead of `DottedObjectName` for managers. `Type` is strictly more powerful than `DottedObjectName` and is easier for users to override. --- diff --git a/IPython/html/notebookapp.py b/IPython/html/notebookapp.py index 36e0f2e..37265ed 100644 --- a/IPython/html/notebookapp.py +++ b/IPython/html/notebookapp.py @@ -60,6 +60,7 @@ from IPython.html import ( from .base.handlers import Template404 from .log import log_request from .services.kernels.kernelmanager import MappingKernelManager +from .services.config import ConfigManager from .services.contents.manager import ContentsManager from .services.contents.filemanager import FileContentsManager from .services.clusters.clustermanager import ClusterManager @@ -82,7 +83,7 @@ from IPython.utils import submodule from IPython.utils.process import check_pid from IPython.utils.traitlets import ( Dict, Unicode, Integer, List, Bool, Bytes, Instance, - DottedObjectName, TraitError, + DottedObjectName, TraitError, Type, ) from IPython.utils import py3compat from IPython.utils.path import filefind, get_ipython_dir @@ -614,24 +615,30 @@ class NotebookApp(BaseIPythonApplication): else: self.log.info("Using MathJax: %s", new) - contents_manager_class = DottedObjectName('IPython.html.services.contents.filemanager.FileContentsManager', + contents_manager_class = Type( + default_value=FileContentsManager, + klass=ContentsManager, config=True, help='The notebook manager class to use.' ) - kernel_manager_class = DottedObjectName('IPython.html.services.kernels.kernelmanager.MappingKernelManager', + kernel_manager_class = Type( + default_value=MappingKernelManager, config=True, help='The kernel manager class to use.' ) - session_manager_class = DottedObjectName('IPython.html.services.sessions.sessionmanager.SessionManager', + session_manager_class = Type( + default_value=SessionManager, config=True, help='The session manager class to use.' ) - cluster_manager_class = DottedObjectName('IPython.html.services.clusters.clustermanager.ClusterManager', + cluster_manager_class = Type( + default_value=ClusterManager, config=True, help='The cluster manager class to use.' ) - config_manager_class = DottedObjectName('IPython.html.services.config.manager.ConfigManager', + config_manager_class = Type( + default_value=ConfigManager, config = True, help='The config manager class to use' ) @@ -641,15 +648,17 @@ class NotebookApp(BaseIPythonApplication): def _kernel_spec_manager_default(self): return KernelSpecManager(ipython_dir=self.ipython_dir) - kernel_spec_manager_class = DottedObjectName('IPython.kernel.kernelspec.KernelSpecManager', - config=True, - help=""" - The kernel spec manager class to use. Should be a subclass - of `IPython.kernel.kernelspec.KernelSpecManager`. + kernel_spec_manager_class = Type( + default_value=KernelSpecManager, + config=True, + help=""" + The kernel spec manager class to use. Should be a subclass + of `IPython.kernel.kernelspec.KernelSpecManager`. - The Api of KernelSpecManager is provisional and might change - without warning between this version of IPython and the next stable one. - """) + The Api of KernelSpecManager is provisional and might change + without warning between this version of IPython and the next stable one. + """ + ) login_handler = DottedObjectName('IPython.html.auth.login.LoginHandler', config=True, @@ -744,29 +753,38 @@ class NotebookApp(BaseIPythonApplication): def init_configurables(self): # force Session default to be secure default_secure(self.config) - kls = import_item(self.kernel_spec_manager_class) - self.kernel_spec_manager = kls(ipython_dir=self.ipython_dir) - kls = import_item(self.kernel_manager_class) - self.kernel_manager = kls( - parent=self, log=self.log, ipython_kernel_argv=self.ipython_kernel_argv, - connection_dir = self.profile_dir.security_dir, + self.kernel_spec_manager = self.kernel_spec_manager_class( + ipython_dir=self.ipython_dir, + ) + self.kernel_manager = self.kernel_manager_class( + parent=self, + log=self.log, + ipython_kernel_argv=self.ipython_kernel_argv, + connection_dir=self.profile_dir.security_dir, + ) + self.contents_manager = self.contents_manager_class( + parent=self, + log=self.log, + ) + self.session_manager = self.session_manager_class( + parent=self, + log=self.log, + kernel_manager=self.kernel_manager, + contents_manager=self.contents_manager, + ) + self.cluster_manager = self.cluster_manager_class( + parent=self, + log=self.log, ) - kls = import_item(self.contents_manager_class) - self.contents_manager = kls(parent=self, log=self.log) - kls = import_item(self.session_manager_class) - self.session_manager = kls(parent=self, log=self.log, - kernel_manager=self.kernel_manager, - contents_manager=self.contents_manager) - kls = import_item(self.cluster_manager_class) - self.cluster_manager = kls(parent=self, log=self.log) - self.cluster_manager.update_profiles() self.login_handler_class = import_item(self.login_handler) self.logout_handler_class = import_item(self.logout_handler) - kls = import_item(self.config_manager_class) - self.config_manager = kls(parent=self, log=self.log, - profile_dir=self.profile_dir.location) + self.config_manager = self.config_manager_class( + parent=self, + log=self.log, + profile_dir=self.profile_dir.location, + ) def init_logging(self): # This prevents double log messages because tornado use a root logger that