diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5e2e5fae5..33dee0d65 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,7 +47,8 @@ repos: - id: mypy exclude: "ipykernel.*tests" args: ["--config-file", "pyproject.toml"] - additional_dependencies: [tornado, jupyter_client, pytest] + additional_dependencies: + [tornado, jupyter_client, pytest, traitlets, jupyter_core] stages: [manual] - repo: https://github.com/pycqa/flake8 diff --git a/ipykernel/inprocess/ipkernel.py b/ipykernel/inprocess/ipkernel.py index d2b2e8f32..aaaa5099f 100644 --- a/ipykernel/inprocess/ipkernel.py +++ b/ipykernel/inprocess/ipkernel.py @@ -48,7 +48,7 @@ class InProcessKernel(IPythonKernel): shell_class = Type(allow_none=True) _underlying_iopub_socket = Instance(DummySocket, ()) - iopub_thread = Instance(IOPubThread) + iopub_thread: IOPubThread = Instance(IOPubThread) # type:ignore[assignment] shell_stream = Instance(DummySocket, ()) @@ -58,13 +58,13 @@ def _default_iopub_thread(self): thread.start() return thread - iopub_socket = Instance(BackgroundSocket) + iopub_socket: BackgroundSocket = Instance(BackgroundSocket) # type:ignore[assignment] @default("iopub_socket") def _default_iopub_socket(self): return self.iopub_thread.background_socket - stdin_socket = Instance(DummySocket, ()) + stdin_socket = Instance(DummySocket, ()) # type:ignore[assignment] def __init__(self, **traits): super().__init__(**traits) @@ -127,6 +127,7 @@ def _redirected_io(self): def _io_dispatch(self, change): """Called when a message is sent to the IO socket.""" + assert self.iopub_socket.io_thread is not None ident, msg = self.session.recv(self.iopub_socket.io_thread.socket, copy=False) for frontend in self.frontends: frontend.iopub_channel.call_handlers(msg) @@ -163,7 +164,9 @@ def _default_stderr(self): class InProcessInteractiveShell(ZMQInteractiveShell): - kernel = Instance("ipykernel.inprocess.ipkernel.InProcessKernel", allow_none=True) + kernel: InProcessKernel = Instance( + "ipykernel.inprocess.ipkernel.InProcessKernel", allow_none=True + ) # type:ignore[assignment] # ------------------------------------------------------------------------- # InteractiveShell interface diff --git a/ipykernel/kernelapp.py b/ipykernel/kernelapp.py index 1f5804871..8e6084671 100644 --- a/ipykernel/kernelapp.py +++ b/ipykernel/kernelapp.py @@ -28,7 +28,7 @@ from jupyter_client.session import Session, session_aliases, session_flags from jupyter_core.paths import jupyter_runtime_dir from tornado import ioloop -from traitlets import ( +from traitlets.traitlets import ( Any, Bool, Dict, diff --git a/ipykernel/kernelbase.py b/ipykernel/kernelbase.py index 74e0ba71e..617729cf8 100644 --- a/ipykernel/kernelbase.py +++ b/ipykernel/kernelbase.py @@ -38,7 +38,8 @@ from jupyter_client.session import Session from tornado import ioloop from tornado.queues import Queue, QueueEmpty -from traitlets import ( +from traitlets.config.configurable import SingletonConfigurable +from traitlets.traitlets import ( Any, Bool, Dict, @@ -51,7 +52,6 @@ default, observe, ) -from traitlets.config.configurable import SingletonConfigurable from zmq.eventloop.zmqstream import ZMQStream from ipykernel.jsonutil import json_clean @@ -95,6 +95,10 @@ def _update_eventloop(self, change): """ ) + implementation: str + implementation_version: str + banner: str + @default("shell_streams") def _shell_streams_default(self): warnings.warn( @@ -131,7 +135,7 @@ def _shell_streams_changed(self, change): iopub_socket = Any() iopub_thread = Any() stdin_socket = Any() - log = Instance(logging.Logger, allow_none=True) + log: logging.Logger = Instance(logging.Logger, allow_none=True) # type:ignore[assignment] # identities: int_id = Integer(-1) @@ -263,7 +267,7 @@ def __init__(self, **kwargs): for msg_type in self.control_msg_types: self.control_handlers[msg_type] = getattr(self, msg_type) - self.control_queue: Queue[Any] = Queue() + self.control_queue: Queue[t.Any] = Queue() def dispatch_control(self, msg): self.control_queue.put_nowait(msg) @@ -531,7 +535,7 @@ def schedule_dispatch(self, dispatch, *args): def start(self): """register dispatchers for streams""" self.io_loop = ioloop.IOLoop.current() - self.msg_queue: Queue[Any] = Queue() + self.msg_queue: Queue[t.Any] = Queue() self.io_loop.add_callback(self.dispatch_queue) self.control_stream.on_recv(self.dispatch_control, copy=False) @@ -866,7 +870,7 @@ async def comm_info_request(self, stream, ident, parent): if hasattr(self, "comm_manager"): comms = { k: dict(target_name=v.target_name) - for (k, v) in self.comm_manager.comms.items() + for (k, v) in self.comm_manager.comms.items() # type:ignore[attr-defined] if v.target_name == target_name or target_name is None } else: diff --git a/ipykernel/kernelspec.py b/ipykernel/kernelspec.py index 585d87127..ac8552afe 100644 --- a/ipykernel/kernelspec.py +++ b/ipykernel/kernelspec.py @@ -12,6 +12,7 @@ import tempfile from jupyter_client.kernelspec import KernelSpecManager +from traitlets import Unicode from .debugger import _is_debugpy_available @@ -161,7 +162,7 @@ def install( class InstallIPythonKernelSpecApp(Application): """Dummy app wrapping argparse""" - name = "ipython-kernel-install" + name = Unicode("ipython-kernel-install") def initialize(self, argv=None): if argv is None: