Skip to content

Commit beb0d45

Browse files
authored
Adopt more lint rules (#1189)
* adopt more lint rules * typing * fix test
1 parent a2f1d47 commit beb0d45

28 files changed

+150
-169
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ repos:
3535
- id: black
3636

3737
- repo: https://github.com/charliermarsh/ruff-pre-commit
38-
rev: v0.0.206
38+
rev: v0.0.236
3939
hooks:
4040
- id: ruff
4141
args: ["--fix"]

jupyter_server/auth/__main__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def set_password(args):
2020
password_repeat = getpass("" if args.quiet else "Repeat password: ")
2121
if password1 != password_repeat:
2222
warnings.warn("Passwords do not match, try again")
23-
elif len(password1) < 4:
23+
elif len(password1) < 4: # noqa
2424
warnings.warn("Please provide at least 4 characters")
2525
else:
2626
password = password1

jupyter_server/auth/identity.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,8 @@ def _backward_compat_user(got_user: Any) -> User:
9696
return User(username=got_user)
9797
elif isinstance(got_user, dict):
9898
kwargs = {}
99-
if "username" not in got_user:
100-
if "name" in got_user:
101-
kwargs["username"] = got_user["name"]
99+
if "username" not in got_user and "name" in got_user:
100+
kwargs["username"] = got_user["name"]
102101
for field in User.__dataclass_fields__:
103102
if field in got_user:
104103
kwargs[field] = got_user[field]
@@ -367,7 +366,7 @@ def _force_clear_cookie(
367366
which values were used for a given cookie).
368367
"""
369368
name = escape.native_str(name)
370-
expires = datetime.datetime.utcnow() - datetime.timedelta(days=365)
369+
expires = datetime.datetime.now(tz=datetime.timezone.utc) - datetime.timedelta(days=365)
371370

372371
morsel: Morsel = Morsel()
373372
morsel.set(name, "", '""')

jupyter_server/base/handlers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ def token_authenticated(self):
183183
def logged_in(self):
184184
"""Is a user currently logged in?"""
185185
user = self.current_user
186-
return user and not user == "anonymous"
186+
return user and user != "anonymous"
187187

188188
@property
189189
def login_handler(self):

jupyter_server/config_manager.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,7 @@ def set(self, section_name, data):
116116
# Generate the JSON up front, since it could raise an exception,
117117
# in order to avoid writing half-finished corrupted data to disk.
118118
json_content = json.dumps(data, indent=2)
119-
f = open(filename, "w", encoding="utf-8")
120-
with f:
119+
with open(filename, "w", encoding="utf-8") as f:
121120
f.write(json_content)
122121

123122
def update(self, section_name, new_data):

jupyter_server/extension/manager.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -204,10 +204,7 @@ def _load_metadata(self):
204204

205205
def validate(self):
206206
"""Validate all extension points in this package."""
207-
for extension in self.extension_points.values():
208-
if not extension.validate():
209-
return False
210-
return True
207+
return all(extension.validate() for extension in self.extension_points.values())
211208

212209
def link_point(self, point_name, serverapp):
213210
"""Link an extension point."""
@@ -379,7 +376,7 @@ def link_all_extensions(self):
379376
"""
380377
# Sort the extension names to enforce deterministic linking
381378
# order.
382-
for name in self.sorted_extensions.keys():
379+
for name in self.sorted_extensions:
383380
self.link_extension(name)
384381

385382
def load_all_extensions(self):
@@ -388,7 +385,7 @@ def load_all_extensions(self):
388385
"""
389386
# Sort the extension names to enforce deterministic loading
390387
# order.
391-
for name in self.sorted_extensions.keys():
388+
for name in self.sorted_extensions:
392389
self.load_extension(name)
393390

394391
async def stop_all_extensions(self):

jupyter_server/gateway/gateway_client.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import os
88
import typing as ty
99
from abc import ABC, ABCMeta, abstractmethod
10-
from datetime import datetime
10+
from datetime import datetime, timezone
1111
from email.utils import parsedate_to_datetime
1212
from http.cookies import SimpleCookie
1313
from socket import gaierror
@@ -96,9 +96,8 @@ def _url_default(self):
9696
def _url_validate(self, proposal):
9797
value = proposal["value"]
9898
# Ensure value, if present, starts with 'http'
99-
if value is not None and len(value) > 0:
100-
if not str(value).lower().startswith("http"):
101-
raise TraitError("GatewayClient url must start with 'http': '%r'" % value)
99+
if value is not None and len(value) > 0 and not str(value).lower().startswith("http"):
100+
raise TraitError("GatewayClient url must start with 'http': '%r'" % value)
102101
return value
103102

104103
ws_url = Unicode(
@@ -115,18 +114,16 @@ def _url_validate(self, proposal):
115114
@default("ws_url")
116115
def _ws_url_default(self):
117116
default_value = os.environ.get(self.ws_url_env)
118-
if default_value is None:
119-
if self.gateway_enabled:
120-
default_value = self.url.lower().replace("http", "ws")
117+
if default_value is None and self.gateway_enabled:
118+
default_value = self.url.lower().replace("http", "ws")
121119
return default_value
122120

123121
@validate("ws_url")
124122
def _ws_url_validate(self, proposal):
125123
value = proposal["value"]
126124
# Ensure value, if present, starts with 'ws'
127-
if value is not None and len(value) > 0:
128-
if not str(value).lower().startswith("ws"):
129-
raise TraitError("GatewayClient ws_url must start with 'ws': '%r'" % value)
125+
if value is not None and len(value) > 0 and not str(value).lower().startswith("ws"):
126+
raise TraitError("GatewayClient ws_url must start with 'ws': '%r'" % value)
130127
return value
131128

132129
kernels_endpoint_default_value = "/api/kernels"
@@ -599,7 +596,7 @@ def update_cookies(self, cookie: SimpleCookie) -> None:
599596
if not self.accept_cookies:
600597
return
601598

602-
store_time = datetime.now()
599+
store_time = datetime.now(tz=timezone.utc)
603600
for key, item in cookie.items():
604601
# Convert "expires" arg into "max-age" to facilitate expiration management.
605602
# As "max-age" has precedence, ignore "expires" when "max-age" exists.
@@ -611,7 +608,7 @@ def update_cookies(self, cookie: SimpleCookie) -> None:
611608

612609
def _clear_expired_cookies(self) -> None:
613610
"""Clear expired cookies."""
614-
check_time = datetime.now()
611+
check_time = datetime.now(tz=timezone.utc)
615612
expired_keys = []
616613

617614
for key, (morsel, store_time) in self._cookies.items():

jupyter_server/gateway/managers.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,8 @@ async def start_kernel(self, *, kernel_id=None, path=None, **kwargs):
7272
"""
7373
self.log.info(f"Request start kernel: kernel_id={kernel_id}, path='{path}'")
7474

75-
if kernel_id is None:
76-
if path is not None:
77-
kwargs["cwd"] = self.cwd_for_path(path)
75+
if kernel_id is None and path is not None:
76+
kwargs["cwd"] = self.cwd_for_path(path)
7877

7978
km = self.kernel_manager_factory(parent=self, log=self.log)
8079
await km.start_kernel(kernel_id=kernel_id, **kwargs)
@@ -283,7 +282,7 @@ async def get_kernel_spec(self, kernel_name, **kwargs):
283282
try:
284283
response = await gateway_request(kernel_spec_url, method="GET")
285284
except web.HTTPError as error:
286-
if error.status_code == 404:
285+
if error.status_code == 404: # noqa[PLR2004]
287286
# Convert not found to KeyError since that's what the Notebook handler expects
288287
# message is not used, but might as well make it useful for troubleshooting
289288
msg = f"kernelspec {kernel_name} not found on Gateway server at: {GatewayClient.instance().url}"
@@ -312,7 +311,7 @@ async def get_kernel_spec_resource(self, kernel_name, path):
312311
try:
313312
response = await gateway_request(kernel_spec_resource_url, method="GET")
314313
except web.HTTPError as error:
315-
if error.status_code == 404:
314+
if error.status_code == 404: # noqa[PLR2004]
316315
kernel_spec_resource = None
317316
else:
318317
raise
@@ -407,7 +406,7 @@ async def refresh_model(self, model=None):
407406
response = await gateway_request(self.kernel_url, method="GET")
408407

409408
except web.HTTPError as error:
410-
if error.status_code == 404:
409+
if error.status_code == 404: # noqa[PLR2004]
411410
self.log.warning("Kernel not found at: %s" % self.kernel_url)
412411
model = None
413412
else:
@@ -495,7 +494,7 @@ async def shutdown_kernel(self, now=False, restart=False):
495494
response = await gateway_request(self.kernel_url, method="DELETE")
496495
self.log.debug("Shutdown kernel response: %d %s", response.code, response.reason)
497496
except web.HTTPError as error:
498-
if error.status_code == 404:
497+
if error.status_code == 404: # noqa[PLR2004]
499498
self.log.debug("Shutdown kernel response: kernel not found (ignored)")
500499
else:
501500
raise

jupyter_server/i18n/__init__.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,7 @@ def parse_accept_lang_header(accept_lang):
4242
lang, qvalue = m.group("lang", "qvalue")
4343
# Browser header format is zh-CN, gettext uses zh_CN
4444
lang = lang.replace("-", "_")
45-
if qvalue is None:
46-
qvalue = 1.0
47-
else:
48-
qvalue = float(qvalue)
45+
qvalue = 1.0 if qvalue is None else float(qvalue)
4946
if qvalue == 0:
5047
continue # 0 means not accepted
5148
by_q[qvalue].append(lang)
@@ -59,7 +56,7 @@ def parse_accept_lang_header(accept_lang):
5956
def load(language, domain="nbjs"):
6057
"""Load translations from an nbjs.json file"""
6158
try:
62-
f = open(pjoin(I18N_DIR, language, "LC_MESSAGES", "nbjs.json"), encoding="utf-8")
59+
f = open(pjoin(I18N_DIR, language, "LC_MESSAGES", "nbjs.json"), encoding="utf-8") # noqa
6360
except OSError as e:
6461
if e.errno != errno.ENOENT:
6562
raise

jupyter_server/log.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ def log_request(handler):
2828
except AttributeError:
2929
logger = access_log
3030

31-
if status < 300 or status == 304:
31+
if status < 300 or status == 304: # noqa[PLR2004]
3232
# Successes (or 304 FOUND) are debug-level
3333
log_method = logger.debug
34-
elif status < 400:
34+
elif status < 400: # noqa[PLR2004]
3535
log_method = logger.info
36-
elif status < 500:
36+
elif status < 500: # noqa[PLR2004]
3737
log_method = logger.warning
3838
else:
3939
log_method = logger.error
@@ -53,21 +53,15 @@ def log_request(handler):
5353
user = handler.current_user
5454
except Exception:
5555
user = None
56-
if user:
57-
if isinstance(user, User):
58-
username = user.username
59-
else:
60-
username = "unknown"
61-
else:
62-
username = ""
56+
username = (user.username if isinstance(user, User) else "unknown") if user else ""
6357
ns["username"] = username
6458

6559
msg = "{status} {method} {uri} ({username}@{ip}) {request_time:.2f}ms"
66-
if status >= 400:
60+
if status >= 400: # noqa[PLR2004]
6761
# log bad referers
6862
ns["referer"] = request.headers.get("Referer", "None")
6963
msg = msg + " referer={referer}"
70-
if status >= 500 and status != 502:
64+
if status >= 500 and status != 502: # noqa[PLR2004]
7165
# Log a subset of the headers if it caused an error.
7266
headers = {}
7367
for header in ["Host", "Accept", "Referer", "User-Agent"]:

0 commit comments

Comments
 (0)