Skip to content

Commit f127e41

Browse files
Add typing hints to session managers and handler (#1135)
* Add typing hints to session managers and handler * Explicitly return None from start_session * Update MappingKernelManager to RemoteMappingKernelManager * Use __future__ to resolve circular import * Remove unused imports * Remove import statement for RemoteMappingKernelManager and add noqa F821
1 parent 3c8208b commit f127e41

File tree

3 files changed

+72
-54
lines changed

3 files changed

+72
-54
lines changed

enterprise_gateway/services/sessions/handlers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class SessionRootHandler(
1717
JSON errors.
1818
"""
1919

20-
async def get(self):
20+
async def get(self) -> None:
2121
"""Overrides the super class method to honor the kernel listing
2222
configuration setting.
2323

enterprise_gateway/services/sessions/kernelsessionmanager.py

Lines changed: 41 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
# Distributed under the terms of the Modified BSD License.
33
"""Session manager that keeps all its metadata in memory."""
44

5+
from __future__ import annotations
6+
57
import getpass
68
import json
79
import os
@@ -49,7 +51,7 @@ class KernelSessionManager(LoggingConfigurable):
4951
)
5052

5153
@default("enable_persistence")
52-
def session_persistence_default(self):
54+
def session_persistence_default(self) -> bool:
5355
return bool(
5456
os.getenv(
5557
self.session_persistence_env, str(self.session_persistence_default_value)
@@ -66,16 +68,16 @@ def session_persistence_default(self):
6668
)
6769

6870
@default("persistence_root")
69-
def persistence_root_default(self):
71+
def persistence_root_default(self) -> str:
7072
return os.getenv(self.persistence_root_env, "/")
7173

72-
def __init__(self, kernel_manager, **kwargs):
74+
def __init__(self, kernel_manager: RemoteMappingKernelManager, **kwargs): # noqa: F821
7375
super().__init__(**kwargs)
7476
self.kernel_manager = kernel_manager
7577
self._sessions = dict()
7678
self._sessionsByUser = dict()
7779

78-
def create_session(self, kernel_id, **kwargs):
80+
def create_session(self, kernel_id: str, **kwargs) -> None:
7981
"""
8082
Creates a session associated with this kernel.
8183
@@ -106,7 +108,7 @@ def create_session(self, kernel_id, **kwargs):
106108
)
107109
self._save_session(kernel_id, kernel_session)
108110

109-
def refresh_session(self, kernel_id):
111+
def refresh_session(self, kernel_id: str) -> None:
110112
"""
111113
Refreshes the session from its persisted state. Called on kernel restarts.
112114
"""
@@ -123,7 +125,7 @@ def refresh_session(self, kernel_id):
123125
)
124126
self._save_session(kernel_id, kernel_session)
125127

126-
def _save_session(self, kernel_id, kernel_session):
128+
def _save_session(self, kernel_id: str, kernel_session: dict) -> None:
127129
# Write/commit the addition, update dictionary
128130
kernels_lock.acquire()
129131
try:
@@ -140,12 +142,13 @@ def _save_session(self, kernel_id, kernel_session):
140142
finally:
141143
kernels_lock.release()
142144

143-
def start_session(self, kernel_id):
145+
def start_session(self, kernel_id: str) -> bool | None:
144146
kernel_session = self._sessions.get(kernel_id, None)
145147
if kernel_session is not None:
146148
return self._start_session(kernel_session)
149+
return None
147150

148-
def start_sessions(self):
151+
def start_sessions(self) -> None:
149152
"""
150153
Attempt to start persisted sessions.
151154
@@ -173,7 +176,7 @@ def start_sessions(self):
173176

174177
self._delete_sessions(sessions_to_remove)
175178

176-
def _start_session(self, kernel_session):
179+
def _start_session(self, kernel_session: dict) -> bool:
177180
# Attempt to start kernel from persisted state. if started, record kernel_session in dictionary
178181
# else delete session
179182
kernel_id = kernel_session["kernel_id"]
@@ -189,7 +192,7 @@ def _start_session(self, kernel_session):
189192

190193
return True
191194

192-
def delete_session(self, kernel_id):
195+
def delete_session(self, kernel_id: str) -> None:
193196
"""
194197
Removes saved session associated with kernel_id from dictionary and persisted storage.
195198
"""
@@ -198,7 +201,7 @@ def delete_session(self, kernel_id):
198201
if self.enable_persistence:
199202
self.log.info("Deleted persisted kernel session for id: %s" % kernel_id)
200203

201-
def _delete_sessions(self, kernel_ids):
204+
def _delete_sessions(self, kernel_ids: list[str]) -> None:
202205
# Remove unstarted sessions and rewrite
203206
kernels_lock.acquire()
204207
try:
@@ -219,7 +222,7 @@ def _delete_sessions(self, kernel_ids):
219222
kernels_lock.release()
220223

221224
@staticmethod
222-
def pre_save_transformation(session):
225+
def pre_save_transformation(session: dict) -> dict:
223226
kernel_id = list(session.keys())[0]
224227
session_info = session[kernel_id]
225228
if session_info.get("connection_info"):
@@ -231,7 +234,7 @@ def pre_save_transformation(session):
231234
return session
232235

233236
@staticmethod
234-
def post_load_transformation(session):
237+
def post_load_transformation(session: dict) -> dict:
235238
kernel_id = list(session.keys())[0]
236239
session_info = session[kernel_id]
237240
if session_info.get("connection_info"):
@@ -243,7 +246,7 @@ def post_load_transformation(session):
243246
return session
244247

245248
# abstractmethod
246-
def load_sessions(self):
249+
def load_sessions(self) -> None:
247250
"""
248251
Load and initialize _sessions member from persistent storage. This method is called from start_sessions().
249252
"""
@@ -252,33 +255,31 @@ def load_sessions(self):
252255
)
253256

254257
# abstractmethod
255-
def load_session(self, kernel_id):
258+
def load_session(self, kernel_id: str) -> None:
256259
"""
257260
Load and initialize _sessions member from persistent storage for a single kernel. This method is called from
258261
refresh_sessions().
259262
"""
260-
raise NotImplementedError(
261-
"KernelSessionManager.load_sessions() requires an implementation!"
262-
)
263+
raise NotImplementedError("KernelSessionManager.load_session() requires an implementation!")
263264

264265
# abstractmethod
265-
def delete_sessions(self, kernel_ids):
266+
def delete_sessions(self, kernel_ids: list[str]) -> None:
266267
"""
267268
Delete the sessions in persistent storage. Caller is responsible for synchronizing call.
268269
"""
269270
raise NotImplementedError(
270271
"KernelSessionManager.delete_sessions(kernel_ids) requires an implementation!"
271272
)
272273

273-
def save_session(self, kernel_id):
274+
def save_session(self, kernel_id: str) -> None:
274275
"""
275276
Saves the sessions dictionary to persistent store. Caller is responsible for synchronizing call.
276277
"""
277278
raise NotImplementedError(
278279
"KernelSessionManager.save_session(kernel_id) requires an implementation!"
279280
)
280281

281-
def active_sessions(self, username):
282+
def active_sessions(self, username: str) -> int:
282283
"""
283284
Returns the number of active sessions for the given username.
284285
@@ -296,7 +297,7 @@ def active_sessions(self, username):
296297
return 0
297298

298299
@staticmethod
299-
def get_kernel_username(**kwargs):
300+
def get_kernel_username(**kwargs) -> str:
300301
"""
301302
Returns the kernel's logical username from env dict.
302303
@@ -331,23 +332,23 @@ class FileKernelSessionManager(KernelSessionManager):
331332

332333
# Change the default to Jupyter Data Dir.
333334
@default("persistence_root")
334-
def persistence_root_default(self):
335+
def persistence_root_default(self) -> str:
335336
return os.getenv(self.persistence_root_env, jupyter_data_dir())
336337

337-
def __init__(self, kernel_manager, **kwargs):
338+
def __init__(self, kernel_manager: RemoteMappingKernelManager, **kwargs): # noqa: F821
338339
super().__init__(kernel_manager, **kwargs)
339340
if self.enable_persistence:
340341
self.log.info(f"Kernel session persistence location: {self._get_sessions_loc()}")
341342

342-
def delete_sessions(self, kernel_ids):
343+
def delete_sessions(self, kernel_ids: list[str]) -> None:
343344
if self.enable_persistence:
344345
for kernel_id in kernel_ids:
345346
kernel_file_name = "".join([kernel_id, ".json"])
346347
kernel_session_file_path = os.path.join(self._get_sessions_loc(), kernel_file_name)
347348
if os.path.exists(kernel_session_file_path):
348349
os.remove(kernel_session_file_path)
349350

350-
def save_session(self, kernel_id):
351+
def save_session(self, kernel_id: str) -> None:
351352
if self.enable_persistence:
352353
if kernel_id is not None:
353354
kernel_file_name = "".join([kernel_id, ".json"])
@@ -358,7 +359,7 @@ def save_session(self, kernel_id):
358359
json.dump(KernelSessionManager.pre_save_transformation(temp_session), fp)
359360
fp.close()
360361

361-
def load_sessions(self):
362+
def load_sessions(self) -> None:
362363
if self.enable_persistence:
363364
kernel_session_files = [
364365
json_files
@@ -368,21 +369,21 @@ def load_sessions(self):
368369
for kernel_session_file in kernel_session_files:
369370
self._load_session_from_file(kernel_session_file)
370371

371-
def load_session(self, kernel_id):
372+
def load_session(self, kernel_id: str) -> None:
372373
if self.enable_persistence:
373374
if kernel_id is not None:
374375
kernel_session_file = "".join([kernel_id, ".json"])
375376
self._load_session_from_file(kernel_session_file)
376377

377-
def _load_session_from_file(self, file_name):
378+
def _load_session_from_file(self, file_name: str) -> None:
378379
kernel_session_file_path = os.path.join(self._get_sessions_loc(), file_name)
379380
if os.path.exists(kernel_session_file_path):
380381
self.log.debug(f"Loading saved session(s) from {kernel_session_file_path}")
381382
with open(kernel_session_file_path) as fp:
382383
self._sessions.update(KernelSessionManager.post_load_transformation(json.load(fp)))
383384
fp.close()
384385

385-
def _get_sessions_loc(self):
386+
def _get_sessions_loc(self) -> str:
386387
path = os.path.join(self.persistence_root, KERNEL_SESSIONS_DIR_NAME)
387388
if not os.path.exists(path):
388389
os.makedirs(path, 0o755)
@@ -406,7 +407,7 @@ class WebhookKernelSessionManager(KernelSessionManager):
406407
)
407408

408409
@default("webhook_url")
409-
def webhook_url_default(self):
410+
def webhook_url_default(self) -> str | None:
410411
return os.getenv(self.webhook_url_env, None)
411412

412413
# Webhook Username
@@ -418,7 +419,7 @@ def webhook_url_default(self):
418419
)
419420

