diff --git a/changelog.md b/changelog.md index fe22f71e..7d3694e2 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,12 @@ +Upcoming Release (TBD) +====================== + +Internal +-------- + +* Work on passing `ruff check` linting. + + 1.31.2 (2025/05/01) =================== diff --git a/mycli/clibuffer.py b/mycli/clibuffer.py index 151351ed..9cb73213 100644 --- a/mycli/clibuffer.py +++ b/mycli/clibuffer.py @@ -1,7 +1,8 @@ +from prompt_toolkit.application import get_app from prompt_toolkit.enums import DEFAULT_BUFFER from prompt_toolkit.filters import Condition -from prompt_toolkit.application import get_app -from .packages import special + +from mycli.packages import special def cli_is_multiline(mycli): diff --git a/mycli/clistyle.py b/mycli/clistyle.py index d7bc3fe1..409f4914 100644 --- a/mycli/clistyle.py +++ b/mycli/clistyle.py @@ -1,11 +1,11 @@ import logging -import pygments.styles -from pygments.token import string_to_tokentype, Token +from prompt_toolkit.styles import Style, merge_styles +from prompt_toolkit.styles.pygments import style_from_pygments_cls from pygments.style import Style as PygmentsStyle +import pygments.styles +from pygments.token import Token, string_to_tokentype from pygments.util import ClassNotFound -from prompt_toolkit.styles.pygments import style_from_pygments_cls -from prompt_toolkit.styles import merge_styles, Style logger = logging.getLogger(__name__) diff --git a/mycli/clitoolbar.py b/mycli/clitoolbar.py index 84799285..f2f8ddd1 100644 --- a/mycli/clitoolbar.py +++ b/mycli/clitoolbar.py @@ -1,7 +1,8 @@ -from prompt_toolkit.key_binding.vi_state import InputMode from prompt_toolkit.application import get_app from prompt_toolkit.enums import EditingMode -from .packages import special +from prompt_toolkit.key_binding.vi_state import InputMode + +from mycli.packages import special def create_toolbar_tokens_func(mycli, show_fish_help): diff --git a/mycli/compat.py b/mycli/compat.py index 6d069656..d4e727ba 100644 --- a/mycli/compat.py +++ b/mycli/compat.py @@ -2,5 +2,4 @@ import sys - WIN = sys.platform in ("win32", "cygwin") diff --git a/mycli/completion_refresher.py b/mycli/completion_refresher.py index 662dd331..58e85c7c 100644 --- a/mycli/completion_refresher.py +++ b/mycli/completion_refresher.py @@ -1,9 +1,9 @@ -import threading -from .packages.special.main import COMMANDS from collections import OrderedDict +import threading -from .sqlcompleter import SQLCompleter -from .sqlexecute import SQLExecute, ServerSpecies +from mycli.packages.special.main import COMMANDS +from mycli.sqlcompleter import SQLCompleter +from mycli.sqlexecute import ServerSpecies, SQLExecute class CompletionRefresher(object): diff --git a/mycli/config.py b/mycli/config.py index e6d74510..08694333 100644 --- a/mycli/config.py +++ b/mycli/config.py @@ -6,12 +6,11 @@ from os.path import exists import struct import sys -from typing import Union, IO +from typing import IO, Union from configobj import ConfigObj, ConfigObjError import pyaes - logger = logging.getLogger(__name__) diff --git a/mycli/key_bindings.py b/mycli/key_bindings.py index e03f728c..862d417a 100644 --- a/mycli/key_bindings.py +++ b/mycli/key_bindings.py @@ -1,9 +1,10 @@ import logging + from prompt_toolkit.enums import EditingMode from prompt_toolkit.filters import completion_is_selected, emacs_mode from prompt_toolkit.key_binding import KeyBindings -from .packages.toolkit.fzf import search_history +from mycli.packages.toolkit.fzf import search_history _logger = logging.getLogger(__name__) diff --git a/mycli/magic.py b/mycli/magic.py index c237ff17..82e22e6f 100644 --- a/mycli/magic.py +++ b/mycli/magic.py @@ -1,8 +1,10 @@ -from .main import MyCli -import sql.parse -import sql.connection import logging +import sql.connection +import sql.parse + +from mycli.main import MyCli + _logger = logging.getLogger(__name__) diff --git a/mycli/main.py b/mycli/main.py index 7c63b81d..7b8018ec 100755 --- a/mycli/main.py +++ b/mycli/main.py @@ -1,73 +1,67 @@ -from collections import defaultdict +from collections import defaultdict, namedtuple +import logging import os -import sys +import re import shutil -import traceback -import logging +import sys import threading -import re -from collections import namedtuple +import traceback try: from pwd import getpwuid except ImportError: pass -from time import time from datetime import datetime +from importlib import resources +import itertools from random import choice +from time import time +from urllib.parse import unquote, urlparse -from pymysql import OperationalError -from cli_helpers.tabular_output import TabularOutputFormatter -from cli_helpers.tabular_output import preprocessors +from cli_helpers.tabular_output import TabularOutputFormatter, preprocessors from cli_helpers.utils import strip_ansi import click -import sqlparse -import sqlglot -from mycli.packages.parseutils import is_dropping_database, is_destructive +from prompt_toolkit.auto_suggest import AutoSuggestFromHistory from prompt_toolkit.completion import DynamicCompleter -from prompt_toolkit.enums import DEFAULT_BUFFER, EditingMode -from prompt_toolkit.key_binding.bindings.named_commands import register as prompt_register -from prompt_toolkit.shortcuts import PromptSession, CompleteStyle from prompt_toolkit.document import Document +from prompt_toolkit.enums import DEFAULT_BUFFER, EditingMode from prompt_toolkit.filters import HasFocus, IsDone from prompt_toolkit.formatted_text import ANSI -from prompt_toolkit.layout.processors import HighlightMatchingBracketProcessor, ConditionalProcessor +from prompt_toolkit.key_binding.bindings.named_commands import register as prompt_register +from prompt_toolkit.layout.processors import ConditionalProcessor, HighlightMatchingBracketProcessor from prompt_toolkit.lexers import PygmentsLexer -from prompt_toolkit.auto_suggest import AutoSuggestFromHistory - -from .packages.special.main import NO_QUERY -from .packages.prompt_utils import confirm, confirm_destructive_query -from .packages.tabular_output import sql_format -from .packages import special -from .packages.special.favoritequeries import FavoriteQueries -from .packages.toolkit.history import FileHistoryWithTimestamp -from .sqlcompleter import SQLCompleter -from .clitoolbar import create_toolbar_tokens_func -from .clistyle import style_factory, style_factory_output -from .sqlexecute import FIELD_TYPES, SQLExecute, ERROR_CODE_ACCESS_DENIED -from .clibuffer import cli_is_multiline -from .completion_refresher import CompletionRefresher -from .config import write_default_config, get_mylogin_cnf_path, open_mylogin_cnf, read_config_files, str_to_bool, strip_matching_quotes -from .key_bindings import mycli_bindings -from .lexer import MyCliLexer -from . import __version__ -from .compat import WIN -from .packages.filepaths import dir_path_exists, guess_socket_location - -import itertools - -click.disable_unicode_literals_warning = True - -from urllib.parse import urlparse -from urllib.parse import unquote +from prompt_toolkit.shortcuts import CompleteStyle, PromptSession +from pymysql import OperationalError +import sqlglot +import sqlparse -from importlib import resources +from mycli import __version__ +from mycli.clibuffer import cli_is_multiline +from mycli.clistyle import style_factory, style_factory_output +from mycli.clitoolbar import create_toolbar_tokens_func +from mycli.compat import WIN +from mycli.completion_refresher import CompletionRefresher +from mycli.config import get_mylogin_cnf_path, open_mylogin_cnf, read_config_files, str_to_bool, strip_matching_quotes, write_default_config +from mycli.key_bindings import mycli_bindings +from mycli.lexer import MyCliLexer +from mycli.packages import special +from mycli.packages.filepaths import dir_path_exists, guess_socket_location +from mycli.packages.parseutils import is_destructive, is_dropping_database +from mycli.packages.prompt_utils import confirm, confirm_destructive_query +from mycli.packages.special.favoritequeries import FavoriteQueries +from mycli.packages.special.main import NO_QUERY +from mycli.packages.tabular_output import sql_format +from mycli.packages.toolkit.history import FileHistoryWithTimestamp +from mycli.sqlcompleter import SQLCompleter +from mycli.sqlexecute import ERROR_CODE_ACCESS_DENIED, FIELD_TYPES, SQLExecute try: import paramiko except ImportError: from mycli.packages.paramiko_stub import paramiko +click.disable_unicode_literals_warning = True + # Query tuples are used for maintaining history Query = namedtuple("Query", ["query", "successful", "mutating"]) diff --git a/mycli/packages/completion_engine.py b/mycli/packages/completion_engine.py index 1bae6ddf..095ed1b3 100644 --- a/mycli/packages/completion_engine.py +++ b/mycli/packages/completion_engine.py @@ -1,7 +1,8 @@ import sqlparse from sqlparse.sql import Comparison, Identifier, Where -from .parseutils import last_word, extract_tables, find_prev_keyword -from .special import parse_special_command + +from mycli.packages.parseutils import extract_tables, find_prev_keyword, last_word +from mycli.packages.special import parse_special_command def suggest_type(full_text, text_before_cursor): diff --git a/mycli/packages/filepaths.py b/mycli/packages/filepaths.py index 49806944..40832d42 100644 --- a/mycli/packages/filepaths.py +++ b/mycli/packages/filepaths.py @@ -1,7 +1,6 @@ import os import platform - if os.name == "posix": if platform.system() == "Darwin": DEFAULT_SOCKET_DIRS = ["/tmp"] diff --git a/mycli/packages/parseutils.py b/mycli/packages/parseutils.py index 5eac267e..270f5f15 100644 --- a/mycli/packages/parseutils.py +++ b/mycli/packages/parseutils.py @@ -1,8 +1,9 @@ import re + import sqlglot import sqlparse -from sqlparse.sql import IdentifierList, Identifier, Function -from sqlparse.tokens import Keyword, DML, Punctuation +from sqlparse.sql import Function, Identifier, IdentifierList +from sqlparse.tokens import DML, Keyword, Punctuation cleanup_regex = { # This matches only alphanumerics and underscores. diff --git a/mycli/packages/prompt_utils.py b/mycli/packages/prompt_utils.py index 849a008d..0adc64d8 100644 --- a/mycli/packages/prompt_utils.py +++ b/mycli/packages/prompt_utils.py @@ -1,6 +1,8 @@ import sys + import click -from .parseutils import is_destructive + +from mycli.packages.parseutils import is_destructive class ConfirmBoolParamType(click.ParamType): diff --git a/mycli/packages/special/__init__.py b/mycli/packages/special/__init__.py index 0c8c9093..9f05514c 100644 --- a/mycli/packages/special/__init__.py +++ b/mycli/packages/special/__init__.py @@ -8,5 +8,7 @@ def export(defn): return defn -from . import dbcommands # noqa: E402 F401 -from . import iocommands # noqa: E402 F401 +from mycli.packages.special import ( + dbcommands, # noqa: E402 F401 + iocommands, # noqa: E402 F401 +) diff --git a/mycli/packages/special/dbcommands.py b/mycli/packages/special/dbcommands.py index 549b9c47..f3197383 100644 --- a/mycli/packages/special/dbcommands.py +++ b/mycli/packages/special/dbcommands.py @@ -1,11 +1,13 @@ import logging import os import platform + +from pymysql import ProgrammingError + from mycli import __version__ from mycli.packages.special import iocommands +from mycli.packages.special.main import PARSED_QUERY, RAW_QUERY, special_command from mycli.packages.special.utils import format_uptime -from .main import special_command, RAW_QUERY, PARSED_QUERY -from pymysql import ProgrammingError log = logging.getLogger(__name__) diff --git a/mycli/packages/special/delimitercommand.py b/mycli/packages/special/delimitercommand.py index a0686c86..8bb30fc3 100644 --- a/mycli/packages/special/delimitercommand.py +++ b/mycli/packages/special/delimitercommand.py @@ -1,4 +1,5 @@ import re + import sqlparse diff --git a/mycli/packages/special/iocommands.py b/mycli/packages/special/iocommands.py index 603bf5ef..fb593e11 100644 --- a/mycli/packages/special/iocommands.py +++ b/mycli/packages/special/iocommands.py @@ -1,21 +1,21 @@ -import os -import re import locale import logging -import subprocess +import os +import re import shlex +import subprocess from time import sleep import click import pyperclip import sqlparse -from . import export -from .main import special_command, NO_QUERY, PARSED_QUERY -from .favoritequeries import FavoriteQueries -from .delimitercommand import DelimiterCommand -from .utils import handle_cd_command from mycli.packages.prompt_utils import confirm_destructive_query +from mycli.packages.special import export +from mycli.packages.special.delimitercommand import DelimiterCommand +from mycli.packages.special.favoritequeries import FavoriteQueries +from mycli.packages.special.main import NO_QUERY, PARSED_QUERY, special_command +from mycli.packages.special.utils import handle_cd_command TIMING_ENABLED = False use_expanded_output = False diff --git a/mycli/packages/special/main.py b/mycli/packages/special/main.py index 2b03544c..ac946fb7 100644 --- a/mycli/packages/special/main.py +++ b/mycli/packages/special/main.py @@ -1,7 +1,7 @@ -import logging from collections import namedtuple +import logging -from . import export +from mycli.packages.special import export log = logging.getLogger(__name__) diff --git a/mycli/packages/toolkit/fzf.py b/mycli/packages/toolkit/fzf.py index 807de5cf..0fdefdab 100644 --- a/mycli/packages/toolkit/fzf.py +++ b/mycli/packages/toolkit/fzf.py @@ -1,11 +1,11 @@ import re from shutil import which -from pyfzf import FzfPrompt from prompt_toolkit import search from prompt_toolkit.key_binding.key_processor import KeyPressEvent +from pyfzf import FzfPrompt -from .history import FileHistoryWithTimestamp +from mycli.packages.toolkit.history import FileHistoryWithTimestamp class Fzf(FzfPrompt): diff --git a/mycli/packages/toolkit/history.py b/mycli/packages/toolkit/history.py index 237317fc..9e6f8fd7 100644 --- a/mycli/packages/toolkit/history.py +++ b/mycli/packages/toolkit/history.py @@ -1,5 +1,5 @@ import os -from typing import Union, List, Tuple +from typing import List, Tuple, Union from prompt_toolkit.history import FileHistory diff --git a/mycli/sqlcompleter.py b/mycli/sqlcompleter.py index 34ed9e44..692cacae 100644 --- a/mycli/sqlcompleter.py +++ b/mycli/sqlcompleter.py @@ -1,13 +1,13 @@ +from collections import Counter import logging import re -from collections import Counter from prompt_toolkit.completion import Completer, Completion -from .packages.completion_engine import suggest_type -from .packages.parseutils import last_word -from .packages.filepaths import parse_path, complete_path, suggest_path -from .packages.special.favoritequeries import FavoriteQueries +from mycli.packages.completion_engine import suggest_type +from mycli.packages.filepaths import complete_path, parse_path, suggest_path +from mycli.packages.parseutils import last_word +from mycli.packages.special.favoritequeries import FavoriteQueries _logger = logging.getLogger(__name__) diff --git a/mycli/sqlexecute.py b/mycli/sqlexecute.py index d55bf650..a35f440a 100644 --- a/mycli/sqlexecute.py +++ b/mycli/sqlexecute.py @@ -3,9 +3,10 @@ import re import pymysql -from .packages import special from pymysql.constants import FIELD_TYPE -from pymysql.converters import convert_datetime, convert_timedelta, convert_date, conversions, decoders +from pymysql.converters import conversions, convert_date, convert_datetime, convert_timedelta, decoders + +from mycli.packages import special try: import paramiko # noqa: F401 diff --git a/pyproject.toml b/pyproject.toml index ce9ad9d8..92f04654 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,7 +62,7 @@ line-length = 140 [tool.ruff.lint] select = [ 'A', -# 'I', # todo enableme imports + 'I', 'E', 'W', 'F', @@ -91,6 +91,9 @@ known-first-party = [ 'steps', ] +[tool.ruff.lint.flake8-tidy-imports] +ban-relative-imports = 'all' + [tool.ruff.format] preview = true quote-style = 'preserve' diff --git a/test/conftest.py b/test/conftest.py index 5575b40e..6332a600 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -1,6 +1,7 @@ import pytest -from .utils import HOST, USER, PASSWORD, PORT, CHARSET, create_db, db_connection, SSH_USER, SSH_HOST, SSH_PORT + import mycli.sqlexecute +from test.utils import CHARSET, HOST, PASSWORD, PORT, SSH_HOST, SSH_PORT, SSH_USER, USER, create_db, db_connection @pytest.fixture(scope="function") diff --git a/test/features/steps/auto_vertical.py b/test/features/steps/auto_vertical.py index 62ebf838..afd59f4b 100644 --- a/test/features/steps/auto_vertical.py +++ b/test/features/steps/auto_vertical.py @@ -1,9 +1,8 @@ from textwrap import dedent from behave import then, when - -import wrappers from utils import parse_cli_args_to_dict +import wrappers @when("we run dbcli with {arg}") diff --git a/test/features/steps/basic_commands.py b/test/features/steps/basic_commands.py index ec1e47af..88e5de40 100644 --- a/test/features/steps/basic_commands.py +++ b/test/features/steps/basic_commands.py @@ -5,9 +5,10 @@ """ -from behave import when, then -from textwrap import dedent import tempfile +from textwrap import dedent + +from behave import then, when import wrappers diff --git a/test/features/steps/connection.py b/test/features/steps/connection.py index cde7d48c..f163afec 100644 --- a/test/features/steps/connection.py +++ b/test/features/steps/connection.py @@ -1,14 +1,13 @@ import io import os -from behave import when, then - +from behave import then, when import wrappers -from test.features.steps.utils import parse_cli_args_to_dict -from test.features.environment import MY_CNF_PATH, MYLOGIN_CNF_PATH, get_db_name_from_context -from test.utils import HOST, PORT, USER, PASSWORD -from mycli.config import encrypt_mylogin_cnf +from mycli.config import encrypt_mylogin_cnf +from test.features.environment import MY_CNF_PATH, MYLOGIN_CNF_PATH, get_db_name_from_context +from test.features.steps.utils import parse_cli_args_to_dict +from test.utils import HOST, PASSWORD, PORT, USER TEST_LOGIN_PATH = "test_login_path" diff --git a/test/features/steps/crud_database.py b/test/features/steps/crud_database.py index 56ff1147..2924da6f 100644 --- a/test/features/steps/crud_database.py +++ b/test/features/steps/crud_database.py @@ -5,10 +5,9 @@ """ +from behave import then, when import pexpect - import wrappers -from behave import when, then @when("we create database") diff --git a/test/features/steps/crud_table.py b/test/features/steps/crud_table.py index 48a64084..6c85b42e 100644 --- a/test/features/steps/crud_table.py +++ b/test/features/steps/crud_table.py @@ -5,10 +5,11 @@ """ -import wrappers -from behave import when, then from textwrap import dedent +from behave import then, when +import wrappers + @when("we create table") def step_create_table(context): diff --git a/test/features/steps/iocommands.py b/test/features/steps/iocommands.py index 07d5c77c..7aa45f43 100644 --- a/test/features/steps/iocommands.py +++ b/test/features/steps/iocommands.py @@ -1,9 +1,9 @@ import os -import wrappers - -from behave import when, then from textwrap import dedent +from behave import then, when +import wrappers + @when("we start external editor providing a file name") def step_edit_file(context): diff --git a/test/features/steps/named_queries.py b/test/features/steps/named_queries.py index 93d68bad..995080d4 100644 --- a/test/features/steps/named_queries.py +++ b/test/features/steps/named_queries.py @@ -5,8 +5,8 @@ """ +from behave import then, when import wrappers -from behave import when, then @when("we save a named query") diff --git a/test/features/steps/specials.py b/test/features/steps/specials.py index 1b50a007..ba772a73 100644 --- a/test/features/steps/specials.py +++ b/test/features/steps/specials.py @@ -5,8 +5,8 @@ """ +from behave import then, when import wrappers -from behave import when, then @when("we refresh completions") diff --git a/test/features/steps/wrappers.py b/test/features/steps/wrappers.py index 6e1115fe..70f61e3c 100644 --- a/test/features/steps/wrappers.py +++ b/test/features/steps/wrappers.py @@ -1,8 +1,8 @@ import re -import pexpect import sys import textwrap +import pexpect try: from StringIO import StringIO diff --git a/test/test_clistyle.py b/test/test_clistyle.py index ab40444f..64951e14 100644 --- a/test/test_clistyle.py +++ b/test/test_clistyle.py @@ -1,9 +1,8 @@ """Test the mycli.clistyle module.""" -import pytest - from pygments.style import Style from pygments.token import Token +import pytest from mycli.clistyle import style_factory diff --git a/test/test_completion_engine.py b/test/test_completion_engine.py index fdeef2c7..f0bf021f 100644 --- a/test/test_completion_engine.py +++ b/test/test_completion_engine.py @@ -1,6 +1,7 @@ -from mycli.packages.completion_engine import suggest_type import pytest +from mycli.packages.completion_engine import suggest_type + def sorted_dicts(dicts): """input is a list of dicts.""" diff --git a/test/test_completion_refresher.py b/test/test_completion_refresher.py index 6f192d0a..99f0b88b 100644 --- a/test/test_completion_refresher.py +++ b/test/test_completion_refresher.py @@ -1,7 +1,8 @@ import time -import pytest from unittest.mock import Mock, patch +import pytest + @pytest.fixture def refresher(): diff --git a/test/test_config.py b/test/test_config.py index 859ca020..3d95058d 100644 --- a/test/test_config.py +++ b/test/test_config.py @@ -5,6 +5,7 @@ import struct import sys import tempfile + import pytest from mycli.config import ( diff --git a/test/test_dbspecial.py b/test/test_dbspecial.py index aee6e05a..fd9a1e4e 100644 --- a/test/test_dbspecial.py +++ b/test/test_dbspecial.py @@ -1,6 +1,6 @@ from mycli.packages.completion_engine import suggest_type -from .test_completion_engine import sorted_dicts from mycli.packages.special.utils import format_uptime +from test.test_completion_engine import sorted_dicts def test_u_suggests_databases(): diff --git a/test/test_main.py b/test/test_main.py index 147ab324..d0c01141 100644 --- a/test/test_main.py +++ b/test/test_main.py @@ -1,5 +1,8 @@ +from collections import namedtuple import os import shutil +from tempfile import NamedTemporaryFile +from textwrap import dedent import click from click.testing import CliRunner @@ -7,13 +10,7 @@ from mycli.main import MyCli, cli, thanks_picker from mycli.packages.special.main import COMMANDS as SPECIAL_COMMANDS from mycli.sqlexecute import ServerInfo -from .utils import USER, HOST, PORT, PASSWORD, dbtest, run - -from textwrap import dedent -from collections import namedtuple - -from tempfile import NamedTemporaryFile - +from test.utils import HOST, PASSWORD, PORT, USER, dbtest, run test_dir = os.path.abspath(os.path.dirname(__file__)) project_dir = os.path.dirname(test_dir) diff --git a/test/test_naive_completion.py b/test/test_naive_completion.py index 99c4fd09..f68cd1ec 100644 --- a/test/test_naive_completion.py +++ b/test/test_naive_completion.py @@ -1,6 +1,6 @@ -import pytest from prompt_toolkit.completion import Completion from prompt_toolkit.document import Document +import pytest @pytest.fixture diff --git a/test/test_parseutils.py b/test/test_parseutils.py index 7f1aa4c5..44d5cfd5 100644 --- a/test/test_parseutils.py +++ b/test/test_parseutils.py @@ -1,12 +1,13 @@ import pytest + from mycli.packages.parseutils import ( extract_tables, extract_tables_from_complete_statements, - query_starts_with, - queries_start_with, is_destructive, - query_has_where_clause, is_dropping_database, + queries_start_with, + query_has_where_clause, + query_starts_with, ) diff --git a/test/test_smart_completion_public_schema_only.py b/test/test_smart_completion_public_schema_only.py index f627e8ec..a07386dd 100644 --- a/test/test_smart_completion_public_schema_only.py +++ b/test/test_smart_completion_public_schema_only.py @@ -1,7 +1,9 @@ -import pytest from unittest.mock import patch + from prompt_toolkit.completion import Completion from prompt_toolkit.document import Document +import pytest + import mycli.packages.special.main as special metadata = { diff --git a/test/test_special_iocommands.py b/test/test_special_iocommands.py index 4701f50b..6a276a5e 100644 --- a/test/test_special_iocommands.py +++ b/test/test_special_iocommands.py @@ -4,12 +4,11 @@ from time import time from unittest.mock import patch -import pytest from pymysql import ProgrammingError +import pytest import mycli.packages.special - -from .utils import dbtest, db_connection, send_ctrl_c +from test.utils import db_connection, dbtest, send_ctrl_c def test_set_get_pager(): diff --git a/test/test_sqlexecute.py b/test/test_sqlexecute.py index a48a929d..ea3a8852 100644 --- a/test/test_sqlexecute.py +++ b/test/test_sqlexecute.py @@ -1,10 +1,10 @@ import os -import pytest import pymysql +import pytest from mycli.sqlexecute import ServerInfo, ServerSpecies -from .utils import run, dbtest, set_expanded_output, is_expanded_output +from test.utils import dbtest, is_expanded_output, run, set_expanded_output def assert_result_equal(result, title=None, rows=None, headers=None, status=None, auto_status=True, assert_contains=False): diff --git a/test/test_tabular_output.py b/test/test_tabular_output.py index 45e97afd..b9417979 100644 --- a/test/test_tabular_output.py +++ b/test/test_tabular_output.py @@ -2,13 +2,11 @@ from textwrap import dedent - -from .utils import USER, PASSWORD, HOST, PORT, dbtest - +from pymysql.constants import FIELD_TYPE import pytest -from mycli.main import MyCli -from pymysql.constants import FIELD_TYPE +from mycli.main import MyCli +from test.utils import HOST, PASSWORD, PORT, USER, dbtest @pytest.fixture diff --git a/test/utils.py b/test/utils.py index 383f502a..d982e340 100644 --- a/test/utils.py +++ b/test/utils.py @@ -1,8 +1,8 @@ +import multiprocessing import os -import time -import signal import platform -import multiprocessing +import signal +import time import pymysql import pytest