diff --git a/notebook/base/handlers.py b/notebook/base/handlers.py index 743f7bac73..e3400eba11 100755 --- a/notebook/base/handlers.py +++ b/notebook/base/handlers.py @@ -301,7 +301,7 @@ def allow_credentials(self): def set_default_headers(self): """Add CORS headers, if defined""" - super(IPythonHandler, self).set_default_headers() + super().set_default_headers() if self.allow_origin: self.set_header("Access-Control-Allow-Origin", self.allow_origin) elif self.allow_origin_pat: @@ -442,7 +442,7 @@ def check_xsrf_cookie(self): # Servers without authentication are vulnerable to XSRF return try: - return super(IPythonHandler, self).check_xsrf_cookie() + return super().check_xsrf_cookie() except web.HTTPError as e: if self.request.method in {'GET', 'HEAD'}: # Consider Referer a sufficient cross-origin check for GET requests @@ -496,7 +496,7 @@ def check_host(self): def prepare(self): if not self.check_host(): raise web.HTTPError(403) - return super(IPythonHandler, self).prepare() + return super().prepare() #--------------------------------------------------------------- # template rendering @@ -591,7 +591,7 @@ class APIHandler(IPythonHandler): def prepare(self): if not self.check_origin(): raise web.HTTPError(404) - return super(APIHandler, self).prepare() + return super().prepare() def write_error(self, status_code, **kwargs): """APIHandler errors are JSON, not human pages""" @@ -618,7 +618,7 @@ def get_current_user(self): # preserve _user_cache so we don't raise more than once if hasattr(self, '_user_cache'): return self._user_cache - self._user_cache = user = super(APIHandler, self).get_current_user() + self._user_cache = user = super().get_current_user() return user def get_login_url(self): @@ -627,12 +627,12 @@ def get_login_url(self): # instead of redirecting, raise 403 instead. if not self.current_user: raise web.HTTPError(403) - return super(APIHandler, self).get_login_url() + return super().get_login_url() @property def content_security_policy(self): csp = '; '.join([ - super(APIHandler, self).content_security_policy, + super().content_security_policy, "default-src 'none'", ]) return csp @@ -653,7 +653,7 @@ def update_api_activity(self): def finish(self, *args, **kwargs): self.update_api_activity() self.set_header('Content-Type', 'application/json') - return super(APIHandler, self).finish(*args, **kwargs) + return super().finish(*args, **kwargs) def options(self, *args, **kwargs): if 'Access-Control-Allow-Headers' in self.settings.get('headers', {}): @@ -700,13 +700,12 @@ class AuthenticatedFileHandler(IPythonHandler, web.StaticFileHandler): def content_security_policy(self): # In case we're serving HTML/SVG, confine any Javascript to a unique # origin so it can't interact with the notebook server. - return super(AuthenticatedFileHandler, self).content_security_policy + \ - "; sandbox allow-scripts" + return super().content_security_policy + "; sandbox allow-scripts" @web.authenticated def head(self, path): self.check_xsrf_cookie() - return super(AuthenticatedFileHandler, self).head(path) + return super().head(path) @web.authenticated def get(self, path): @@ -731,10 +730,10 @@ def get_content_type(self): if cur_mime == 'text/plain': return 'text/plain; charset=UTF-8' else: - return super(AuthenticatedFileHandler, self).get_content_type() + return super().get_content_type() def set_headers(self): - super(AuthenticatedFileHandler, self).set_headers() + super().set_headers() # disable browser caching, rely on 304 replies for savings if "v" not in self.request.arguments: self.add_header("Cache-Control", "no-cache") @@ -749,7 +748,7 @@ def validate_absolute_path(self, root, absolute_path): Adding to tornado's own handling, forbids the serving of hidden files. """ - abs_path = super(AuthenticatedFileHandler, self).validate_absolute_path(root, absolute_path) + abs_path = super().validate_absolute_path(root, absolute_path) abs_root = os.path.abspath(root) if is_hidden(abs_path, abs_root) and not self.contents_manager.allow_hidden: self.log.info("Refusing to serve hidden file, via 404 Error, use flag 'ContentsManager.allow_hidden' to enable") @@ -795,7 +794,7 @@ class FileFindHandler(IPythonHandler, web.StaticFileHandler): _static_paths = {} def set_headers(self): - super(FileFindHandler, self).set_headers() + super().set_headers() # disable browser caching, rely on 304 replies for savings if "v" not in self.request.arguments or \ any(self.request.path.startswith(path) for path in self.no_cache_paths): @@ -842,7 +841,7 @@ def validate_absolute_path(self, root, absolute_path): if (absolute_path + os.sep).startswith(root): break - return super(FileFindHandler, self).validate_absolute_path(root, absolute_path) + return super().validate_absolute_path(root, absolute_path) class APIVersionHandler(APIHandler): diff --git a/notebook/base/zmqhandlers.py b/notebook/base/zmqhandlers.py index 327fdd5598..dc3a7b69e2 100644 --- a/notebook/base/zmqhandlers.py +++ b/notebook/base/zmqhandlers.py @@ -289,7 +289,7 @@ def get(self, *args, **kwargs): # assign and yield in two step to avoid tornado 3 issues res = self.pre_get() yield maybe_future(res) - res = super(AuthenticatedZMQStreamHandler, self).get(*args, **kwargs) + res = super().get(*args, **kwargs) yield maybe_future(res) def initialize(self): diff --git a/notebook/bundler/bundlerextensions.py b/notebook/bundler/bundlerextensions.py index 576336c3ad..2ac346f971 100644 --- a/notebook/bundler/bundlerextensions.py +++ b/notebook/bundler/bundlerextensions.py @@ -294,7 +294,7 @@ class BundlerExtensionApp(BaseExtensionApp): def start(self): """Perform the App's functions as configured""" - super(BundlerExtensionApp, self).start() + super().start() # The above should have called a subcommand and raised NoStart; if we # get here, it didn't, so we should self.log.info a message. diff --git a/notebook/files/handlers.py b/notebook/files/handlers.py index 3b2570a185..b412cd84e5 100644 --- a/notebook/files/handlers.py +++ b/notebook/files/handlers.py @@ -26,8 +26,7 @@ class FilesHandler(IPythonHandler): def content_security_policy(self): # In case we're serving HTML/SVG, confine any Javascript to a unique # origin so it can't interact with the notebook server. - return super(FilesHandler, self).content_security_policy + \ - "; sandbox allow-scripts" + return super().content_security_policy + "; sandbox allow-scripts" @web.authenticated def head(self, path): diff --git a/notebook/gateway/handlers.py b/notebook/gateway/handlers.py index 6576c3cefc..75de066692 100644 --- a/notebook/gateway/handlers.py +++ b/notebook/gateway/handlers.py @@ -68,7 +68,7 @@ def initialize(self): def get(self, kernel_id, *args, **kwargs): self.authenticate() self.kernel_id = cast_unicode(kernel_id, 'ascii') - yield super(WebSocketChannelsHandler, self).get(kernel_id=kernel_id, *args, **kwargs) + yield super().get(kernel_id=kernel_id, *args, **kwargs) def send_ping(self): if self.ws_connection is None and self.ping_callback is not None: @@ -97,7 +97,7 @@ def write_message(self, message, binary=False): if self.ws_connection: # prevent WebSocketClosedError if isinstance(message, bytes): binary = True - super(WebSocketChannelsHandler, self).write_message(message, binary=binary) + super().write_message(message, binary=binary) elif self.log.isEnabledFor(logging.DEBUG): msg_summary = WebSocketChannelsHandler._get_message_summary(json_decode(utf8(message))) self.log.debug("Notebook client closed websocket connection - message dropped: {}".format(msg_summary)) @@ -105,7 +105,7 @@ def write_message(self, message, binary=False): def on_close(self): self.log.debug("Closing websocket connection %s", self.request.path) self.gateway.on_close() - super(WebSocketChannelsHandler, self).on_close() + super().on_close() @staticmethod def _get_message_summary(message): @@ -129,7 +129,7 @@ class GatewayWebSocketClient(LoggingConfigurable): """Proxy web socket connection to a kernel/enterprise gateway.""" def __init__(self, **kwargs): - super(GatewayWebSocketClient, self).__init__(**kwargs) + super().__init__(**kwargs) self.kernel_id = None self.ws = None self.ws_future = Future() diff --git a/notebook/gateway/managers.py b/notebook/gateway/managers.py index 30382e8c0e..856cea494e 100644 --- a/notebook/gateway/managers.py +++ b/notebook/gateway/managers.py @@ -205,7 +205,7 @@ def validate_cert_default(self): return bool(os.environ.get(self.validate_cert_env, str(self.validate_cert_default_value)) not in ['no', 'false']) def __init__(self, **kwargs): - super(GatewayClient, self).__init__(**kwargs) + super().__init__(**kwargs) self._static_args = {} # initialized on first use env_whitelist_default_value = '' @@ -310,7 +310,7 @@ class GatewayKernelManager(MappingKernelManager): _kernels = {} def __init__(self, **kwargs): - super(GatewayKernelManager, self).__init__(**kwargs) + super().__init__(**kwargs) self.base_endpoint = url_path_join(GatewayClient.instance().url, GatewayClient.instance().kernels_endpoint) def __contains__(self, kernel_id): @@ -507,7 +507,7 @@ def shutdown_all(self, now=False): class GatewayKernelSpecManager(KernelSpecManager): def __init__(self, **kwargs): - super(GatewayKernelSpecManager, self).__init__(**kwargs) + super().__init__(**kwargs) base_endpoint = url_path_join(GatewayClient.instance().url, GatewayClient.instance().kernelspecs_endpoint) diff --git a/notebook/jstest.py b/notebook/jstest.py index 6849c9fd04..0447af8a54 100644 --- a/notebook/jstest.py +++ b/notebook/jstest.py @@ -45,7 +45,7 @@ class StreamCapturer(Thread): daemon = True # Don't hang if main thread crashes started = False def __init__(self, echo=False): - super(StreamCapturer, self).__init__() + super().__init__() self.echo = echo self.streams = [] self.buffer = BytesIO() @@ -264,14 +264,14 @@ def launch(self, buffer_output): # If the engine is SlimerJS, we need to buffer the output because # SlimerJS does not support exit codes, so CasperJS always returns 0. if self.engine == 'slimerjs' and not buffer_output: - return super(JSController, self).launch(capture_output=True) + return super().launch(capture_output=True) else: - return super(JSController, self).launch(buffer_output=buffer_output) + return super().launch(buffer_output=buffer_output) def wait(self, *pargs, **kwargs): """Wait for the JSController to finish""" - ret = super(JSController, self).wait(*pargs, **kwargs) + ret = super().wait(*pargs, **kwargs) # If this is a SlimerJS controller, check the captured stdout for # errors. Otherwise, just return the return code. if self.engine == 'slimerjs': diff --git a/notebook/nbconvert/handlers.py b/notebook/nbconvert/handlers.py index faa1a6931e..24a3f093fb 100644 --- a/notebook/nbconvert/handlers.py +++ b/notebook/nbconvert/handlers.py @@ -83,8 +83,7 @@ class NbconvertFileHandler(IPythonHandler): def content_security_policy(self): # In case we're serving HTML/SVG, confine any Javascript to a unique # origin so it can't interact with the notebook server. - return super(NbconvertFileHandler, self).content_security_policy + \ - "; sandbox allow-scripts" + return super().content_security_policy + "; sandbox allow-scripts" @web.authenticated @gen.coroutine @@ -158,8 +157,7 @@ class NbconvertPostHandler(IPythonHandler): def content_security_policy(self): # In case we're serving HTML/SVG, confine any Javascript to a unique # origin so it can't interact with the notebook server. - return super(NbconvertPostHandler, self).content_security_policy + \ - "; sandbox allow-scripts" + return super().content_security_policy + "; sandbox allow-scripts" @web.authenticated def post(self, format): diff --git a/notebook/nbextensions.py b/notebook/nbextensions.py index c6dad116b1..223aeff0e5 100644 --- a/notebook/nbextensions.py +++ b/notebook/nbextensions.py @@ -980,7 +980,7 @@ class NBExtensionApp(BaseExtensionApp): def start(self): """Perform the App's functions as configured""" - super(NBExtensionApp, self).start() + super().start() # The above should have called a subcommand and raised NoStart; if we # get here, it didn't, so we should self.log.info a message. diff --git a/notebook/notebookapp.py b/notebook/notebookapp.py index dc7c84c572..43f3d7f5e0 100755 --- a/notebook/notebookapp.py +++ b/notebook/notebookapp.py @@ -190,7 +190,7 @@ def __init__(self, jupyter_app, kernel_manager, contents_manager, if settings['autoreload']: log.info('Autoreload enabled: the webapp will restart when any Python src file changes.') - super(NotebookWebApplication, self).__init__(handlers, **settings) + super().__init__(handlers, **settings) def init_settings(self, jupyter_app, kernel_manager, contents_manager, session_manager, kernel_spec_manager, @@ -511,7 +511,7 @@ class NbserverStopApp(JupyterApp): help="UNIX socket of the server to be killed.") def parse_command_line(self, argv=None): - super(NbserverStopApp, self).parse_command_line(argv) + super().parse_command_line(argv) if self.extra_args: try: self.port = int(self.extra_args[0]) @@ -1523,7 +1523,7 @@ def _update_server_extensions(self, change): terminals_available = False def parse_command_line(self, argv=None): - super(NotebookApp, self).parse_command_line(argv) + super().parse_command_line(argv) if self.extra_args: arg0 = self.extra_args[0] @@ -2026,7 +2026,7 @@ def _init_asyncio_patch(self): def initialize(self, argv=None): self._init_asyncio_patch() - super(NotebookApp, self).initialize(argv) + super().initialize(argv) self.init_logging() if self._dispatching: return @@ -2192,7 +2192,7 @@ def start(self): This method takes no arguments so all configuration and initialization must be done prior to calling this method.""" - super(NotebookApp, self).start() + super().start() if not self.allow_root: # check if we are running as root, and abort if it's not allowed diff --git a/notebook/serverextensions.py b/notebook/serverextensions.py index 7ca1fb03b2..0e3084a92f 100644 --- a/notebook/serverextensions.py +++ b/notebook/serverextensions.py @@ -291,7 +291,7 @@ class ServerExtensionApp(BaseExtensionApp): def start(self): """Perform the App's actions as configured""" - super(ServerExtensionApp, self).start() + super().start() # The above should have called a subcommand and raised NoStart; if we # get here, it didn't, so we should self.log.info a message. diff --git a/notebook/services/contents/largefilemanager.py b/notebook/services/contents/largefilemanager.py index a2b27ed99d..6779a0b5c2 100644 --- a/notebook/services/contents/largefilemanager.py +++ b/notebook/services/contents/largefilemanager.py @@ -27,7 +27,7 @@ def save(self, model, path=''): if chunk == 1: self.log.debug("Saving %s", os_path) self.run_pre_save_hook(model=model, path=path) - super(LargeFileManager, self)._save_file(os_path, model['content'], model.get('format')) + super()._save_file(os_path, model['content'], model.get('format')) else: self._save_large_file(os_path, model['content'], model.get('format')) except web.HTTPError: @@ -43,7 +43,7 @@ def save(self, model, path=''): self.run_post_save_hook(model=model, os_path=os_path) return model else: - return super(LargeFileManager, self).save(model, path) + return super().save(model, path) def _save_large_file(self, os_path, content, format): """Save content of a generic file.""" diff --git a/notebook/services/kernels/handlers.py b/notebook/services/kernels/handlers.py index bca99ce1b1..73da737b15 100644 --- a/notebook/services/kernels/handlers.py +++ b/notebook/services/kernels/handlers.py @@ -190,7 +190,7 @@ def _finish_kernel_info(self, info): self._kernel_info_future.set_result(info) def initialize(self): - super(ZMQChannelsHandler, self).initialize() + super().initialize() self.zmq_stream = None self.channels = {} self.kernel_id = None @@ -212,7 +212,7 @@ def initialize(self): @gen.coroutine def pre_get(self): # authenticate first - super(ZMQChannelsHandler, self).pre_get() + super().pre_get() # check session collision: yield self._register_session() # then request kernel info, waiting up to a certain time before giving up. @@ -236,7 +236,7 @@ def give_up(): @gen.coroutine def get(self, kernel_id): self.kernel_id = cast_unicode(kernel_id, 'ascii') - yield super(ZMQChannelsHandler, self).get(kernel_id=kernel_id) + yield super().get(kernel_id=kernel_id) @gen.coroutine def _register_session(self): @@ -254,7 +254,7 @@ def _register_session(self): self._open_sessions[self.session_key] = self def open(self, kernel_id): - super(ZMQChannelsHandler, self).open() + super().open() km = self.kernel_manager km.notify_connect(kernel_id) @@ -419,10 +419,10 @@ def write_stderr(error_message): self._iopub_window_byte_count -= byte_count self._iopub_window_byte_queue.pop(-1) return - super(ZMQChannelsHandler, self)._on_zmq_reply(stream, msg) + super()._on_zmq_reply(stream, msg) def close(self): - super(ZMQChannelsHandler, self).close() + super().close() return self._close_future def on_close(self): diff --git a/notebook/services/sessions/tests/test_sessionmanager.py b/notebook/services/sessions/tests/test_sessionmanager.py index 97331ebf9b..719bbaef70 100644 --- a/notebook/services/sessions/tests/test_sessionmanager.py +++ b/notebook/services/sessions/tests/test_sessionmanager.py @@ -21,7 +21,7 @@ def __init__(self, kernel_name='python'): class DummyMKM(MappingKernelManager): """MappingKernelManager interface that doesn't start kernels, for testing""" def __init__(self, *args, **kwargs): - super(DummyMKM, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.id_letters = iter(u'ABCDEFGHIJK') def _new_id(self): diff --git a/notebook/terminal/handlers.py b/notebook/terminal/handlers.py index dd305a75b8..c201f56077 100644 --- a/notebook/terminal/handlers.py +++ b/notebook/terminal/handlers.py @@ -33,14 +33,14 @@ def get(self, *args, **kwargs): raise web.HTTPError(403) if not args[0] in self.term_manager.terminals: raise web.HTTPError(404) - return super(TermSocket, self).get(*args, **kwargs) + return super().get(*args, **kwargs) def on_message(self, message): - super(TermSocket, self).on_message(message) + super().on_message(message) self._update_activity() def write_message(self, message, binary=False): - super(TermSocket, self).write_message(message, binary=binary) + super().write_message(message, binary=binary) self._update_activity() def _update_activity(self): diff --git a/notebook/terminal/terminalmanager.py b/notebook/terminal/terminalmanager.py index 0521b6a848..c1bdecd8db 100644 --- a/notebook/terminal/terminalmanager.py +++ b/notebook/terminal/terminalmanager.py @@ -39,7 +39,7 @@ class TerminalManager(LoggingConfigurable, NamedTermManager): # Methods for managing terminals # ------------------------------------------------------------------------- def __init__(self, *args, **kwargs): - super(TerminalManager, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def create(self): """Create a new terminal.""" @@ -73,7 +73,7 @@ def list(self): async def terminate(self, name, force=False): """Terminate terminal 'name'.""" self._check_terminal(name) - await super(TerminalManager, self).terminate(name, force=force) + await super().terminate(name, force=force) # Decrease the metric below by one # because a terminal has been shutdown diff --git a/notebook/tests/test_gateway.py b/notebook/tests/test_gateway.py index bc42014e44..2bf0089ca8 100644 --- a/notebook/tests/test_gateway.py +++ b/notebook/tests/test_gateway.py @@ -161,7 +161,7 @@ def get_argv(cls): def setUp(self): kwargs = dict() GatewayClient.instance().load_connection_args(**kwargs) - super(TestGateway, self).setUp() + super().setUp() def test_gateway_options(self): nt.assert_equal(self.notebook.gateway_config.gateway_enabled, True) diff --git a/notebook/tests/test_notebookapp.py b/notebook/tests/test_notebookapp.py index d8543feed9..58bd7261b7 100644 --- a/notebook/tests/test_notebookapp.py +++ b/notebook/tests/test_notebookapp.py @@ -142,7 +142,7 @@ def test_notebook_password(): class TestingStopApp(notebookapp.NbserverStopApp): """For testing the logic of NbserverStopApp.""" def __init__(self, **kwargs): - super(TestingStopApp, self).__init__(**kwargs) + super().__init__(**kwargs) self.servers_shut_down = [] def shutdown_server(self, server): diff --git a/notebook/tests/test_serverextensions.py b/notebook/tests/test_serverextensions.py index d279b81b3e..9c2bf95dde 100644 --- a/notebook/tests/test_serverextensions.py +++ b/notebook/tests/test_serverextensions.py @@ -159,7 +159,7 @@ class TestOrderedServerExtension(MockEnvTestCase): """ def setUp(self): - super(TestOrderedServerExtension, self).setUp() + super().setUp() mockextension1 = SimpleNamespace() mockextension2 = SimpleNamespace() @@ -179,7 +179,7 @@ def load_jupyter_server_extension(obj): sys.modules['mockextension1'] = mockextension1 def tearDown(self): - super(TestOrderedServerExtension, self).tearDown() + super().tearDown() del sys.modules['mockextension2'] del sys.modules['mockextension1']