Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Internal
--------
* Update `cli_helpers` to v2.15.2, improving vertical output.
* Update `ruff` to v0.17.0.
* Complete moving `MyCli` to `client.py`.


v2.29.6 (2026/10/15)
Expand Down
5 changes: 4 additions & 1 deletion mycli/cli_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,10 @@ def run_from_cli_args(cli_args: 'CliArgs', client_factory: ClientFactory | None
sys.exit(main_list_dsn(config, verbosity))

if client_factory is None:
client_factory = main_module.MyCli
import mycli.client as mycli_client

client_factory = mycli_client.MyCli

mycli = client_factory(
prompt=cli_args.prompt,
toolbar_format=cli_args.toolbar,
Expand Down
1 change: 0 additions & 1 deletion mycli/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@

import mycli as mycli_package
from mycli.cli_runner import run_from_cli_args
from mycli.client import MyCli as MyCli
from mycli.constants import (
DEFAULT_PROMPT,
EMPTY_PASSWORD_FLAG_SENTINEL,
Expand Down
39 changes: 20 additions & 19 deletions mycli_test/pytests/test_client_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@

import pytest

from mycli import client_query, main
from mycli import client_query
import mycli.client as mycli_client
from mycli.packages.sql_result.sql_result import SQLResult
from mycli.types import Query
from mycli_test.utils import ( # type: ignore[attr-defined]
Expand Down Expand Up @@ -51,23 +52,23 @@ def make_refresh_cli() -> tuple[Any, dict[str, Any]]:
def test_refresh_completions_stops_prefetch() -> None:
cli, state = make_refresh_cli()

main.MyCli.refresh_completions(cli)
mycli_client.MyCli.refresh_completions(cli)

assert state['stopped'] == [True]


def test_refresh_completions_returns_started_status() -> None:
cli, _state = make_refresh_cli()

result: list[SQLResult] = main.MyCli.refresh_completions(cli)
result: list[SQLResult] = mycli_client.MyCli.refresh_completions(cli)

assert result == [SQLResult(status='Auto-completion refresh started in the background.')]


def test_refresh_completions_passes_options_to_refresher() -> None:
cli, state = make_refresh_cli()

main.MyCli.refresh_completions(cli)
mycli_client.MyCli.refresh_completions(cli)

assert state['refresh_calls'] == [
(
Expand All @@ -94,7 +95,7 @@ def test_refresh_completions_passes_options_to_refresher() -> None:
def test_refresh_completions_does_not_update_dbname_without_reset() -> None:
cli, state = make_refresh_cli()

main.MyCli.refresh_completions(cli)
mycli_client.MyCli.refresh_completions(cli)

assert state['set_dbname_calls'] == []
assert state['completion_stopped'] == []
Expand All @@ -103,7 +104,7 @@ def test_refresh_completions_does_not_update_dbname_without_reset() -> None:
def test_refresh_completions_stops_completion_worker_when_reset() -> None:
cli, state = make_refresh_cli()

main.MyCli.refresh_completions(cli, reset=True)
mycli_client.MyCli.refresh_completions(cli, reset=True)

assert state['completion_stopped'] == [True]

Expand All @@ -129,7 +130,7 @@ def test_refresh_completions_updates_dbname_when_reset() -> None:
cli.main_formatter = SimpleNamespace(supported_formats=['table'])
cli.completion_refresher = SimpleNamespace(stop=lambda: None, refresh=lambda executor, callbacks, options: None)

main.MyCli.refresh_completions(cli, reset=True)
mycli_client.MyCli.refresh_completions(cli, reset=True)

assert set_dbname_calls == ['next_db']

Expand All @@ -156,7 +157,7 @@ def test_refresh_completions_uses_lock_when_reset() -> None:
cli.main_formatter = SimpleNamespace(supported_formats=['table'])
cli.completion_refresher = SimpleNamespace(stop=lambda: None, refresh=lambda executor, callbacks, options: None)

main.MyCli.refresh_completions(cli, reset=True)
mycli_client.MyCli.refresh_completions(cli, reset=True)

assert entered_lock == {'count': 1}

Expand Down Expand Up @@ -187,39 +188,39 @@ def make_refreshed_cli() -> tuple[Any, Any, Any, dict[str, Any]]:
def test_on_completions_refreshed_swaps_completer() -> None:
cli, _old_completer, new_completer, _state = make_refreshed_cli()

main.MyCli._on_completions_refreshed(cli, new_completer)
mycli_client.MyCli._on_completions_refreshed(cli, new_completer)

assert cli.completer is new_completer


def test_on_completions_refreshed_copies_other_schemas() -> None:
cli, old_completer, new_completer, state = make_refreshed_cli()

main.MyCli._on_completions_refreshed(cli, new_completer)
mycli_client.MyCli._on_completions_refreshed(cli, new_completer)

assert state['copy_calls'] == [(old_completer, 'current')]


def test_on_completions_refreshed_uses_lock() -> None:
cli, _old_completer, new_completer, state = make_refreshed_cli()

main.MyCli._on_completions_refreshed(cli, new_completer)
mycli_client.MyCli._on_completions_refreshed(cli, new_completer)

assert state['entered_lock'] == {'count': 1}


def test_on_completions_refreshed_invalidates_prompt() -> None:
cli, _old_completer, new_completer, state = make_refreshed_cli()

main.MyCli._on_completions_refreshed(cli, new_completer)
mycli_client.MyCli._on_completions_refreshed(cli, new_completer)

assert state['invalidated'] == [True]


def test_on_completions_refreshed_starts_schema_prefetch() -> None:
cli, _old_completer, new_completer, state = make_refreshed_cli()

main.MyCli._on_completions_refreshed(cli, new_completer)
mycli_client.MyCli._on_completions_refreshed(cli, new_completer)

assert state['prefetch_started'] == [True]

Expand Down Expand Up @@ -257,7 +258,7 @@ def format_sqlresult(result: SQLResult, **kwargs: Any) -> list[str]:
cli.log_query = lambda query: state['logged_queries'].append(query)
cli.log_output = lambda line: state['logged_output'].append(line)
cli.format_sqlresult = format_sqlresult
main.MyCli.run_query(cli, 'select 1;\n', checkpoint=str(state['checkpoint_path']), new_line=False)
mycli_client.MyCli.run_query(cli, 'select 1;\n', checkpoint=str(state['checkpoint_path']), new_line=False)
state['cli'] = cli
return state

Expand Down Expand Up @@ -344,7 +345,7 @@ def test_run_query_raises_for_error_result_when_requested(tmp_path) -> None:
cli.log_output = logged_output.append

with pytest.raises(client_query.QueryError, match='source failed'):
main.MyCli.run_query(
mycli_client.MyCli.run_query(
cli,
'/source test.sql',
checkpoint=str(checkpoint_path),
Expand All @@ -369,7 +370,7 @@ def test_run_query_displays_error_result_by_default(monkeypatch) -> None:
monkeypatch.setattr(client_query.special_commands, 'is_show_warnings_enabled', lambda: False)
monkeypatch.setattr(client_query.click, 'echo', lambda line, nl=True: echoed.append(line))

main.MyCli.run_query(cli, '/source test.sql')
mycli_client.MyCli.run_query(cli, '/source test.sql')

assert echoed == ['source failed']

Expand All @@ -388,19 +389,19 @@ def test_run_query_displays_set_buffer_fallback_outside_repl(monkeypatch) -> Non
monkeypatch.setattr(client_query.special_commands, 'is_show_warnings_enabled', lambda: False)
monkeypatch.setattr(client_query.click, 'echo', lambda line, nl=True: echoed.append(line))

main.MyCli.run_query(cli, '/favorite eval report')
mycli_client.MyCli.run_query(cli, '/favorite eval report')

assert echoed == [status]


def test_get_last_query_returns_none() -> None:
cli = make_bare_mycli()

assert main.MyCli.get_last_query(cli) is None
assert mycli_client.MyCli.get_last_query(cli) is None


def test_get_last_query_returns_latest_query() -> None:
cli = make_bare_mycli()
cli.query_history = [Query('select 1', True, False), Query('select 2', True, False)]

assert main.MyCli.get_last_query(cli) == 'select 2'
assert mycli_client.MyCli.get_last_query(cli) == 'select 2'
Loading
Loading