Merge pull request #4219 from consideRatio/pr/stricter-flake8

pre-commit: add autoflake and make flake8 checks stricter
This commit is contained in:
Min RK
2022-11-21 15:10:14 +01:00
committed by GitHub
34 changed files with 67 additions and 55 deletions

View File

@@ -4,11 +4,8 @@
# W: style warnings
# C: complexity
# D: docstring warnings (unused pydocstyle extension)
# F401: module imported but unused
# F403: import *
# F811: redefinition of unused `name` from line `N`
# F841: local variable assigned but never used
ignore = E, C, W, D, F401, F403, F811, F841
ignore = E, C, W, D, F841
builtins = c, get_config
exclude =
.cache,

View File

@@ -17,6 +17,15 @@ repos:
args:
- --py36-plus
# Autoformat: Python code
- repo: https://github.com/PyCQA/autoflake
rev: v1.7.7
hooks:
- id: autoflake
# args ref: https://github.com/PyCQA/autoflake#advanced-usage
args:
- --in-place
# Autoformat: Python code
- repo: https://github.com/pycqa/isort
rev: 5.10.1

View File

@@ -3,7 +3,6 @@
import sys
import tarfile
from tarfile import TarFile
expected_files = [
"docs/requirements.txt",

View File

@@ -1,5 +1,4 @@
import os
from os.path import join
from pytablewriter import RstSimpleTableWriter
from pytablewriter.style import Style

View File

@@ -171,7 +171,7 @@ if on_rtd:
# -- Spell checking -------------------------------------------------------
try:
import sphinxcontrib.spelling
import sphinxcontrib.spelling # noqa
except ImportError:
pass
else:

View File

@@ -1 +1,3 @@
from .app import app
__all__ = ["app"]

View File

@@ -51,7 +51,7 @@ async def me(user: User = Depends(get_current_user)):
@router.get("/debug")
async def index(request: Request, user: User = Depends(get_current_user)):
async def debug(request: Request, user: User = Depends(get_current_user)):
"""
Authenticated function that returns a few pieces of debug
* Environ of the service process

View File

@@ -1 +1,3 @@
from ._version import __version__, version_info
__all__ = ["__version__", "version_info"]

View File

@@ -11,9 +11,6 @@ down_revision = None
branch_labels = None
depends_on = None
import sqlalchemy as sa
from alembic import op
def upgrade():
pass

View File

@@ -1,5 +1,5 @@
from . import auth, groups, hub, proxy, services, users
from .base import *
from .base import * # noqa
default_handlers = []
for mod in (auth, hub, proxy, users, groups, services):

View File

@@ -5,7 +5,6 @@ import json
import sys
from tornado import web
from tornado.ioloop import IOLoop
from .._version import __version__
from ..scopes import needs_scope

View File

@@ -776,8 +776,6 @@ def _deprecated_method(old_name, new_name, version):
return deprecated
import types
# deprecate white/blacklist method names
for _old_name, _new_name, _version in [
("check_whitelist", "check_allowed", "1.2"),

View File

@@ -1,6 +1,6 @@
from . import base, login, metrics, pages
from .base import *
from .login import *
from .base import * # noqa
from .login import * # noqa
default_handlers = []
for mod in (base, pages, login, metrics):

View File

@@ -13,7 +13,6 @@ from ..scopes import (
_check_scopes_exist,
_resolve_requested_scopes,
access_scopes,
expand_scopes,
identify_scopes,
)
from ..utils import compare_token, hash_token

View File

@@ -35,7 +35,6 @@ from sqlalchemy.orm import (
sessionmaker,
)
from sqlalchemy.pool import StaticPool
from sqlalchemy.sql.expression import bindparam
from sqlalchemy.types import LargeBinary, Text, TypeDecorator
from tornado.log import app_log
@@ -996,7 +995,6 @@ def check_db_revision(engine):
).first()[0]
if alembic_revision == head:
app_log.debug("database schema version found: %s", alembic_revision)
pass
else:
raise DatabaseSchemaMismatch(
"Found database schema version {found} != {head}. "

View File

@@ -250,14 +250,12 @@ class Proxy(LoggingConfigurable):
The proxy implementation should also have a way to associate the fact that a
route came from JupyterHub.
"""
pass
async def delete_route(self, routespec):
"""Delete a route with a given routespec if it exists.
**Subclasses must define this method**
"""
pass
async def get_all_routes(self):
"""Fetch and return all the routes associated by JupyterHub from the
@@ -274,7 +272,6 @@ class Proxy(LoggingConfigurable):
'data': the attached data dict for this route (as specified in add_route)
}
"""
pass
async def get_route(self, routespec):
"""Return the route info for a given routespec.
@@ -683,7 +680,6 @@ class ConfigurableHTTPProxy(Proxy):
os.remove(self.pid_file)
except FileNotFoundError:
self.log.debug("PID file %s already removed", self.pid_file)
pass
def _get_ssl_options(self):
"""List of cmd proxy options to use internal SSL"""

View File

@@ -35,7 +35,6 @@ import string
import time
import uuid
import warnings
from functools import partial
from http import HTTPStatus
from unittest import mock
from urllib.parse import urlencode

View File

@@ -5,6 +5,13 @@ Contains default notebook-app subclass and mixins
from .app import SingleUserNotebookApp, main
from .mixins import HubAuthenticatedHandler, make_singleuser_app
__all__ = [
"SingleUserNotebookApp",
"main",
"HubAuthenticatedHandler",
"make_singleuser_app",
]
# backward-compatibility
JupyterHubLoginHandler = SingleUserNotebookApp.login_handler_class
JupyterHubLogoutHandler = SingleUserNotebookApp.logout_handler_class

View File

@@ -14,7 +14,6 @@ import logging
import os
import random
import secrets
import ssl
import sys
import warnings
from datetime import timezone

View File

@@ -896,7 +896,6 @@ class Spawner(LoggingConfigurable):
Override in subclasses to restore any extra state that is needed to track
the single-user server for that user. Subclasses should call super().
"""
pass
def get_state(self):
"""Save state of spawner into database.
@@ -1341,7 +1340,6 @@ class Spawner(LoggingConfigurable):
Stopping a server does *not* call this method.
"""
pass
def add_poll_callback(self, callback, *args, **kwargs):
"""Add a callback to fire when the single-user server stops"""

View File

@@ -27,7 +27,6 @@ Fixtures to add functionality or spawning behavior
# Distributed under the terms of the Modified BSD License.
import asyncio
import copy
import inspect
import os
import sys
from functools import partial
@@ -36,7 +35,6 @@ from subprocess import TimeoutExpired
from unittest import mock
from pytest import fixture, raises
from tornado import ioloop
from tornado.httpclient import HTTPError
from tornado.platform.asyncio import AsyncIOMainLoop

View File

@@ -36,7 +36,6 @@ from unittest import mock
from urllib.parse import urlparse
from pamela import PAMError
from tornado.ioloop import IOLoop
from traitlets import Bool, Dict, default
from .. import metrics, orm, roles
@@ -45,7 +44,7 @@ from ..auth import PAMAuthenticator
from ..singleuser import SingleUserNotebookApp
from ..spawner import SimpleLocalProcessSpawner
from ..utils import random_port, utcnow
from .utils import async_requests, public_host, public_url, ssl_setup
from .utils import async_requests, public_url, ssl_setup
def mock_authenticate(username, password, service, encoding):

View File

@@ -4,7 +4,6 @@ Run with old versions of jupyterhub to test upgrade/downgrade
used in test_db.py
"""
import os
from datetime import datetime
from functools import partial

View File

@@ -1,6 +1,5 @@
import pytest
from selenium import webdriver
from selenium.webdriver.firefox.options import Options as FirefoxOptions
@pytest.fixture()

View File

@@ -1,21 +1,14 @@
import asyncio
import time
from functools import partial
import pytest
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from tornado.escape import url_escape
from tornado.httputil import url_concat
from jupyterhub.tests.selenium.locators import (
HomePageLocators,
LoginPageLocators,
TokenPageLocators,
)
from jupyterhub.tests.selenium.locators import LoginPageLocators
from jupyterhub.utils import exponential_backoff
from ...utils import url_path_join

View File

@@ -19,8 +19,15 @@ from ..objects import Server
from ..utils import url_path_join as ujoin
from ..utils import utcnow
from .conftest import new_username
from .mocking import public_host, public_url
from .utils import add_user, api_request, async_requests, auth_header, find_user
from .utils import (
add_user,
api_request,
async_requests,
auth_header,
find_user,
public_host,
public_url,
)
# --------------------
# Authentication tests

View File

@@ -7,7 +7,6 @@ authentication can expire in a number of ways:
- doesn't need refresh
- needs refresh and cannot be refreshed without new login
"""
from contextlib import contextmanager
from unittest import mock
from urllib.parse import parse_qs, urlparse

View File

@@ -14,8 +14,6 @@ import jsonschema
import pytest
from traitlets.config import Config
from .mocking import MockHub
# To test new schemas, add them to the `valid_events`
# and `invalid_events` dictionary below.

View File

@@ -11,9 +11,9 @@ from tornado.httputil import url_concat
from .. import orm
from ..utils import url_escape_path, url_path_join
from .mocking import FormSpawner, public_url
from .mocking import FormSpawner
from .test_api import TIMESTAMP, add_user, api_request, fill_user, normalize_user
from .utils import async_requests, get_page
from .utils import async_requests, get_page, public_url
@pytest.fixture

View File

@@ -7,7 +7,6 @@ from datetime import datetime, timedelta
from unittest import mock
import pytest
from tornado import gen
from .. import crypto, objects, orm, roles
from ..emptyclass import EmptyClass

View File

@@ -6,8 +6,6 @@ from subprocess import Popen
from async_generator import asynccontextmanager
from .. import orm
from ..roles import roles_to_scopes
from ..utils import (
exponential_backoff,
maybe_future,

View File

@@ -1,7 +1,7 @@
"""Tests for jupyterhub.singleuser"""
import os
import sys
from contextlib import contextmanager, nullcontext
from contextlib import nullcontext
from subprocess import CalledProcessError, check_output
from unittest import mock
from urllib.parse import urlencode, urlparse

View File

@@ -527,7 +527,6 @@ def print_stacks(file=sys.stderr):
"""
# local imports because these will not be used often,
# no need to add them to startup
import asyncio
import traceback
from .log import coroutine_frames

View File

@@ -1,6 +1,26 @@
# autoflake is used for autoformatting Python code
#
# ref: https://github.com/PyCQA/autoflake#readme
#
[tool.autoflake]
ignore-init-module-imports = true
remove-all-unused-imports = true
remove-duplicate-keys = true
#remove-unused-variables = true
# isort is used for autoformatting Python code
#
# ref: https://pycqa.github.io/isort/
#
[tool.isort]
profile = "black"
# black is used for autoformatting Python code
#
# ref: https://black.readthedocs.io/en/stable/
#
[tool.black]
skip-string-normalization = true
# target-version should be all supported versions, see
@@ -12,6 +32,12 @@ target_version = [
"py310",
]
# tbump is used to simplify and standardize the release process when updating
# the version, making a git commit and tag, and pushing changes.
#
# ref: https://github.com/your-tools/tbump#readme
#
[tool.tbump]
# Uncomment this if your project is hosted on GitHub:
github_url = "https://github.com/jupyterhub/jupyterhub"