diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index e1b320cc..c01e0161 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -21,7 +21,8 @@ jobs: python -m pip install --upgrade pip setuptools pip install --progress-bar off .[lint] - run: flake8 . --show-source - - run: black --check . + - run: black --check --diff . + - run: isort --check --diff . - run: mypy . test: runs-on: ubuntu-latest diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index bed40c4c..453c698b 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -76,6 +76,7 @@ $ tox -e py39 $ pip install .[lint] $ flake8 $ black --check . +$ isort . --check $ mypy . ``` diff --git a/optuna_dashboard/app.py b/optuna_dashboard/app.py index 97af477e..241dd5dd 100644 --- a/optuna_dashboard/app.py +++ b/optuna_dashboard/app.py @@ -1,22 +1,39 @@ -from datetime import datetime, timedelta +from datetime import datetime +from datetime import timedelta import functools import json import logging import os import threading import traceback -from typing import Union, Dict, List, Optional, TypeVar, Callable, Any, cast +from typing import Any +from typing import Callable +from typing import cast +from typing import Dict +from typing import List +from typing import Optional +from typing import TypeVar +from typing import Union -from bottle import Bottle, BaseResponse, redirect, request, response, static_file +from bottle import BaseResponse +from bottle import Bottle +from bottle import redirect +from bottle import request +from bottle import response +from bottle import static_file import optuna from optuna.exceptions import DuplicatedStudyError from optuna.storages import BaseStorage -from optuna.trial import FrozenTrial, TrialState -from optuna.study import StudyDirection, StudySummary, Study +from optuna.study import Study +from optuna.study import StudyDirection +from optuna.study import StudySummary +from optuna.trial import FrozenTrial +from optuna.trial import TrialState from . import serializer from .search_space import get_search_space + BottleViewReturn = Union[str, bytes, Dict[str, Any], BaseResponse] BottleView = TypeVar("BottleView", bound=Callable[..., BottleViewReturn]) diff --git a/optuna_dashboard/search_space.py b/optuna_dashboard/search_space.py index 1f740fde..ff7d9eb3 100644 --- a/optuna_dashboard/search_space.py +++ b/optuna_dashboard/search_space.py @@ -1,9 +1,15 @@ import copy import threading -from typing import Dict, List, Optional, Set, Tuple +from typing import Dict +from typing import List +from typing import Optional +from typing import Set +from typing import Tuple from optuna.distributions import BaseDistribution -from optuna.trial import TrialState, FrozenTrial +from optuna.trial import FrozenTrial +from optuna.trial import TrialState + SearchSpaceSetT = Set[Tuple[str, BaseDistribution]] SearchSpaceListT = List[Tuple[str, BaseDistribution]] diff --git a/optuna_dashboard/serializer.py b/optuna_dashboard/serializer.py index 7b05bf22..ce407f52 100644 --- a/optuna_dashboard/serializer.py +++ b/optuna_dashboard/serializer.py @@ -1,9 +1,13 @@ -from typing import Any, Dict, List, Tuple +from typing import Any +from typing import Dict +from typing import List +from typing import Tuple from optuna.distributions import BaseDistribution from optuna.study import StudySummary from optuna.trial import FrozenTrial + try: from typing import TypedDict except ImportError: diff --git a/setup.cfg b/setup.cfg index dc10a76f..1ae34112 100644 --- a/setup.cfg +++ b/setup.cfg @@ -35,6 +35,7 @@ install_requires = [options.extras_require] lint = black + isort mypy flake8 @@ -56,4 +57,15 @@ exclude = venv,build,.tox [mypy] ignore_missing_imports = True -disallow_untyped_defs = True \ No newline at end of file +disallow_untyped_defs = True + +[isort] +profile = black +src_paths = + optuna_dashboard + tests +line_length = 99 +lines_after_imports = 2 +force_single_line = True +force_sort_within_sections = True +order_by_type = False diff --git a/setup.py b/setup.py index 7f1a1763..26e08e48 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,5 @@ from setuptools import setup + if __name__ == "__main__": setup() diff --git a/tests/test_api.py b/tests/test_api.py index 3226ecc5..0c3cd8c9 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -2,7 +2,9 @@ import json from unittest import TestCase import optuna + from optuna_dashboard.app import create_app + from .wsgi_client import send_request diff --git a/tests/test_search_space.py b/tests/test_search_space.py index 61a34e63..597af5d9 100644 --- a/tests/test_search_space.py +++ b/tests/test_search_space.py @@ -1,5 +1,5 @@ -import warnings from unittest import TestCase +import warnings import optuna from optuna import create_trial diff --git a/tests/test_serializers.py b/tests/test_serializers.py index d95f6f9a..1137d9e2 100644 --- a/tests/test_serializers.py +++ b/tests/test_serializers.py @@ -1,4 +1,5 @@ from unittest import TestCase + from optuna_dashboard.serializer import serialize_attrs diff --git a/tests/wsgi_client.py b/tests/wsgi_client.py index d6975951..68a4c0e1 100644 --- a/tests/wsgi_client.py +++ b/tests/wsgi_client.py @@ -1,5 +1,13 @@ import io -from typing import Dict, Optional, Union, Any, Tuple, List, Callable, Iterable +from typing import Any +from typing import Callable +from typing import Dict +from typing import Iterable +from typing import List +from typing import Optional +from typing import Tuple +from typing import Union + WSGIEnv = Dict[str, Any] # Cannot use TypedDict because of 'HTTP_' variables StartResponse = Callable[[str, List[Tuple[str, str]]], None] diff --git a/tox.ini b/tox.ini index fbe8bf5d..dd77fb99 100644 --- a/tox.ini +++ b/tox.ini @@ -6,6 +6,7 @@ envlist = py39 flake8 black + isort mypy [testenv:py36] @@ -32,6 +33,10 @@ commands = flake8 . {posargs} deps = black commands = black --check . {posargs} +[testenv:isort] +deps = isort +commands = isort . --check + [testenv:mypy] deps = mypy commands = mypy . {posargs} diff --git a/visual_regression_test.py b/visual_regression_test.py index 84fbdf8f..e108cd5a 100644 --- a/visual_regression_test.py +++ b/visual_regression_test.py @@ -1,13 +1,16 @@ import asyncio +import os import threading import time +from typing import List +from typing import Tuple +from wsgiref.simple_server import make_server + import optuna -import os +from pyppeteer import launch from optuna_dashboard.app import create_app -from pyppeteer import launch -from typing import List, Tuple -from wsgiref.simple_server import make_server + host = "127.0.0.1" port = 8080