420421
@default("webhook_username")
421-
def webhook_username_default(self):
422+
def webhook_username_default(self) -> str | None:
422423
return os.getenv(self.webhook_username_env, None)
423424

424425
# Webhook Password
@@ -430,7 +431,7 @@ def webhook_username_default(self):
430431
)
431432

432433
@default("webhook_password")
433-
def webhook_password_default(self):
434+
def webhook_password_default(self) -> str | None:
434435
return os.getenv(self.webhook_password_env, None)
435436

436437
# Auth Type
@@ -443,10 +444,10 @@ def webhook_password_default(self):
443444
)
444445

445446
@default("auth_type")
446-
def auth_type_default(self):
447+
def auth_type_default(self) -> str | None:
447448
return os.getenv(self.auth_type_env, None)
448449

449-
def __init__(self, kernel_manager, **kwargs):
450+
def __init__(self, kernel_manager: RemoteMappingKernelManager, **kwargs): # noqa: F821
450451
super().__init__(kernel_manager, **kwargs)
451452
if self.enable_persistence:
452453
self.log.info("Webhook kernel session persistence activated")
@@ -464,7 +465,7 @@ def __init__(self, kernel_manager, **kwargs):
464465
else:
465466
self.log.error("Username and/or password aren't set")
466467

467-
def delete_sessions(self, kernel_ids):
468+
def delete_sessions(self, kernel_ids: list[str]) -> None:
468469
"""
469470
Deletes kernel sessions from database
470471
@@ -476,7 +477,7 @@ def delete_sessions(self, kernel_ids):
476477
if response.status_code != 204:
477478
self.log.error(response.raise_for_status())
478479

479-
def save_session(self, kernel_id):
480+
def save_session(self, kernel_id: str) -> None:
480481
"""
481482
Saves kernel session to database
482483
@@ -494,7 +495,7 @@ def save_session(self, kernel_id):
494495
if response.status_code != 204:
495496
self.log.error(response.raise_for_status())
496497

497-
def load_sessions(self):
498+
def load_sessions(self) -> None:
498499
"""
499500
Loads kernel sessions from database
500501
"""
@@ -507,7 +508,7 @@ def load_sessions(self):
507508
else:
508509
self.log.error(response.raise_for_status())
509510

510-
def load_session(self, kernel_id):
511+
def load_session(self, kernel_id: str) -> None:
511512
"""
512513
Loads a kernel session from database
513514
@@ -522,7 +523,7 @@ def load_session(self, kernel_id):
522523
else:
523524
self.log.error(response.raise_for_status())
524525

525-
def _load_session_from_response(self, kernel_session: dict):
526+
def _load_session_from_response(self, kernel_session: dict) -> None:
526527
"""
527528
Loads kernel session to current session
528529

0 commit comments

Comments
 (0)