From c79a270cb118dab090c68fcee2a04c8d42a919de Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 27 Mar 2022 05:38:32 -0500 Subject: [PATCH 1/2] add pytest opts and use isort --- .github/workflows/python-tests.yml | 13 +- .pre-commit-config.yaml | 40 +++--- docs/source/conf.py | 1 - examples/simple/setup.py | 1 - examples/simple/simple_ext1/application.py | 18 +-- examples/simple/simple_ext1/handlers.py | 6 +- examples/simple/simple_ext11/application.py | 7 +- examples/simple/simple_ext2/application.py | 9 +- examples/simple/simple_ext2/handlers.py | 6 +- jupyter_server/__init__.py | 2 +- jupyter_server/_tz.py | 4 +- jupyter_server/auth/decorator.py | 7 +- jupyter_server/auth/login.py | 3 +- jupyter_server/auth/security.py | 4 +- jupyter_server/base/handlers.py | 18 +-- jupyter_server/base/zmqhandlers.py | 7 +- jupyter_server/config_manager.py | 3 +- jupyter_server/extension/application.py | 20 +-- jupyter_server/extension/config.py | 1 - jupyter_server/extension/manager.py | 19 +-- jupyter_server/extension/serverextension.py | 7 +- jupyter_server/gateway/gateway_client.py | 11 +- jupyter_server/gateway/handlers.py | 13 +- jupyter_server/gateway/managers.py | 16 +-- jupyter_server/kernelspecs/handlers.py | 4 +- jupyter_server/nbconvert/handlers.py | 4 +- jupyter_server/prometheus/metrics.py | 4 +- jupyter_server/pytest_plugin.py | 1 - jupyter_server/serverapp.py | 126 +++++++++--------- jupyter_server/services/api/handlers.py | 6 +- jupyter_server/services/config/handlers.py | 2 +- jupyter_server/services/config/manager.py | 12 +- .../services/contents/filecheckpoints.py | 14 +- jupyter_server/services/contents/fileio.py | 6 +- .../services/contents/filemanager.py | 22 +-- jupyter_server/services/contents/handlers.py | 10 +- .../services/contents/largefilemanager.py | 6 +- jupyter_server/services/contents/manager.py | 36 +++-- jupyter_server/services/kernels/handlers.py | 16 +-- .../services/kernels/kernelmanager.py | 44 +++--- .../services/kernelspecs/handlers.py | 4 +- jupyter_server/services/nbconvert/handlers.py | 2 +- jupyter_server/services/security/handlers.py | 4 +- jupyter_server/services/sessions/handlers.py | 6 +- .../services/sessions/sessionmanager.py | 8 +- jupyter_server/services/shutdown.py | 4 +- jupyter_server/terminal/__init__.py | 1 + jupyter_server/terminal/api_handlers.py | 2 +- jupyter_server/terminal/handlers.py | 5 +- jupyter_server/terminal/terminalmanager.py | 7 +- jupyter_server/traittypes.py | 4 +- jupyter_server/utils.py | 13 +- jupyter_server/view/handlers.py | 7 +- pyproject.toml | 2 +- setup.py | 2 +- tests/auth/test_authorizer.py | 3 +- tests/auth/test_login.py | 3 +- tests/auth/test_security.py | 3 +- tests/extension/mockextensions/app.py | 12 +- tests/extension/test_app.py | 3 +- tests/extension/test_config.py | 4 +- tests/extension/test_entrypoint.py | 1 - tests/extension/test_launch.py | 1 - tests/extension/test_manager.py | 12 +- tests/extension/test_serverextension.py | 7 +- tests/extension/test_utils.py | 1 - tests/nbconvert/test_handlers.py | 6 +- tests/services/contents/test_api.py | 12 +- tests/services/contents/test_config.py | 6 +- tests/services/contents/test_fileio.py | 1 - .../contents/test_largefilemanager.py | 9 +- tests/services/contents/test_manager.py | 15 ++- tests/services/kernels/test_api.py | 2 +- tests/services/kernels/test_cull.py | 1 - tests/services/kernelspecs/test_api.py | 3 +- tests/services/sessions/test_api.py | 2 +- tests/services/sessions/test_manager.py | 3 +- tests/test_files.py | 5 +- tests/test_gateway.py | 6 +- tests/test_serialize.py | 6 +- tests/test_serverapp.py | 4 +- tests/test_traittypes.py | 6 +- tests/test_utils.py | 4 +- tests/test_version.py | 1 - tests/test_view.py | 3 +- tests/unix_sockets/test_api.py | 6 +- 86 files changed, 328 insertions(+), 443 deletions(-) diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 95327a0cc8..936f6b6203 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -57,12 +57,12 @@ jobs: - name: Run the tests if: ${{ !startsWith(matrix.python-version, 'pypy') && !startsWith(matrix.os, 'windows') }} run: | - args="-vv -raXs --cov jupyter_server --cov-branch --cov-report term-missing:skip-covered --durations 10 --color=yes --cov-fail-under 70" + args="-vv --cov jupyter_server --cov-branch --cov-report term-missing:skip-covered --cov-fail-under 70" python -m pytest $args || python -m pytest $args --lf - name: Run the tests on pypy and windows if: ${{ startsWith(matrix.python-version, 'pypy') || startsWith(matrix.os, 'windows') }} run: | - python -m pytest -vv -raXs || python -m pytest -vv -raXs --lf + python -m pytest -vv || python -m pytest -vv --lf - name: Coverage run: | codecov @@ -102,8 +102,7 @@ jobs: uses: jupyterlab/maintainer-tools/.github/actions/install-minimums@v1 - name: Run the unit tests run: | - args="-vv -raXs --durations 10 --color=yes" - pytest $args || pytest $args --lf + pytest -vv || pytest -vv --lf test_prereleases: name: Test Prereleases @@ -123,8 +122,7 @@ jobs: pip check - name: Run the tests run: | - args="-vv -raXs --durations 10 --color=yes" - pytest $args || pytest $args --lf + pytest -vv || pytest -vv --lf make_sdist: name: Make SDist @@ -164,5 +162,4 @@ jobs: - name: Run Test run: | cd sdist/test - args="-vv -raXs --durations 10 --color=yes" - pytest $args || pytest $args --lf + pytest -vv || pytest -vv --lf diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5f3e2ebe23..281b8264b2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,8 +1,19 @@ repos: - - repo: https://github.com/asottile/reorder_python_imports - rev: v2.7.1 + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.1.0 hooks: - - id: reorder-python-imports + - id: end-of-file-fixer + - id: check-case-conflict + - id: check-executables-have-shebangs + - id: requirements-txt-fixer + - id: check-added-large-files + - id: check-case-conflict + - id: check-toml + - id: check-yaml + - id: debug-statements + - id: forbid-new-submodules + - id: check-builtin-literals + - id: trailing-whitespace - repo: https://github.com/psf/black rev: 22.1.0 @@ -10,6 +21,13 @@ repos: - id: black args: ["--line-length", "100"] + - repo: https://github.com/PyCQA/isort + rev: 5.10.1 + hooks: + - id: isort + files: \.py$ + args: [--profile=black] + - repo: https://github.com/pre-commit/mirrors-prettier rev: v2.5.1 hooks: @@ -26,22 +44,6 @@ repos: "flake8-implicit-str-concat==0.2.0", ] - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.1.0 - hooks: - - id: end-of-file-fixer - - id: check-case-conflict - - id: check-executables-have-shebangs - - id: requirements-txt-fixer - - id: check-added-large-files - - id: check-case-conflict - - id: check-toml - - id: check-yaml - - id: debug-statements - - id: forbid-new-submodules - - id: check-builtin-literals - - id: trailing-whitespace - - repo: https://github.com/pre-commit/mirrors-eslint rev: v8.8.0 hooks: diff --git a/docs/source/conf.py b/docs/source/conf.py index ad8eb1bf15..5b53352393 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -19,7 +19,6 @@ from pkg_resources import parse_version - HERE = osp.abspath(osp.dirname(__file__)) diff --git a/examples/simple/setup.py b/examples/simple/setup.py index bf9ee4ae2c..39391b1c85 100644 --- a/examples/simple/setup.py +++ b/examples/simple/setup.py @@ -3,7 +3,6 @@ from jupyter_packaging import create_cmdclass from setuptools import setup - VERSION = "0.0.1" diff --git a/examples/simple/simple_ext1/application.py b/examples/simple/simple_ext1/application.py index 6508fbe3f5..871087ce6b 100644 --- a/examples/simple/simple_ext1/application.py +++ b/examples/simple/simple_ext1/application.py @@ -2,14 +2,16 @@ from traitlets import Unicode -from .handlers import DefaultHandler -from .handlers import ErrorHandler -from .handlers import ParameterHandler -from .handlers import RedirectHandler -from .handlers import TemplateHandler -from .handlers import TypescriptHandler -from jupyter_server.extension.application import ExtensionApp -from jupyter_server.extension.application import ExtensionAppJinjaMixin +from jupyter_server.extension.application import ExtensionApp, ExtensionAppJinjaMixin + +from .handlers import ( + DefaultHandler, + ErrorHandler, + ParameterHandler, + RedirectHandler, + TemplateHandler, + TypescriptHandler, +) DEFAULT_STATIC_FILES_PATH = os.path.join(os.path.dirname(__file__), "static") DEFAULT_TEMPLATE_FILES_PATH = os.path.join(os.path.dirname(__file__), "templates") diff --git a/examples/simple/simple_ext1/handlers.py b/examples/simple/simple_ext1/handlers.py index f30f16654e..010dd628b5 100644 --- a/examples/simple/simple_ext1/handlers.py +++ b/examples/simple/simple_ext1/handlers.py @@ -1,6 +1,8 @@ from jupyter_server.base.handlers import JupyterHandler -from jupyter_server.extension.handler import ExtensionHandlerJinjaMixin -from jupyter_server.extension.handler import ExtensionHandlerMixin +from jupyter_server.extension.handler import ( + ExtensionHandlerJinjaMixin, + ExtensionHandlerMixin, +) from jupyter_server.utils import url_escape diff --git a/examples/simple/simple_ext11/application.py b/examples/simple/simple_ext11/application.py index 81416ebdf6..aab3042537 100644 --- a/examples/simple/simple_ext11/application.py +++ b/examples/simple/simple_ext11/application.py @@ -1,12 +1,9 @@ import os from simple_ext1.application import SimpleApp1 -from traitlets import Bool -from traitlets import observe -from traitlets import Unicode +from traitlets import Bool, Unicode, observe -from jupyter_server.serverapp import aliases -from jupyter_server.serverapp import flags +from jupyter_server.serverapp import aliases, flags DEFAULT_STATIC_FILES_PATH = os.path.join(os.path.dirname(__file__), "./../simple_ext1/static") DEFAULT_TEMPLATE_FILES_PATH = os.path.join(os.path.dirname(__file__), "./../simple_ext1/templates") diff --git a/examples/simple/simple_ext2/application.py b/examples/simple/simple_ext2/application.py index fcda51dc9d..0274738825 100644 --- a/examples/simple/simple_ext2/application.py +++ b/examples/simple/simple_ext2/application.py @@ -2,12 +2,9 @@ from traitlets import Unicode -from .handlers import ErrorHandler -from .handlers import IndexHandler -from .handlers import ParameterHandler -from .handlers import TemplateHandler -from jupyter_server.extension.application import ExtensionApp -from jupyter_server.extension.application import ExtensionAppJinjaMixin +from jupyter_server.extension.application import ExtensionApp, ExtensionAppJinjaMixin + +from .handlers import ErrorHandler, IndexHandler, ParameterHandler, TemplateHandler DEFAULT_STATIC_FILES_PATH = os.path.join(os.path.dirname(__file__), "static") DEFAULT_TEMPLATE_FILES_PATH = os.path.join(os.path.dirname(__file__), "templates") diff --git a/examples/simple/simple_ext2/handlers.py b/examples/simple/simple_ext2/handlers.py index 355afbfd20..133bdadf00 100644 --- a/examples/simple/simple_ext2/handlers.py +++ b/examples/simple/simple_ext2/handlers.py @@ -1,6 +1,8 @@ from jupyter_server.base.handlers import JupyterHandler -from jupyter_server.extension.handler import ExtensionHandlerJinjaMixin -from jupyter_server.extension.handler import ExtensionHandlerMixin +from jupyter_server.extension.handler import ( + ExtensionHandlerJinjaMixin, + ExtensionHandlerMixin, +) from jupyter_server.utils import url_escape diff --git a/jupyter_server/__init__.py b/jupyter_server/__init__.py index 3a6586a003..d5b97f0c90 100644 --- a/jupyter_server/__init__.py +++ b/jupyter_server/__init__.py @@ -13,7 +13,7 @@ del os -from ._version import version_info, __version__ # noqa +from ._version import __version__, version_info # noqa def _cleanup(): diff --git a/jupyter_server/_tz.py b/jupyter_server/_tz.py index 4ea8cfcbc2..05ac098b2f 100644 --- a/jupyter_server/_tz.py +++ b/jupyter_server/_tz.py @@ -6,9 +6,7 @@ """ # Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. -from datetime import datetime -from datetime import timedelta -from datetime import tzinfo +from datetime import datetime, timedelta, tzinfo # constant for zero offset ZERO = timedelta(0) diff --git a/jupyter_server/auth/decorator.py b/jupyter_server/auth/decorator.py index a97ec6aaa3..72a489dbe9 100644 --- a/jupyter_server/auth/decorator.py +++ b/jupyter_server/auth/decorator.py @@ -3,15 +3,12 @@ # Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. from functools import wraps -from typing import Callable -from typing import Optional -from typing import Union +from typing import Callable, Optional, Union from tornado.log import app_log from tornado.web import HTTPError -from .utils import HTTP_METHOD_TO_AUTH_ACTION -from .utils import warn_disabled_authorization +from .utils import HTTP_METHOD_TO_AUTH_ACTION, warn_disabled_authorization def authorized( diff --git a/jupyter_server/auth/login.py b/jupyter_server/auth/login.py index efae3d60ed..f1a9f32564 100644 --- a/jupyter_server/auth/login.py +++ b/jupyter_server/auth/login.py @@ -9,8 +9,7 @@ from tornado.escape import url_escape from ..base.handlers import JupyterHandler -from .security import passwd_check -from .security import set_password +from .security import passwd_check, set_password class LoginHandler(JupyterHandler): diff --git a/jupyter_server/auth/security.py b/jupyter_server/auth/security.py index d6edd80246..05035a8971 100644 --- a/jupyter_server/auth/security.py +++ b/jupyter_server/auth/security.py @@ -12,9 +12,7 @@ from contextlib import contextmanager from jupyter_core.paths import jupyter_config_dir -from traitlets.config import Config -from traitlets.config import ConfigFileNotFound -from traitlets.config import JSONFileConfigLoader +from traitlets.config import Config, ConfigFileNotFound, JSONFileConfigLoader # Length of the salt in nr of hex chars, which implies salt_len * 4 # bits of randomness. diff --git a/jupyter_server/base/handlers.py b/jupyter_server/base/handlers.py index d305977059..cf5ae9cd7a 100644 --- a/jupyter_server/base/handlers.py +++ b/jupyter_server/base/handlers.py @@ -18,9 +18,7 @@ import prometheus_client from jinja2 import TemplateNotFound from jupyter_core.paths import is_hidden -from tornado import escape -from tornado import httputil -from tornado import web +from tornado import escape, httputil, web from tornado.log import app_log from traitlets.config import Application @@ -29,12 +27,14 @@ from jupyter_server._tz import utcnow from jupyter_server.i18n import combine_translations from jupyter_server.services.security import csp_report_uri -from jupyter_server.utils import ensure_async -from jupyter_server.utils import filefind -from jupyter_server.utils import url_escape -from jupyter_server.utils import url_is_absolute -from jupyter_server.utils import url_path_join -from jupyter_server.utils import urldecode_unix_socket_path +from jupyter_server.utils import ( + ensure_async, + filefind, + url_escape, + url_is_absolute, + url_path_join, + urldecode_unix_socket_path, +) # ----------------------------------------------------------------------------- # Top-level handlers diff --git a/jupyter_server/base/zmqhandlers.py b/jupyter_server/base/zmqhandlers.py index 979def5217..86b434e2bd 100644 --- a/jupyter_server/base/zmqhandlers.py +++ b/jupyter_server/base/zmqhandlers.py @@ -14,15 +14,16 @@ from jupyter_client.jsonutil import json_default except ImportError: from jupyter_client.jsonutil import date_default as json_default + from jupyter_client.jsonutil import extract_dates from jupyter_client.session import Session -from tornado import ioloop -from tornado import web +from tornado import ioloop, web from tornado.websocket import WebSocketHandler -from .handlers import JupyterHandler from jupyter_server.auth.utils import warn_disabled_authorization +from .handlers import JupyterHandler + def serialize_binary_message(msg): """serialize a message as a binary blob diff --git a/jupyter_server/config_manager.py b/jupyter_server/config_manager.py index 933529ae53..30d45db046 100644 --- a/jupyter_server/config_manager.py +++ b/jupyter_server/config_manager.py @@ -11,8 +11,7 @@ from six import PY3 from traitlets.config import LoggingConfigurable -from traitlets.traitlets import Bool -from traitlets.traitlets import Unicode +from traitlets.traitlets import Bool, Unicode def recursive_update(target, new): diff --git a/jupyter_server/extension/application.py b/jupyter_server/extension/application.py index abcb64f8d7..9d378919da 100644 --- a/jupyter_server/extension/application.py +++ b/jupyter_server/extension/application.py @@ -2,26 +2,18 @@ import re import sys -from jinja2 import Environment -from jinja2 import FileSystemLoader -from jupyter_core.application import JupyterApp -from jupyter_core.application import NoStart +from jinja2 import Environment, FileSystemLoader +from jupyter_core.application import JupyterApp, NoStart from tornado.log import LogFormatter from tornado.web import RedirectHandler -from traitlets import Any -from traitlets import Bool -from traitlets import default -from traitlets import Dict -from traitlets import HasTraits -from traitlets import List -from traitlets import Unicode +from traitlets import Any, Bool, Dict, HasTraits, List, Unicode, default from traitlets.config import Config -from .handler import ExtensionHandlerMixin from jupyter_server.serverapp import ServerApp from jupyter_server.transutils import _i18n -from jupyter_server.utils import is_namespace_package -from jupyter_server.utils import url_path_join +from jupyter_server.utils import is_namespace_package, url_path_join + +from .handler import ExtensionHandlerMixin # ----------------------------------------------------------------------------- # Util functions and classes. diff --git a/jupyter_server/extension/config.py b/jupyter_server/extension/config.py index 8fb6ceca21..15a3cfbd0c 100644 --- a/jupyter_server/extension/config.py +++ b/jupyter_server/extension/config.py @@ -1,6 +1,5 @@ from jupyter_server.services.config.manager import ConfigManager - DEFAULT_SECTION_NAME = "jupyter_server_config" diff --git a/jupyter_server/extension/manager.py b/jupyter_server/extension/manager.py index c0cc4ac390..893fa6fe1a 100644 --- a/jupyter_server/extension/manager.py +++ b/jupyter_server/extension/manager.py @@ -3,22 +3,17 @@ import traceback from tornado.gen import multi -from traitlets import Any -from traitlets import Bool -from traitlets import default -from traitlets import Dict -from traitlets import HasTraits -from traitlets import Instance -from traitlets import observe -from traitlets import Unicode +from traitlets import Any, Bool, Dict, HasTraits, Instance, Unicode, default, observe from traitlets import validate as validate_trait from traitlets.config import LoggingConfigurable from .config import ExtensionConfigManager -from .utils import ExtensionMetadataError -from .utils import ExtensionModuleNotFound -from .utils import get_loader -from .utils import get_metadata +from .utils import ( + ExtensionMetadataError, + ExtensionModuleNotFound, + get_loader, + get_metadata, +) class ExtensionPoint(HasTraits): diff --git a/jupyter_server/extension/serverextension.py b/jupyter_server/extension/serverextension.py index 22b52bb670..8825b45aee 100644 --- a/jupyter_server/extension/serverextension.py +++ b/jupyter_server/extension/serverextension.py @@ -6,16 +6,13 @@ import sys from jupyter_core.application import JupyterApp -from jupyter_core.paths import ENV_CONFIG_PATH -from jupyter_core.paths import jupyter_config_dir -from jupyter_core.paths import SYSTEM_CONFIG_PATH +from jupyter_core.paths import ENV_CONFIG_PATH, SYSTEM_CONFIG_PATH, jupyter_config_dir from tornado.log import LogFormatter from traitlets import Bool from jupyter_server._version import __version__ from jupyter_server.extension.config import ExtensionConfigManager -from jupyter_server.extension.manager import ExtensionManager -from jupyter_server.extension.manager import ExtensionPackage +from jupyter_server.extension.manager import ExtensionManager, ExtensionPackage def _get_config_dir(user=False, sys_prefix=False): diff --git a/jupyter_server/gateway/gateway_client.py b/jupyter_server/gateway/gateway_client.py index 4efbd2e18f..4231cb0be4 100644 --- a/jupyter_server/gateway/gateway_client.py +++ b/jupyter_server/gateway/gateway_client.py @@ -5,15 +5,8 @@ from socket import gaierror from tornado import web -from tornado.httpclient import AsyncHTTPClient -from tornado.httpclient import HTTPError -from traitlets import Bool -from traitlets import default -from traitlets import Float -from traitlets import Int -from traitlets import TraitError -from traitlets import Unicode -from traitlets import validate +from tornado.httpclient import AsyncHTTPClient, HTTPError +from traitlets import Bool, Float, Int, TraitError, Unicode, default, validate from traitlets.config import SingletonConfigurable diff --git a/jupyter_server/gateway/handlers.py b/jupyter_server/gateway/handlers.py index 3779eea7b4..42b0868be5 100644 --- a/jupyter_server/gateway/handlers.py +++ b/jupyter_server/gateway/handlers.py @@ -9,18 +9,13 @@ from jupyter_client.session import Session from tornado import web from tornado.concurrent import Future -from tornado.escape import json_decode -from tornado.escape import url_escape -from tornado.escape import utf8 +from tornado.escape import json_decode, url_escape, utf8 from tornado.httpclient import HTTPRequest -from tornado.ioloop import IOLoop -from tornado.ioloop import PeriodicCallback -from tornado.websocket import websocket_connect -from tornado.websocket import WebSocketHandler +from tornado.ioloop import IOLoop, PeriodicCallback +from tornado.websocket import WebSocketHandler, websocket_connect from traitlets.config.configurable import LoggingConfigurable -from ..base.handlers import APIHandler -from ..base.handlers import JupyterHandler +from ..base.handlers import APIHandler, JupyterHandler from ..utils import url_path_join from .managers import GatewayClient diff --git a/jupyter_server/gateway/managers.py b/jupyter_server/gateway/managers.py index 2a9fe451fe..1467a4d60a 100644 --- a/jupyter_server/gateway/managers.py +++ b/jupyter_server/gateway/managers.py @@ -15,22 +15,14 @@ from jupyter_client.manager import AsyncKernelManager from jupyter_client.managerabc import KernelManagerABC from tornado import web -from tornado.escape import json_decode -from tornado.escape import json_encode -from tornado.escape import url_escape -from tornado.escape import utf8 -from traitlets import default -from traitlets import DottedObjectName -from traitlets import Instance -from traitlets import Type +from tornado.escape import json_decode, json_encode, url_escape, utf8 +from traitlets import DottedObjectName, Instance, Type, default from .._tz import UTC from ..services.kernels.kernelmanager import AsyncMappingKernelManager from ..services.sessions.sessionmanager import SessionManager -from ..utils import ensure_async -from ..utils import url_path_join -from .gateway_client import gateway_request -from .gateway_client import GatewayClient +from ..utils import ensure_async, url_path_join +from .gateway_client import GatewayClient, gateway_request class GatewayMappingKernelManager(AsyncMappingKernelManager): diff --git a/jupyter_server/kernelspecs/handlers.py b/jupyter_server/kernelspecs/handlers.py index 437670d90a..5e0ace1704 100644 --- a/jupyter_server/kernelspecs/handlers.py +++ b/jupyter_server/kernelspecs/handlers.py @@ -1,9 +1,9 @@ from tornado import web -from ..base.handlers import JupyterHandler -from ..services.kernelspecs.handlers import kernel_name_regex from jupyter_server.auth import authorized +from ..base.handlers import JupyterHandler +from ..services.kernelspecs.handlers import kernel_name_regex AUTH_RESOURCE = "kernelspecs" diff --git a/jupyter_server/nbconvert/handlers.py b/jupyter_server/nbconvert/handlers.py index e7b1da8c2e..d02c977719 100644 --- a/jupyter_server/nbconvert/handlers.py +++ b/jupyter_server/nbconvert/handlers.py @@ -11,12 +11,10 @@ from tornado import web from tornado.log import app_log -from ..base.handlers import FilesRedirectHandler -from ..base.handlers import JupyterHandler -from ..base.handlers import path_regex from jupyter_server.auth import authorized from jupyter_server.utils import ensure_async +from ..base.handlers import FilesRedirectHandler, JupyterHandler, path_regex AUTH_RESOURCE = "nbconvert" diff --git a/jupyter_server/prometheus/metrics.py b/jupyter_server/prometheus/metrics.py index 7b6746ec28..ae98043c3e 100644 --- a/jupyter_server/prometheus/metrics.py +++ b/jupyter_server/prometheus/metrics.py @@ -11,13 +11,13 @@ # See https://github.com/jupyter/jupyter_server/issues/209 from notebook.prometheus.metrics import ( HTTP_REQUEST_DURATION_SECONDS, - TERMINAL_CURRENTLY_RUNNING_TOTAL, KERNEL_CURRENTLY_RUNNING_TOTAL, + TERMINAL_CURRENTLY_RUNNING_TOTAL, ) except ImportError: - from prometheus_client import Histogram, Gauge + from prometheus_client import Gauge, Histogram HTTP_REQUEST_DURATION_SECONDS = Histogram( "http_request_duration_seconds", diff --git a/jupyter_server/pytest_plugin.py b/jupyter_server/pytest_plugin.py index 45f3f73f26..5d039aa935 100644 --- a/jupyter_server/pytest_plugin.py +++ b/jupyter_server/pytest_plugin.py @@ -22,7 +22,6 @@ from jupyter_server.services.contents.largefilemanager import LargeFileManager from jupyter_server.utils import url_path_join - # List of dependencies needed for this plugin. pytest_plugins = [ "pytest_tornasync", diff --git a/jupyter_server/serverapp.py b/jupyter_server/serverapp.py index 60e92c35bb..627bfbe65a 100644 --- a/jupyter_server/serverapp.py +++ b/jupyter_server/serverapp.py @@ -37,10 +37,10 @@ resource = None from jinja2 import Environment, FileSystemLoader - from jupyter_core.paths import secure_write -from jupyter_server.transutils import trans, _i18n -from jupyter_server.utils import run_sync_in_loop, urljoin, pathname2url + +from jupyter_server.transutils import _i18n, trans +from jupyter_server.utils import pathname2url, run_sync_in_loop, urljoin # the minimum viable tornado version: needs to be kept in sync with setup.py MIN_TORNADO = (6, 1, 0) @@ -52,96 +52,90 @@ except (ImportError, AttributeError, AssertionError) as e: # pragma: no cover raise ImportError(_i18n("The Jupyter Server requires tornado >=%s.%s.%s") % MIN_TORNADO) from e -from tornado import httpserver -from tornado import ioloop -from tornado import web +from tornado import httpserver, ioloop, web from tornado.httputil import url_concat -from tornado.log import LogFormatter, app_log, access_log, gen_log +from tornado.log import LogFormatter, access_log, app_log, gen_log if not sys.platform.startswith("win"): from tornado.netutil import bind_unix_socket -from jupyter_server import ( - DEFAULT_JUPYTER_SERVER_PORT, - DEFAULT_STATIC_FILES_PATH, - DEFAULT_TEMPLATE_PATH_LIST, - __version__, -) - -from jupyter_server.base.handlers import MainHandler, RedirectWithParams, Template404 -from jupyter_server.log import log_request -from jupyter_server.services.kernels.kernelmanager import ( - MappingKernelManager, - AsyncMappingKernelManager, -) -from jupyter_server.services.config import ConfigManager -from jupyter_server.services.contents.manager import ( - AsyncContentsManager, - ContentsManager, -) -from jupyter_server.services.contents.filemanager import ( - AsyncFileContentsManager, - FileContentsManager, -) -from jupyter_server.services.contents.largefilemanager import LargeFileManager -from jupyter_server.services.sessions.sessionmanager import SessionManager -from jupyter_server.gateway.managers import ( - GatewayMappingKernelManager, - GatewayKernelSpecManager, - GatewaySessionManager, - GatewayClient, -) -from jupyter_server.auth.authorizer import Authorizer, AllowAllAuthorizer - -from jupyter_server.auth.login import LoginHandler -from jupyter_server.auth.logout import LogoutHandler -from jupyter_server.base.handlers import FileFindHandler - -from traitlets.config import Config -from traitlets.config.application import catch_config_error, boolean_flag -from jupyter_core.application import ( - JupyterApp, - base_flags, - base_aliases, -) from jupyter_client import KernelManager from jupyter_client.kernelspec import KernelSpecManager from jupyter_client.session import Session +from jupyter_core.application import JupyterApp, base_aliases, base_flags +from jupyter_core.paths import jupyter_runtime_dir from nbformat.sign import NotebookNotary from traitlets import ( Any, - Dict, - Unicode, - Integer, - List, Bool, Bytes, + Dict, + Float, Instance, + Integer, + List, TraitError, Type, - Float, - observe, + Unicode, default, + observe, validate, ) -from jupyter_core.paths import jupyter_runtime_dir -from jupyter_server._sysinfo import get_sys_info +from traitlets.config import Config +from traitlets.config.application import boolean_flag, catch_config_error +from jupyter_server import ( + DEFAULT_JUPYTER_SERVER_PORT, + DEFAULT_STATIC_FILES_PATH, + DEFAULT_TEMPLATE_PATH_LIST, + __version__, +) +from jupyter_server._sysinfo import get_sys_info from jupyter_server._tz import utcnow +from jupyter_server.auth.authorizer import AllowAllAuthorizer, Authorizer +from jupyter_server.auth.login import LoginHandler +from jupyter_server.auth.logout import LogoutHandler +from jupyter_server.base.handlers import ( + FileFindHandler, + MainHandler, + RedirectWithParams, + Template404, +) +from jupyter_server.extension.config import ExtensionConfigManager +from jupyter_server.extension.manager import ExtensionManager +from jupyter_server.extension.serverextension import ServerExtensionApp +from jupyter_server.gateway.managers import ( + GatewayClient, + GatewayKernelSpecManager, + GatewayMappingKernelManager, + GatewaySessionManager, +) +from jupyter_server.log import log_request +from jupyter_server.services.config import ConfigManager +from jupyter_server.services.contents.filemanager import ( + AsyncFileContentsManager, + FileContentsManager, +) +from jupyter_server.services.contents.largefilemanager import LargeFileManager +from jupyter_server.services.contents.manager import ( + AsyncContentsManager, + ContentsManager, +) +from jupyter_server.services.kernels.kernelmanager import ( + AsyncMappingKernelManager, + MappingKernelManager, +) +from jupyter_server.services.sessions.sessionmanager import SessionManager +from jupyter_server.traittypes import TypeFromClasses from jupyter_server.utils import ( - url_path_join, check_pid, - url_escape, + fetch, unix_socket_in_use, + url_escape, + url_path_join, urlencode_unix_socket_path, - fetch, ) -from jupyter_server.extension.serverextension import ServerExtensionApp -from jupyter_server.extension.manager import ExtensionManager -from jupyter_server.extension.config import ExtensionConfigManager -from jupyter_server.traittypes import TypeFromClasses - # Tolerate missing terminado package. try: from jupyter_server.terminal import TerminalManager diff --git a/jupyter_server/services/api/handlers.py b/jupyter_server/services/api/handlers.py index 8974215eb1..1c0cca5e19 100644 --- a/jupyter_server/services/api/handlers.py +++ b/jupyter_server/services/api/handlers.py @@ -6,13 +6,11 @@ from tornado import web -from ...base.handlers import APIHandler -from ...base.handlers import JupyterHandler -from jupyter_server._tz import isoformat -from jupyter_server._tz import utcfromtimestamp +from jupyter_server._tz import isoformat, utcfromtimestamp from jupyter_server.auth import authorized from jupyter_server.utils import ensure_async +from ...base.handlers import APIHandler, JupyterHandler AUTH_RESOURCE = "api" diff --git a/jupyter_server/services/config/handlers.py b/jupyter_server/services/config/handlers.py index 09bb88f1aa..385672b2b3 100644 --- a/jupyter_server/services/config/handlers.py +++ b/jupyter_server/services/config/handlers.py @@ -5,9 +5,9 @@ from tornado import web -from ...base.handlers import APIHandler from jupyter_server.auth import authorized +from ...base.handlers import APIHandler AUTH_RESOURCE = "config" diff --git a/jupyter_server/services/config/manager.py b/jupyter_server/services/config/manager.py index b252cf5264..5f04925fe7 100644 --- a/jupyter_server/services/config/manager.py +++ b/jupyter_server/services/config/manager.py @@ -4,17 +4,11 @@ # Distributed under the terms of the Modified BSD License. import os.path -from jupyter_core.paths import jupyter_config_dir -from jupyter_core.paths import jupyter_config_path -from traitlets import default -from traitlets import Instance -from traitlets import List -from traitlets import observe -from traitlets import Unicode +from jupyter_core.paths import jupyter_config_dir, jupyter_config_path +from traitlets import Instance, List, Unicode, default, observe from traitlets.config import LoggingConfigurable -from jupyter_server.config_manager import BaseJSONConfigManager -from jupyter_server.config_manager import recursive_update +from jupyter_server.config_manager import BaseJSONConfigManager, recursive_update class ConfigManager(LoggingConfigurable): diff --git a/jupyter_server/services/contents/filecheckpoints.py b/jupyter_server/services/contents/filecheckpoints.py index b4c89f73a0..eca4b44ea1 100644 --- a/jupyter_server/services/contents/filecheckpoints.py +++ b/jupyter_server/services/contents/filecheckpoints.py @@ -9,14 +9,16 @@ from tornado.web import HTTPError from traitlets import Unicode -from .checkpoints import AsyncCheckpoints -from .checkpoints import AsyncGenericCheckpointsMixin -from .checkpoints import Checkpoints -from .checkpoints import GenericCheckpointsMixin -from .fileio import AsyncFileManagerMixin -from .fileio import FileManagerMixin from jupyter_server import _tz as tz +from .checkpoints import ( + AsyncCheckpoints, + AsyncGenericCheckpointsMixin, + Checkpoints, + GenericCheckpointsMixin, +) +from .fileio import AsyncFileManagerMixin, FileManagerMixin + class FileCheckpoints(FileManagerMixin, Checkpoints): """ diff --git a/jupyter_server/services/contents/fileio.py b/jupyter_server/services/contents/fileio.py index 4ef4f95811..3f78fdf317 100644 --- a/jupyter_server/services/contents/fileio.py +++ b/jupyter_server/services/contents/fileio.py @@ -7,8 +7,7 @@ import io import os import shutil -from base64 import decodebytes -from base64 import encodebytes +from base64 import decodebytes, encodebytes from contextlib import contextmanager from functools import partial @@ -18,8 +17,7 @@ from traitlets import Bool from traitlets.config import Configurable -from jupyter_server.utils import to_api_path -from jupyter_server.utils import to_os_path +from jupyter_server.utils import to_api_path, to_os_path def replace_file(src, dst): diff --git a/jupyter_server/services/contents/filemanager.py b/jupyter_server/services/contents/filemanager.py index 0a53e4e01b..655739bf41 100644 --- a/jupyter_server/services/contents/filemanager.py +++ b/jupyter_server/services/contents/filemanager.py @@ -11,27 +11,19 @@ import nbformat from anyio.to_thread import run_sync -from jupyter_core.paths import exists -from jupyter_core.paths import is_file_hidden -from jupyter_core.paths import is_hidden +from jupyter_core.paths import exists, is_file_hidden, is_hidden from send2trash import send2trash from tornado import web -from traitlets import Bool -from traitlets import default -from traitlets import TraitError -from traitlets import Unicode -from traitlets import validate - -from .filecheckpoints import AsyncFileCheckpoints -from .filecheckpoints import FileCheckpoints -from .fileio import AsyncFileManagerMixin -from .fileio import FileManagerMixin -from .manager import AsyncContentsManager -from .manager import ContentsManager +from traitlets import Bool, TraitError, Unicode, default, validate + from jupyter_server import _tz as tz from jupyter_server.base.handlers import AuthenticatedFileHandler from jupyter_server.transutils import _i18n +from .filecheckpoints import AsyncFileCheckpoints, FileCheckpoints +from .fileio import AsyncFileManagerMixin, FileManagerMixin +from .manager import AsyncContentsManager, ContentsManager + try: from os.path import samefile except ImportError: diff --git a/jupyter_server/services/contents/handlers.py b/jupyter_server/services/contents/handlers.py index 83db1f99ee..ff68f4ddd6 100644 --- a/jupyter_server/services/contents/handlers.py +++ b/jupyter_server/services/contents/handlers.py @@ -10,16 +10,12 @@ from jupyter_client.jsonutil import json_default except ImportError: from jupyter_client.jsonutil import date_default as json_default + from tornado import web -from jupyter_server.base.handlers import APIHandler -from jupyter_server.base.handlers import JupyterHandler -from jupyter_server.base.handlers import path_regex -from jupyter_server.utils import ensure_async -from jupyter_server.utils import url_escape -from jupyter_server.utils import url_path_join from jupyter_server.auth import authorized - +from jupyter_server.base.handlers import APIHandler, JupyterHandler, path_regex +from jupyter_server.utils import ensure_async, url_escape, url_path_join AUTH_RESOURCE = "contents" diff --git a/jupyter_server/services/contents/largefilemanager.py b/jupyter_server/services/contents/largefilemanager.py index de1801eec8..3977603997 100644 --- a/jupyter_server/services/contents/largefilemanager.py +++ b/jupyter_server/services/contents/largefilemanager.py @@ -5,8 +5,10 @@ from anyio.to_thread import run_sync from tornado import web -from jupyter_server.services.contents.filemanager import AsyncFileContentsManager -from jupyter_server.services.contents.filemanager import FileContentsManager +from jupyter_server.services.contents.filemanager import ( + AsyncFileContentsManager, + FileContentsManager, +) class LargeFileManager(FileContentsManager): diff --git a/jupyter_server/services/contents/manager.py b/jupyter_server/services/contents/manager.py index 2a2cf0c4b7..90b9efafb8 100644 --- a/jupyter_server/services/contents/manager.py +++ b/jupyter_server/services/contents/manager.py @@ -7,31 +7,29 @@ import warnings from fnmatch import fnmatch -from nbformat import sign +from nbformat import ValidationError, sign from nbformat import validate as validate_nb -from nbformat import ValidationError from nbformat.v4 import new_notebook -from tornado.web import HTTPError -from tornado.web import RequestHandler -from traitlets import Any -from traitlets import Bool -from traitlets import default -from traitlets import Dict -from traitlets import Instance -from traitlets import List -from traitlets import TraitError -from traitlets import Type -from traitlets import Unicode -from traitlets import validate +from tornado.web import HTTPError, RequestHandler +from traitlets import ( + Any, + Bool, + Dict, + Instance, + List, + TraitError, + Type, + Unicode, + default, + validate, +) from traitlets.config.configurable import LoggingConfigurable -from ...files.handlers import FilesHandler -from .checkpoints import AsyncCheckpoints -from .checkpoints import Checkpoints from jupyter_server.transutils import _i18n -from jupyter_server.utils import ensure_async -from jupyter_server.utils import import_item +from jupyter_server.utils import ensure_async, import_item +from ...files.handlers import FilesHandler +from .checkpoints import AsyncCheckpoints, Checkpoints copy_pat = re.compile(r"\-Copy\d*\.") diff --git a/jupyter_server/services/kernels/handlers.py b/jupyter_server/services/kernels/handlers.py index 80762d0dd4..9f592fc38d 100644 --- a/jupyter_server/services/kernels/handlers.py +++ b/jupyter_server/services/kernels/handlers.py @@ -14,23 +14,21 @@ from jupyter_client.jsonutil import json_default except ImportError: from jupyter_client.jsonutil import date_default as json_default -from tornado import gen -from tornado import web + +from tornado import gen, web from tornado.concurrent import Future from tornado.ioloop import IOLoop +from jupyter_server.auth import authorized +from jupyter_server.utils import ensure_async, url_escape, url_path_join + from ...base.handlers import APIHandler -from ...base.zmqhandlers import AuthenticatedZMQStreamHandler from ...base.zmqhandlers import ( + AuthenticatedZMQStreamHandler, deserialize_binary_message, - serialize_msg_to_ws_v1, deserialize_msg_from_ws_v1, + serialize_msg_to_ws_v1, ) -from jupyter_server.utils import ensure_async -from jupyter_server.utils import url_escape -from jupyter_server.utils import url_path_join -from jupyter_server.auth import authorized - AUTH_RESOURCE = "kernels" diff --git a/jupyter_server/services/kernels/kernelmanager.py b/jupyter_server/services/kernels/kernelmanager.py index 461b8b4351..f9b9af23bd 100644 --- a/jupyter_server/services/kernels/kernelmanager.py +++ b/jupyter_server/services/kernels/kernelmanager.py @@ -8,35 +8,35 @@ import asyncio import os from collections import defaultdict -from datetime import datetime -from datetime import timedelta +from datetime import datetime, timedelta from functools import partial -from jupyter_client.multikernelmanager import AsyncMultiKernelManager -from jupyter_client.multikernelmanager import MultiKernelManager +from jupyter_client.multikernelmanager import ( + AsyncMultiKernelManager, + MultiKernelManager, +) from jupyter_client.session import Session from jupyter_core.paths import exists from tornado import web from tornado.concurrent import Future -from tornado.ioloop import IOLoop -from tornado.ioloop import PeriodicCallback -from traitlets import Any -from traitlets import Bool -from traitlets import default -from traitlets import Dict -from traitlets import Float -from traitlets import Instance -from traitlets import Integer -from traitlets import List -from traitlets import TraitError -from traitlets import Unicode -from traitlets import validate - -from jupyter_server._tz import isoformat -from jupyter_server._tz import utcnow +from tornado.ioloop import IOLoop, PeriodicCallback +from traitlets import ( + Any, + Bool, + Dict, + Float, + Instance, + Integer, + List, + TraitError, + Unicode, + default, + validate, +) + +from jupyter_server._tz import isoformat, utcnow from jupyter_server.prometheus.metrics import KERNEL_CURRENTLY_RUNNING_TOTAL -from jupyter_server.utils import ensure_async -from jupyter_server.utils import to_os_path +from jupyter_server.utils import ensure_async, to_os_path class MappingKernelManager(MultiKernelManager): diff --git a/jupyter_server/services/kernelspecs/handlers.py b/jupyter_server/services/kernelspecs/handlers.py index 89bb4e4592..6cd5d9dcba 100644 --- a/jupyter_server/services/kernelspecs/handlers.py +++ b/jupyter_server/services/kernelspecs/handlers.py @@ -12,10 +12,10 @@ from tornado import web -from ...base.handlers import APIHandler -from ...utils import ensure_async, url_path_join, url_unescape from jupyter_server.auth import authorized +from ...base.handlers import APIHandler +from ...utils import ensure_async, url_path_join, url_unescape AUTH_RESOURCE = "kernelspecs" diff --git a/jupyter_server/services/nbconvert/handlers.py b/jupyter_server/services/nbconvert/handlers.py index d64c0566ea..6cb979bd4c 100644 --- a/jupyter_server/services/nbconvert/handlers.py +++ b/jupyter_server/services/nbconvert/handlers.py @@ -4,9 +4,9 @@ from anyio.to_thread import run_sync from tornado import web -from ...base.handlers import APIHandler from jupyter_server.auth import authorized +from ...base.handlers import APIHandler AUTH_RESOURCE = "nbconvert" diff --git a/jupyter_server/services/security/handlers.py b/jupyter_server/services/security/handlers.py index 5bf540fa72..221f27302c 100644 --- a/jupyter_server/services/security/handlers.py +++ b/jupyter_server/services/security/handlers.py @@ -3,10 +3,10 @@ # Distributed under the terms of the Modified BSD License. from tornado import web -from . import csp_report_uri -from ...base.handlers import APIHandler from jupyter_server.auth import authorized +from ...base.handlers import APIHandler +from . import csp_report_uri AUTH_RESOURCE = "csp" diff --git a/jupyter_server/services/sessions/handlers.py b/jupyter_server/services/sessions/handlers.py index 09e3ca367b..04a71ce4b7 100644 --- a/jupyter_server/services/sessions/handlers.py +++ b/jupyter_server/services/sessions/handlers.py @@ -11,14 +11,14 @@ from jupyter_client.jsonutil import json_default except ImportError: from jupyter_client.jsonutil import date_default as json_default + from jupyter_client.kernelspec import NoSuchKernel from tornado import web -from ...base.handlers import APIHandler -from jupyter_server.utils import ensure_async -from jupyter_server.utils import url_path_join from jupyter_server.auth import authorized +from jupyter_server.utils import ensure_async, url_path_join +from ...base.handlers import APIHandler AUTH_RESOURCE = "sessions" diff --git a/jupyter_server/services/sessions/sessionmanager.py b/jupyter_server/services/sessions/sessionmanager.py index 5cfe9186bc..b7c400af59 100644 --- a/jupyter_server/services/sessions/sessionmanager.py +++ b/jupyter_server/services/sessions/sessionmanager.py @@ -11,15 +11,11 @@ from pysqlite2 import dbapi2 as sqlite3 from tornado import web - +from traitlets import Instance, TraitError, Unicode, validate from traitlets.config.configurable import LoggingConfigurable -from traitlets import Instance -from traitlets import Unicode -from traitlets import validate -from traitlets import TraitError -from jupyter_server.utils import ensure_async from jupyter_server.traittypes import InstanceFromClasses +from jupyter_server.utils import ensure_async class SessionManager(LoggingConfigurable): diff --git a/jupyter_server/services/shutdown.py b/jupyter_server/services/shutdown.py index a77e90091b..c8ad40fa57 100644 --- a/jupyter_server/services/shutdown.py +++ b/jupyter_server/services/shutdown.py @@ -1,12 +1,10 @@ """HTTP handler to shut down the Jupyter server. """ -from tornado import ioloop -from tornado import web +from tornado import ioloop, web from jupyter_server.auth import authorized from jupyter_server.base.handlers import JupyterHandler - AUTH_RESOURCE = "server" diff --git a/jupyter_server/terminal/__init__.py b/jupyter_server/terminal/__init__.py index 3a556b1131..c8d2856087 100644 --- a/jupyter_server/terminal/__init__.py +++ b/jupyter_server/terminal/__init__.py @@ -10,6 +10,7 @@ raise ImportError("terminado >= 0.8.3 required, found %s" % terminado.__version__) from jupyter_server.utils import url_path_join as ujoin + from . import api_handlers from .handlers import TermSocket from .terminalmanager import TerminalManager diff --git a/jupyter_server/terminal/api_handlers.py b/jupyter_server/terminal/api_handlers.py index 307b0d9852..e521dd353a 100644 --- a/jupyter_server/terminal/api_handlers.py +++ b/jupyter_server/terminal/api_handlers.py @@ -3,9 +3,9 @@ from tornado import web -from ..base.handlers import APIHandler from jupyter_server.auth import authorized +from ..base.handlers import APIHandler AUTH_RESOURCE = "terminals" diff --git a/jupyter_server/terminal/handlers.py b/jupyter_server/terminal/handlers.py index d4c42ef3d2..61a9196361 100644 --- a/jupyter_server/terminal/handlers.py +++ b/jupyter_server/terminal/handlers.py @@ -5,11 +5,12 @@ import terminado from tornado import web -from ..base.handlers import JupyterHandler -from ..base.zmqhandlers import WebSocketMixin from jupyter_server._tz import utcnow from jupyter_server.auth.utils import warn_disabled_authorization +from ..base.handlers import JupyterHandler +from ..base.zmqhandlers import WebSocketMixin + AUTH_RESOURCE = "terminals" diff --git a/jupyter_server/terminal/terminalmanager.py b/jupyter_server/terminal/terminalmanager.py index 7806173731..b9c516f5e5 100644 --- a/jupyter_server/terminal/terminalmanager.py +++ b/jupyter_server/terminal/terminalmanager.py @@ -8,14 +8,13 @@ import terminado from tornado import web -from tornado.ioloop import IOLoop -from tornado.ioloop import PeriodicCallback +from tornado.ioloop import IOLoop, PeriodicCallback from traitlets import Integer from traitlets.config import LoggingConfigurable +from jupyter_server._tz import isoformat, utcnow + from ..prometheus.metrics import TERMINAL_CURRENTLY_RUNNING_TOTAL -from jupyter_server._tz import isoformat -from jupyter_server._tz import utcnow class TerminalManager(LoggingConfigurable, terminado.NamedTermManager): diff --git a/jupyter_server/traittypes.py b/jupyter_server/traittypes.py index 0f835b4a45..baa56dc6a5 100644 --- a/jupyter_server/traittypes.py +++ b/jupyter_server/traittypes.py @@ -1,9 +1,7 @@ import inspect from ast import literal_eval -from traitlets import ClassBasedTraitType -from traitlets import TraitError -from traitlets import Undefined +from traitlets import ClassBasedTraitType, TraitError, Undefined from traitlets.utils.descriptions import describe diff --git a/jupyter_server/utils.py b/jupyter_server/utils.py index dfbe8e37fc..ef213e6b81 100644 --- a/jupyter_server/utils.py +++ b/jupyter_server/utils.py @@ -8,21 +8,14 @@ import os import socket import sys -from _frozen_importlib_external import _NamespacePath from contextlib import contextmanager -from urllib.parse import quote -from urllib.parse import SplitResult -from urllib.parse import unquote from urllib.parse import urljoin # noqa: F401 -from urllib.parse import urlparse -from urllib.parse import urlsplit -from urllib.parse import urlunsplit +from urllib.parse import SplitResult, quote, unquote, urlparse, urlsplit, urlunsplit from urllib.request import pathname2url # noqa: F401 +from _frozen_importlib_external import _NamespacePath from packaging.version import Version -from tornado.httpclient import AsyncHTTPClient -from tornado.httpclient import HTTPClient -from tornado.httpclient import HTTPRequest +from tornado.httpclient import AsyncHTTPClient, HTTPClient, HTTPRequest from tornado.netutil import Resolver diff --git a/jupyter_server/view/handlers.py b/jupyter_server/view/handlers.py index a7d50f2768..e221975a2a 100644 --- a/jupyter_server/view/handlers.py +++ b/jupyter_server/view/handlers.py @@ -4,13 +4,10 @@ # Distributed under the terms of the Modified BSD License. from tornado import web -from ..base.handlers import JupyterHandler -from ..base.handlers import path_regex -from ..utils import ensure_async -from ..utils import url_escape -from ..utils import url_path_join from jupyter_server.auth import authorized +from ..base.handlers import JupyterHandler, path_regex +from ..utils import ensure_async, url_escape, url_path_join AUTH_RESOURCE = "contents" diff --git a/pyproject.toml b/pyproject.toml index 7055f94979..c98a59e79f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ factory = "jupyter_packaging.npm_builder" ignore = ["tbump.toml", ".*", "*.yml", "package-lock.json", "bootstrap*", "conftest.py"] [tool.pytest.ini_options] -addopts = "--doctest-modules" +addopts = "-raXs --durations 10 --color=yes --doctest-modules" testpaths = [ "tests/" ] diff --git a/setup.py b/setup.py index 9a33dccc5d..33b952f110 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup try: - from jupyter_packaging import wrap_installers, npm_builder + from jupyter_packaging import npm_builder, wrap_installers ensured_targets = ["jupyter_server/static/style/bootstrap.min.css"] cmdclass = wrap_installers(pre_develop=npm_builder(), ensured_targets=ensured_targets) diff --git a/tests/auth/test_authorizer.py b/tests/auth/test_authorizer.py index 5e36976888..1fc694d3c4 100644 --- a/tests/auth/test_authorizer.py +++ b/tests/auth/test_authorizer.py @@ -9,8 +9,7 @@ from tornado.websocket import WebSocketHandler from jupyter_server.auth.authorizer import Authorizer -from jupyter_server.auth.utils import HTTP_METHOD_TO_AUTH_ACTION -from jupyter_server.auth.utils import match_url_to_resource +from jupyter_server.auth.utils import HTTP_METHOD_TO_AUTH_ACTION, match_url_to_resource from jupyter_server.services.security import csp_report_uri diff --git a/tests/auth/test_login.py b/tests/auth/test_login.py index 6f1c358cc4..0b918d91d5 100644 --- a/tests/auth/test_login.py +++ b/tests/auth/test_login.py @@ -4,8 +4,7 @@ import pytest from tornado.httpclient import HTTPClientError -from tornado.httputil import parse_cookie -from tornado.httputil import url_concat +from tornado.httputil import parse_cookie, url_concat from jupyter_server.utils import url_path_join diff --git a/tests/auth/test_security.py b/tests/auth/test_security.py index 0f8a385dc8..f54afbc27a 100644 --- a/tests/auth/test_security.py +++ b/tests/auth/test_security.py @@ -1,5 +1,4 @@ -from jupyter_server.auth.security import passwd -from jupyter_server.auth.security import passwd_check +from jupyter_server.auth.security import passwd, passwd_check def test_passwd_structure(): diff --git a/tests/extension/mockextensions/app.py b/tests/extension/mockextensions/app.py index 4c50a6e9c9..6b3fc95a9b 100644 --- a/tests/extension/mockextensions/app.py +++ b/tests/extension/mockextensions/app.py @@ -1,13 +1,13 @@ import os -from traitlets import List -from traitlets import Unicode +from traitlets import List, Unicode from jupyter_server.base.handlers import JupyterHandler -from jupyter_server.extension.application import ExtensionApp -from jupyter_server.extension.application import ExtensionAppJinjaMixin -from jupyter_server.extension.handler import ExtensionHandlerJinjaMixin -from jupyter_server.extension.handler import ExtensionHandlerMixin +from jupyter_server.extension.application import ExtensionApp, ExtensionAppJinjaMixin +from jupyter_server.extension.handler import ( + ExtensionHandlerJinjaMixin, + ExtensionHandlerMixin, +) STATIC_PATH = os.path.join(os.path.dirname(__file__), "static") diff --git a/tests/extension/test_app.py b/tests/extension/test_app.py index c550e4c75e..1641253fa6 100644 --- a/tests/extension/test_app.py +++ b/tests/extension/test_app.py @@ -1,10 +1,11 @@ import pytest from traitlets.config import Config -from .mockextensions.app import MockExtensionApp from jupyter_server.serverapp import ServerApp from jupyter_server.utils import run_sync +from .mockextensions.app import MockExtensionApp + @pytest.fixture def jp_server_config(jp_template_dir): diff --git a/tests/extension/test_config.py b/tests/extension/test_config.py index 8669697d8a..5667c3efae 100644 --- a/tests/extension/test_config.py +++ b/tests/extension/test_config.py @@ -1,9 +1,7 @@ import pytest from jupyter_core.paths import jupyter_config_path -from jupyter_server.extension.config import ( - ExtensionConfigManager, -) +from jupyter_server.extension.config import ExtensionConfigManager # Use ServerApps environment because it monkeypatches # jupyter_core.paths and provides a config directory diff --git a/tests/extension/test_entrypoint.py b/tests/extension/test_entrypoint.py index 5f7d10de80..7e0974c1c3 100644 --- a/tests/extension/test_entrypoint.py +++ b/tests/extension/test_entrypoint.py @@ -1,6 +1,5 @@ import pytest - # All test coroutines will be treated as marked. pytestmark = pytest.mark.script_launch_mode("subprocess") diff --git a/tests/extension/test_launch.py b/tests/extension/test_launch.py index 5cefcdbffb..9c0d301be4 100644 --- a/tests/extension/test_launch.py +++ b/tests/extension/test_launch.py @@ -11,7 +11,6 @@ import pytest import requests - HERE = os.path.dirname(os.path.abspath(__file__)) diff --git a/tests/extension/test_manager.py b/tests/extension/test_manager.py index 2a0956e19c..2b52fea543 100644 --- a/tests/extension/test_manager.py +++ b/tests/extension/test_manager.py @@ -4,11 +4,13 @@ import pytest from jupyter_core.paths import jupyter_config_path -from jupyter_server.extension.manager import ExtensionManager -from jupyter_server.extension.manager import ExtensionMetadataError -from jupyter_server.extension.manager import ExtensionModuleNotFound -from jupyter_server.extension.manager import ExtensionPackage -from jupyter_server.extension.manager import ExtensionPoint +from jupyter_server.extension.manager import ( + ExtensionManager, + ExtensionMetadataError, + ExtensionModuleNotFound, + ExtensionPackage, + ExtensionPoint, +) # Use ServerApps environment because it monkeypatches # jupyter_core.paths and provides a config directory diff --git a/tests/extension/test_serverextension.py b/tests/extension/test_serverextension.py index 01f40b4ee2..76ee1d78d9 100644 --- a/tests/extension/test_serverextension.py +++ b/tests/extension/test_serverextension.py @@ -4,9 +4,10 @@ from traitlets.tests.utils import check_help_all_output from jupyter_server.config_manager import BaseJSONConfigManager -from jupyter_server.extension.serverextension import _get_config_dir -from jupyter_server.extension.serverextension import toggle_server_extension_python - +from jupyter_server.extension.serverextension import ( + _get_config_dir, + toggle_server_extension_python, +) # Use ServerApps environment because it monkeypatches # jupyter_core.paths and provides a config directory diff --git a/tests/extension/test_utils.py b/tests/extension/test_utils.py index 8ce59e9027..49a36b20ee 100644 --- a/tests/extension/test_utils.py +++ b/tests/extension/test_utils.py @@ -2,7 +2,6 @@ from jupyter_server.extension.utils import validate_extension - # Use ServerApps environment because it monkeypatches # jupyter_core.paths and provides a config directory # that's not cross contaminating the user config directory. diff --git a/tests/nbconvert/test_handlers.py b/tests/nbconvert/test_handlers.py index 75d2372c65..02aba1ba53 100644 --- a/tests/nbconvert/test_handlers.py +++ b/tests/nbconvert/test_handlers.py @@ -6,14 +6,10 @@ import pytest import tornado from nbformat import writes -from nbformat.v4 import new_code_cell -from nbformat.v4 import new_markdown_cell -from nbformat.v4 import new_notebook -from nbformat.v4 import new_output +from nbformat.v4 import new_code_cell, new_markdown_cell, new_notebook, new_output from ..utils import expected_http_error - png_green_pixel = encodebytes( b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00" b"\x00\x00\x01\x00\x00x00\x01\x08\x02\x00\x00\x00\x90wS\xde\x00\x00\x00\x0cIDAT" diff --git a/tests/services/contents/test_api.py b/tests/services/contents/test_api.py index 2d15cc2291..d6521a6f8d 100644 --- a/tests/services/contents/test_api.py +++ b/tests/services/contents/test_api.py @@ -1,20 +1,18 @@ import json import pathlib import sys -from base64 import decodebytes -from base64 import encodebytes +from base64 import decodebytes, encodebytes from unicodedata import normalize import pytest import tornado -from nbformat import from_dict -from nbformat import writes -from nbformat.v4 import new_markdown_cell -from nbformat.v4 import new_notebook +from nbformat import from_dict, writes +from nbformat.v4 import new_markdown_cell, new_notebook -from ...utils import expected_http_error from jupyter_server.utils import url_path_join +from ...utils import expected_http_error + def notebooks_only(dir_model): return [nb for nb in dir_model["content"] if nb["type"] == "notebook"] diff --git a/tests/services/contents/test_config.py b/tests/services/contents/test_config.py index 02f4d702ca..189226b49d 100644 --- a/tests/services/contents/test_config.py +++ b/tests/services/contents/test_config.py @@ -1,8 +1,10 @@ import pytest from jupyter_server.services.contents.checkpoints import AsyncCheckpoints -from jupyter_server.services.contents.filecheckpoints import AsyncGenericFileCheckpoints -from jupyter_server.services.contents.filecheckpoints import GenericFileCheckpoints +from jupyter_server.services.contents.filecheckpoints import ( + AsyncGenericFileCheckpoints, + GenericFileCheckpoints, +) from jupyter_server.services.contents.manager import AsyncContentsManager diff --git a/tests/services/contents/test_fileio.py b/tests/services/contents/test_fileio.py index d330ea540a..4c287c5261 100644 --- a/tests/services/contents/test_fileio.py +++ b/tests/services/contents/test_fileio.py @@ -7,7 +7,6 @@ from jupyter_server.services.contents.fileio import atomic_writing - umask = 0 diff --git a/tests/services/contents/test_largefilemanager.py b/tests/services/contents/test_largefilemanager.py index a53ae66693..82c5e54e78 100644 --- a/tests/services/contents/test_largefilemanager.py +++ b/tests/services/contents/test_largefilemanager.py @@ -1,11 +1,14 @@ import pytest import tornado -from ...utils import expected_http_error -from jupyter_server.services.contents.largefilemanager import AsyncLargeFileManager -from jupyter_server.services.contents.largefilemanager import LargeFileManager +from jupyter_server.services.contents.largefilemanager import ( + AsyncLargeFileManager, + LargeFileManager, +) from jupyter_server.utils import ensure_async +from ...utils import expected_http_error + @pytest.fixture(params=[LargeFileManager, AsyncLargeFileManager]) def jp_large_contents_manager(request, tmp_path): diff --git a/tests/services/contents/test_manager.py b/tests/services/contents/test_manager.py index 04608dc6e1..2542488162 100644 --- a/tests/services/contents/test_manager.py +++ b/tests/services/contents/test_manager.py @@ -2,22 +2,23 @@ import sys import time from itertools import combinations -from typing import Dict -from typing import Optional -from typing import Tuple +from typing import Dict, Optional, Tuple from unittest.mock import patch import pytest -from nbformat import v4 as nbformat from nbformat import ValidationError +from nbformat import v4 as nbformat from tornado.web import HTTPError from traitlets import TraitError -from ...utils import expected_http_error -from jupyter_server.services.contents.filemanager import AsyncFileContentsManager -from jupyter_server.services.contents.filemanager import FileContentsManager +from jupyter_server.services.contents.filemanager import ( + AsyncFileContentsManager, + FileContentsManager, +) from jupyter_server.utils import ensure_async +from ...utils import expected_http_error + @pytest.fixture( params=[ diff --git a/tests/services/kernels/test_api.py b/tests/services/kernels/test_api.py index 6630e2059c..bb91a588e4 100644 --- a/tests/services/kernels/test_api.py +++ b/tests/services/kernels/test_api.py @@ -8,9 +8,9 @@ from jupyter_client.kernelspec import NATIVE_KERNEL_NAME from tornado.httpclient import HTTPClientError -from ...utils import expected_http_error from jupyter_server.utils import url_path_join +from ...utils import expected_http_error TEST_TIMEOUT = 60 diff --git a/tests/services/kernels/test_cull.py b/tests/services/kernels/test_cull.py index e2b5f0f400..97f1a57bbe 100644 --- a/tests/services/kernels/test_cull.py +++ b/tests/services/kernels/test_cull.py @@ -8,7 +8,6 @@ from tornado.httpclient import HTTPClientError from traitlets.config import Config - CULL_TIMEOUT = 30 if platform.python_implementation() == "PyPy" else 5 CULL_INTERVAL = 1 diff --git a/tests/services/kernelspecs/test_api.py b/tests/services/kernelspecs/test_api.py index 9471420735..f414469880 100644 --- a/tests/services/kernelspecs/test_api.py +++ b/tests/services/kernelspecs/test_api.py @@ -4,8 +4,7 @@ import tornado from jupyter_client.kernelspec import NATIVE_KERNEL_NAME -from ...utils import expected_http_error -from ...utils import some_resource +from ...utils import expected_http_error, some_resource async def test_list_kernelspecs_bad(jp_fetch, jp_kernelspecs, jp_data_dir): diff --git a/tests/services/sessions/test_api.py b/tests/services/sessions/test_api.py index 2fe9f7b7a1..d455d11cdf 100644 --- a/tests/services/sessions/test_api.py +++ b/tests/services/sessions/test_api.py @@ -12,10 +12,10 @@ from tornado.httpclient import HTTPClientError from traitlets import default -from ...utils import expected_http_error from jupyter_server.services.kernels.kernelmanager import AsyncMappingKernelManager from jupyter_server.utils import url_path_join +from ...utils import expected_http_error TEST_TIMEOUT = 60 diff --git a/tests/services/sessions/test_manager.py b/tests/services/sessions/test_manager.py index f0142be42b..7191cfae4c 100644 --- a/tests/services/sessions/test_manager.py +++ b/tests/services/sessions/test_manager.py @@ -2,8 +2,7 @@ from tornado import web from traitlets import TraitError -from jupyter_server._tz import isoformat -from jupyter_server._tz import utcnow +from jupyter_server._tz import isoformat, utcnow from jupyter_server.services.contents.manager import ContentsManager from jupyter_server.services.kernels.kernelmanager import MappingKernelManager from jupyter_server.services.sessions.sessionmanager import SessionManager diff --git a/tests/test_files.py b/tests/test_files.py index a7b063a927..7fac8419d4 100644 --- a/tests/test_files.py +++ b/tests/test_files.py @@ -5,10 +5,7 @@ import pytest import tornado from nbformat import writes -from nbformat.v4 import new_code_cell -from nbformat.v4 import new_markdown_cell -from nbformat.v4 import new_notebook -from nbformat.v4 import new_output +from nbformat.v4 import new_code_cell, new_markdown_cell, new_notebook, new_output from .utils import expected_http_error diff --git a/tests/test_gateway.py b/tests/test_gateway.py index f935d61e0c..d040999558 100644 --- a/tests/test_gateway.py +++ b/tests/test_gateway.py @@ -8,14 +8,14 @@ import pytest import tornado -from tornado.httpclient import HTTPRequest -from tornado.httpclient import HTTPResponse +from tornado.httpclient import HTTPRequest, HTTPResponse from tornado.web import HTTPError -from .utils import expected_http_error from jupyter_server.gateway.managers import GatewayClient from jupyter_server.utils import ensure_async +from .utils import expected_http_error + def generate_kernelspec(name): argv_stanza = ["python", "-m", "ipykernel_launcher", "-f", "{connection_file}"] diff --git a/tests/test_serialize.py b/tests/test_serialize.py index 56314df94c..6469097bba 100644 --- a/tests/test_serialize.py +++ b/tests/test_serialize.py @@ -3,8 +3,10 @@ from jupyter_client.session import Session -from jupyter_server.base.zmqhandlers import deserialize_binary_message -from jupyter_server.base.zmqhandlers import serialize_binary_message +from jupyter_server.base.zmqhandlers import ( + deserialize_binary_message, + serialize_binary_message, +) def test_serialize_binary(): diff --git a/tests/test_serverapp.py b/tests/test_serverapp.py index 0cec767ebb..89225e50bb 100644 --- a/tests/test_serverapp.py +++ b/tests/test_serverapp.py @@ -10,9 +10,7 @@ from traitlets.tests.utils import check_help_all_output from jupyter_server.auth.security import passwd_check -from jupyter_server.serverapp import JupyterPasswordApp -from jupyter_server.serverapp import list_running_servers -from jupyter_server.serverapp import ServerApp +from jupyter_server.serverapp import JupyterPasswordApp, ServerApp, list_running_servers def test_help_output(): diff --git a/tests/test_traittypes.py b/tests/test_traittypes.py index 0b1849f686..7d9027c9f3 100644 --- a/tests/test_traittypes.py +++ b/tests/test_traittypes.py @@ -1,11 +1,9 @@ import pytest -from traitlets import HasTraits -from traitlets import TraitError +from traitlets import HasTraits, TraitError from traitlets.utils.importstring import import_item from jupyter_server.services.contents.largefilemanager import LargeFileManager -from jupyter_server.traittypes import InstanceFromClasses -from jupyter_server.traittypes import TypeFromClasses +from jupyter_server.traittypes import InstanceFromClasses, TypeFromClasses class DummyClass: diff --git a/tests/test_utils.py b/tests/test_utils.py index c49be09ade..5c5d16e73d 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -4,9 +4,7 @@ import pytest from traitlets.tests.utils import check_help_all_output -from jupyter_server.utils import is_namespace_package -from jupyter_server.utils import url_escape -from jupyter_server.utils import url_unescape +from jupyter_server.utils import is_namespace_package, url_escape, url_unescape def test_help_output(): diff --git a/tests/test_version.py b/tests/test_version.py index 879c257c46..91ba97933b 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -4,7 +4,6 @@ from jupyter_server import __version__ - pep440re = re.compile(r"^(\d+)\.(\d+)\.(\d+((a|b|rc)\d+)?)(\.post\d+)?(\.dev\d*)?$") diff --git a/tests/test_view.py b/tests/test_view.py index f6fbca5a93..d822addb11 100644 --- a/tests/test_view.py +++ b/tests/test_view.py @@ -4,9 +4,10 @@ import pytest import tornado -from .utils import expected_http_error from jupyter_server.utils import url_path_join +from .utils import expected_http_error + class IFrameSrcFinder(HTMLParser): """Minimal HTML parser to find iframe.src attr""" diff --git a/tests/unix_sockets/test_api.py b/tests/unix_sockets/test_api.py index ac5abb9706..85714f4a52 100644 --- a/tests/unix_sockets/test_api.py +++ b/tests/unix_sockets/test_api.py @@ -13,11 +13,7 @@ from tornado.netutil import bind_unix_socket import jupyter_server.serverapp -from jupyter_server.utils import ( - url_path_join, - urlencode_unix_socket, - async_fetch, -) +from jupyter_server.utils import async_fetch, url_path_join, urlencode_unix_socket @pytest.fixture From 6d96c8946a6de0fad3085d918bde69ccfdb9eee0 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 27 Mar 2022 05:43:24 -0500 Subject: [PATCH 2/2] fix spelling error --- .github/workflows/python-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 936f6b6203..19afc1c8a9 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -88,7 +88,7 @@ jobs: pip install -r doc-requirements.txt make html SPHINXOPTS="-W" - test_miniumum_versions: + test_minimum_versions: name: Test Minimum Versions timeout-minutes: 20 runs-on: ubuntu-latest