mycli 2.27.0__tar.gz → 2.28.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mycli-2.28.1/.git-blame-ignore-revs +43 -0
- {mycli-2.27.0 → mycli-2.28.1}/.github/PULL_REQUEST_TEMPLATE.md +1 -1
- {mycli-2.27.0 → mycli-2.28.1}/.github/workflows/ci.yml +10 -10
- {mycli-2.27.0 → mycli-2.28.1}/.github/workflows/lint.yml +3 -3
- {mycli-2.27.0 → mycli-2.28.1}/.github/workflows/publish.yml +17 -11
- {mycli-2.27.0 → mycli-2.28.1}/.github/workflows/typecheck.yml +4 -4
- mycli-2.28.1/AGENTS.md +149 -0
- mycli-2.28.1/AUTHORS.md +1 -0
- {mycli-2.27.0 → mycli-2.28.1}/CONTRIBUTING.md +1 -1
- mycli-2.28.1/MANIFEST.in +6 -0
- {mycli-2.27.0/mycli.egg-info → mycli-2.28.1}/PKG-INFO +2 -2
- mycli-2.28.1/SPONSORS.md +1 -0
- {mycli-2.27.0 → mycli-2.28.1}/changelog.md +64 -0
- mycli-2.28.1/doc/cookbook.md +71 -0
- mycli-2.28.1/doc/known_bugs.md +61 -0
- {mycli-2.27.0 → mycli-2.28.1}/docker/resources/test_db-1.0.7.tar.gz +1 -1
- {mycli-2.27.0 → mycli-2.28.1}/mycli/cli_runner.py +8 -8
- {mycli-2.27.0 → mycli-2.28.1}/mycli/client.py +22 -22
- {mycli-2.27.0 → mycli-2.28.1}/mycli/client_commands.py +28 -28
- {mycli-2.27.0 → mycli-2.28.1}/mycli/client_connection.py +16 -16
- {mycli-2.27.0 → mycli-2.28.1}/mycli/client_query.py +15 -15
- {mycli-2.27.0 → mycli-2.28.1}/mycli/constants.py +1 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/main.py +4 -4
- {mycli-2.27.0 → mycli-2.28.1}/mycli/main_modes/batch.py +3 -3
- {mycli-2.27.0 → mycli-2.28.1}/mycli/main_modes/checkup.py +3 -3
- {mycli-2.27.0 → mycli-2.28.1}/mycli/main_modes/execute.py +2 -2
- {mycli-2.27.0 → mycli-2.28.1}/mycli/main_modes/list_dsn.py +1 -1
- {mycli-2.27.0 → mycli-2.28.1}/mycli/main_modes/repl.py +145 -138
- {mycli-2.27.0 → mycli-2.28.1}/mycli/output.py +25 -21
- {mycli-2.27.0/mycli/packages → mycli-2.28.1/mycli/packages/completion}/completion_engine.py +6 -6
- {mycli-2.27.0/mycli → mycli-2.28.1/mycli/packages/completion}/completion_refresher.py +7 -7
- {mycli-2.27.0/mycli → mycli-2.28.1/mycli/packages/completion}/schema_prefetcher.py +16 -16
- mycli-2.27.0/mycli/sqlcompleter.py → mycli-2.28.1/mycli/packages/completion/sql_completer.py +9 -9
- mycli-2.27.0/mycli/packages/polars_completion.py → mycli-2.28.1/mycli/packages/dataframes/completion.py +2 -2
- mycli-2.27.0/mycli/packages/polars_transform.py → mycli-2.28.1/mycli/packages/dataframes/transform.py +8 -3
- mycli-2.27.0/mycli/query_runner.py → mycli-2.28.1/mycli/packages/execution/background_runner.py +34 -19
- mycli-2.27.0/mycli/sqlexecute.py → mycli-2.28.1/mycli/packages/execution/sql_execute.py +32 -24
- mycli-2.28.1/mycli/packages/integrations/boundary/__init__.py +0 -0
- mycli-2.28.1/mycli/packages/integrations/fzf/__init__.py +0 -0
- mycli-2.28.1/mycli/packages/integrations/fzf/fzf.py +78 -0
- mycli-2.28.1/mycli/packages/integrations/kubernetes/__init__.py +0 -0
- mycli-2.28.1/mycli/packages/integrations/macos/__init__.py +0 -0
- mycli-2.28.1/mycli/packages/integrations/openssh/__init__.py +0 -0
- mycli-2.28.1/mycli/packages/integrations/vault/__init__.py +0 -0
- mycli-2.28.1/mycli/packages/prompt_toolkit/__init__.py +0 -0
- mycli-2.27.0/mycli/packages/ptoolkit/fzf.py → mycli-2.28.1/mycli/packages/prompt_toolkit/fzf_history.py +7 -17
- {mycli-2.27.0/mycli/packages/ptoolkit → mycli-2.28.1/mycli/packages/prompt_toolkit}/history.py +1 -1
- {mycli-2.27.0/mycli → mycli-2.28.1/mycli/packages/prompt_toolkit}/key_bindings.py +11 -11
- mycli-2.27.0/mycli/clibuffer.py → mycli-2.28.1/mycli/packages/prompt_toolkit/multiline.py +5 -5
- mycli-2.27.0/mycli/clistyle.py → mycli-2.28.1/mycli/packages/prompt_toolkit/style.py +6 -6
- mycli-2.27.0/mycli/clitoolbar.py → mycli-2.28.1/mycli/packages/prompt_toolkit/toolbar.py +2 -2
- mycli-2.28.1/mycli/packages/pygments/__init__.py +0 -0
- mycli-2.28.1/mycli/packages/redirection/__init__.py +0 -0
- {mycli-2.27.0/mycli/packages → mycli-2.28.1/mycli/packages/redirection}/hybrid_redirection.py +2 -2
- {mycli-2.27.0/mycli/packages/special → mycli-2.28.1/mycli/packages/special_commands}/__init__.py +5 -13
- mycli-2.27.0/mycli/packages/special/dbcommands.py → mycli-2.28.1/mycli/packages/special_commands/db_commands.py +9 -9
- mycli-2.27.0/mycli/packages/special/delimitercommand.py → mycli-2.28.1/mycli/packages/special_commands/delimiter_command.py +1 -1
- {mycli-2.27.0/mycli/packages/special → mycli-2.28.1/mycli/packages/special_commands}/dsn_aliases.py +4 -4
- mycli-2.27.0/mycli/packages/special/iocommands.py → mycli-2.28.1/mycli/packages/special_commands/io_commands.py +16 -16
- {mycli-2.27.0/mycli/packages/special → mycli-2.28.1/mycli/packages/special_commands}/llm.py +2 -2
- {mycli-2.27.0/mycli/packages/special → mycli-2.28.1/mycli/packages/special_commands}/main.py +1 -1
- {mycli-2.27.0/mycli/packages/special → mycli-2.28.1/mycli/packages/special_commands}/source.py +5 -5
- mycli-2.28.1/mycli/packages/sql_result/__init__.py +0 -0
- mycli-2.27.0/mycli/packages/sqlresult.py → mycli-2.28.1/mycli/packages/sql_result/sql_result.py +9 -1
- mycli-2.28.1/mycli/packages/tabular_output/__init__.py +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/packages/tabular_output/sql_format.py +2 -2
- mycli-2.28.1/mycli/packages/utils/__init__.py +0 -0
- {mycli-2.27.0/mycli/packages → mycli-2.28.1/mycli/packages/utils}/interactive_utils.py +1 -1
- {mycli-2.27.0/mycli/packages → mycli-2.28.1/mycli/packages/utils}/key_binding_utils.py +13 -13
- {mycli-2.27.0/mycli → mycli-2.28.1/mycli/packages/utils}/keyring_utils.py +1 -1
- {mycli-2.27.0 → mycli-2.28.1/mycli.egg-info}/PKG-INFO +2 -2
- mycli-2.28.1/mycli.egg-info/SOURCES.txt +222 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli.egg-info/requires.txt +0 -1
- mycli-2.28.1/mycli.egg-info/scm_file_list.json +218 -0
- mycli-2.28.1/mycli.egg-info/scm_version.json +8 -0
- mycli-2.28.1/mycli.egg-info/top_level.txt +2 -0
- mycli-2.28.1/mycli_test/__init__.py +0 -0
- mycli-2.28.1/mycli_test/features/__init__.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/basic_commands.feature +2 -2
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/environment.py +8 -8
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/iocommands.feature +3 -3
- mycli-2.28.1/mycli_test/features/steps/__init__.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/steps/basic_commands.py +5 -5
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/steps/connection.py +2 -2
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/steps/iocommands.py +1 -1
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/steps/named_queries.py +17 -17
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/myclirc +1 -1
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/conftest.py +3 -3
- mycli-2.27.0/test/pytests/test_query_runner.py → mycli-2.28.1/mycli_test/pytests/test_background_runner.py +246 -118
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_batch_utils.py +5 -5
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_boundary_tunnel.py +2 -2
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_checkup.py +2 -2
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_cli_runner.py +1 -1
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_cli_utils.py +2 -2
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_clibuffer.py +21 -21
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_client.py +6 -6
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_client_commands.py +66 -66
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_client_connection.py +10 -10
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_client_query.py +19 -19
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_completer_use_switch.py +1 -1
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_completion_engine.py +43 -26
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_completion_refresher.py +32 -32
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_config.py +1 -1
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_delimitercommand.py +1 -1
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_dsn_aliases.py +7 -7
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_favoritequeries.py +13 -13
- mycli-2.28.1/mycli_test/pytests/test_fzf.py +126 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_hybrid_redirection.py +2 -2
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_interactive_utils.py +1 -1
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_key_binding_utils.py +23 -23
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_key_bindings.py +6 -6
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_keyring_utils.py +2 -1
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_kubectl_tunnel.py +2 -2
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_macos_keychain.py +1 -1
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_main.py +59 -63
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_main_modes_batch.py +2 -2
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_main_modes_repl.py +282 -149
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_naive_completion.py +3 -3
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_output.py +145 -63
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_password_sources.py +1 -1
- mycli-2.27.0/test/pytests/test_filepaths.py → mycli-2.28.1/mycli_test/pytests/test_path_utils.py +44 -44
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_polars_completion.py +3 -3
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_polars_transform.py +7 -7
- mycli-2.27.0/test/pytests/test_ptoolkit_fzf.py → mycli-2.28.1/mycli_test/pytests/test_prompt_toolkit_fzf_history.py +55 -57
- mycli-2.27.0/test/pytests/test_ptoolkit_history.py → mycli-2.28.1/mycli_test/pytests/test_prompt_toolkit_history.py +2 -2
- mycli-2.27.0/test/pytests/test_clistyle.py → mycli-2.28.1/mycli_test/pytests/test_prompt_toolkit_style.py +30 -30
- mycli-2.27.0/test/pytests/test_clitoolbar.py → mycli-2.28.1/mycli_test/pytests/test_prompt_toolkit_toolbar.py +15 -15
- mycli-2.27.0/test/pytests/test_ptoolkit_utils.py → mycli-2.28.1/mycli_test/pytests/test_prompt_toolkit_utils.py +5 -5
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_schema_prefetcher.py +5 -5
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_smart_completion_public_schema_only.py +47 -46
- mycli-2.28.1/mycli_test/pytests/test_special_commands_init.py +103 -0
- mycli-2.27.0/test/pytests/test_special_dbcommands.py → mycli-2.28.1/mycli_test/pytests/test_special_db_commands.py +30 -30
- mycli-2.27.0/test/pytests/test_special_iocommands.py → mycli-2.28.1/mycli_test/pytests/test_special_io_commands.py +480 -478
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_special_llm.py +47 -47
- mycli-2.28.1/mycli_test/pytests/test_special_main.py +480 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_special_source.py +6 -6
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_special_utils.py +7 -7
- mycli-2.27.0/test/pytests/test_sqlexecute.py → mycli-2.28.1/mycli_test/pytests/test_sql_execute.py +170 -132
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_sql_utils.py +10 -10
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_sqlcompleter.py +59 -59
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_sqlresult.py +25 -1
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_ssh_tunnel.py +2 -2
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_string_utils.py +1 -1
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_tabular_output.py +4 -4
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_vault.py +22 -22
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/utils.py +17 -5
- {mycli-2.27.0 → mycli-2.28.1}/pyproject.toml +11 -7
- mycli-2.27.0/.git-blame-ignore-revs +0 -6
- mycli-2.27.0/AGENTS.md +0 -145
- mycli-2.27.0/AUTHORS.md +0 -1
- mycli-2.27.0/MANIFEST.in +0 -6
- mycli-2.27.0/SPONSORS.md +0 -1
- mycli-2.27.0/mycli.egg-info/SOURCES.txt +0 -203
- mycli-2.27.0/mycli.egg-info/scm_file_list.json +0 -199
- mycli-2.27.0/mycli.egg-info/scm_version.json +0 -8
- mycli-2.27.0/mycli.egg-info/top_level.txt +0 -1
- mycli-2.27.0/test/pytests/test_special_init.py +0 -103
- mycli-2.27.0/test/pytests/test_special_main.py +0 -480
- {mycli-2.27.0 → mycli-2.28.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/.github/dependabot.yml +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/.gitignore +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/LICENSE.txt +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/README.md +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/doc/key_bindings.md +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/doc/llm.md +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/doc/screenshots/main.gif +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/doc/screenshots/polars_describe.png +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/doc/screenshots/polars_group_by.png +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/doc/screenshots/polars_histogram.png +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/doc/screenshots/polars_pivot.png +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/doc/screenshots/tables.png +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/doc/transforms.md +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/docker/Dockerfile +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/docker/resources/test_db_license.md +0 -0
- /mycli-2.27.0/mycli/AUTHORS → /mycli-2.28.1/mycli/AUTHORS.txt +0 -0
- /mycli-2.27.0/mycli/SPONSORS → /mycli-2.28.1/mycli/SPONSORS.txt +0 -0
- /mycli-2.27.0/mycli/TIPS → /mycli-2.28.1/mycli/TIPS.txt +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/__init__.py +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/app_state.py +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/compat.py +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/config.py +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/main_modes/completions.py +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/myclirc +0 -0
- {mycli-2.27.0/test/features/steps → mycli-2.28.1/mycli/packages}/__init__.py +0 -0
- {mycli-2.27.0/test/features → mycli-2.28.1/mycli/packages/completion}/__init__.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli/packages/credentials}/__init__.py +0 -0
- {mycli-2.27.0/mycli → mycli-2.28.1/mycli/packages/credentials}/password_sources.py +0 -0
- {mycli-2.27.0/mycli/packages/tabular_output → mycli-2.28.1/mycli/packages/dataframes}/__init__.py +0 -0
- {mycli-2.27.0/mycli/packages/ptoolkit → mycli-2.28.1/mycli/packages/execution}/__init__.py +0 -0
- {mycli-2.27.0/mycli/packages → mycli-2.28.1/mycli/packages/integrations}/__init__.py +0 -0
- {mycli-2.27.0/mycli → mycli-2.28.1/mycli/packages/integrations/boundary}/boundary_tunnel.py +0 -0
- {mycli-2.27.0/mycli → mycli-2.28.1/mycli/packages/integrations/kubernetes}/kubectl_tunnel.py +0 -0
- {mycli-2.27.0/mycli → mycli-2.28.1/mycli/packages/integrations/macos}/macos_keychain.py +0 -0
- {mycli-2.27.0/mycli → mycli-2.28.1/mycli/packages/integrations/openssh}/ssh_tunnel.py +0 -0
- /mycli-2.27.0/mycli/vault.py → /mycli-2.28.1/mycli/packages/integrations/vault/vault_credentials.py +0 -0
- {mycli-2.27.0/mycli/packages/ptoolkit → mycli-2.28.1/mycli/packages/prompt_toolkit}/utils.py +0 -0
- /mycli-2.27.0/mycli/lexer.py → /mycli-2.28.1/mycli/packages/pygments/mycli_lexer.py +0 -0
- /mycli-2.27.0/mycli/packages/special/favoritequeries.py → /mycli-2.28.1/mycli/packages/special_commands/favorite_queries.py +0 -0
- /mycli-2.27.0/mycli/packages/special/utils.py → /mycli-2.28.1/mycli/packages/special_commands/special_command_utils.py +0 -0
- {mycli-2.27.0/mycli/packages → mycli-2.28.1/mycli/packages/utils}/batch_utils.py +0 -0
- {mycli-2.27.0/mycli/packages → mycli-2.28.1/mycli/packages/utils}/cli_utils.py +0 -0
- /mycli-2.27.0/mycli/packages/filepaths.py → /mycli-2.28.1/mycli/packages/utils/path_utils.py +0 -0
- {mycli-2.27.0/mycli/packages → mycli-2.28.1/mycli/packages/utils}/sql_utils.py +0 -0
- {mycli-2.27.0/mycli/packages → mycli-2.28.1/mycli/packages/utils}/string_utils.py +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/resources/completions/bash/mycli +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/resources/completions/fish/mycli.fish +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/resources/completions/zsh/_mycli +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli/types.py +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli.egg-info/dependency_links.txt +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/mycli.egg-info/entry_points.txt +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/auto_vertical.feature +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/connection.feature +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/crud_database.feature +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/crud_table.feature +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/db_utils.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/fixture_data/help_commands.txt +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/fixture_utils.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/named_queries.feature +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/specials.feature +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/steps/auto_vertical.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/steps/crud_database.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/steps/crud_table.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/steps/specials.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/steps/utils.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/steps/wrappers.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/features/wrappager.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/mylogin.cnf +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_app_state.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_bash_completion.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_fish_completion.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_main_modes_execute.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_main_modes_list_dsn.py +0 -0
- {mycli-2.27.0/test → mycli-2.28.1/mycli_test}/pytests/test_zsh_completion.py +0 -0
- {mycli-2.27.0 → mycli-2.28.1}/setup.cfg +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# rename "toolkit" to "ptoolkit"
|
|
2
|
+
d891e5ae670c44b96ecd79fca36da91748d8c44a
|
|
3
|
+
4c8b5bfb314ed8998b8652613f0669fe58537a62
|
|
4
|
+
# gather pytest files in a subdirectory
|
|
5
|
+
9dbad2c5be3786eacbb127362b9b37f41b4d4785
|
|
6
|
+
eb4526c66f141734b806d4782968135772f39557
|
|
7
|
+
# refactor moves 2026-10-03
|
|
8
|
+
07df6f36996c7c7c8665ef58dbabf735eff12557
|
|
9
|
+
95e378d136a5fd115469aa3931b551c50f8f93e1
|
|
10
|
+
25951150261aa6d64d4ea2efc4aad77a25b39e83
|
|
11
|
+
b7dc69e6aa254b89c3b9ad4284b01e8d00202d42
|
|
12
|
+
9b287611156b7529769e739ce0aed455b216a5e3
|
|
13
|
+
69c403e947feef0a9f974fe42fc79de5f7794eec
|
|
14
|
+
e071c7d4384e3ef1c95c624de710fc3ebfdc5ef6
|
|
15
|
+
6f4308c986319efaf29a4284746b0152dc1265bd
|
|
16
|
+
e2b09f4084cb7a0c3558928ce97ef0a89748e577
|
|
17
|
+
d0f950a112e2f151581fa8037d37ecf69e292530
|
|
18
|
+
f551bc5f4a8bbf27464bb3136d32ae869de2ac0a
|
|
19
|
+
4eae45347e6a118520be85892984afff2bda36aa
|
|
20
|
+
b61da9f98ccfef415d3773ff7bfc20c2ab695d53
|
|
21
|
+
88929f0f1dec04544328e468d0b7b95f646d2ee2
|
|
22
|
+
b6e3034b5b72ef3db975bf3a039f1c8c1d023789
|
|
23
|
+
a710112ae1670e76681200ad6475c56ee91e1725
|
|
24
|
+
59be294e6a87378618064ef055520cbab7648c94
|
|
25
|
+
ef787f1134d77b01a334d059d578ce2f56e34e5a
|
|
26
|
+
861931b0e75cd1d54270b535f1773d80923a904f
|
|
27
|
+
a5cf52b5610589ce56399da9d2c5886bd3a669c5
|
|
28
|
+
abb4b583d8c81eb8d2f3d3123cfda23cb9e47953
|
|
29
|
+
e7ead2dcd8fb1c6df089eb1b42a05fd50db69466
|
|
30
|
+
37a2bb563edcb68b5a2e7e7ec6331bec7e9d8a76
|
|
31
|
+
5ad8d7b7b5acc4abdc4050cae38a58782c48e56f
|
|
32
|
+
9b311151154a36322369a321f3c11512f50539b5
|
|
33
|
+
c093369d557e59fd212e99e01150ebbb3a2fc6ea
|
|
34
|
+
5cbc7919445d6d7121cc231ea37c8ed1ca21365e
|
|
35
|
+
de595f2618657b0decbcf9fe827168d0e1e8e38b
|
|
36
|
+
cfc1080e75baf2a8086322420666be685d6886a8
|
|
37
|
+
2c364de0bfd397132f7a2c5c751b8e8df829cfe1
|
|
38
|
+
5ebb1cb7f2613c820b83dfae3f90591a17fcc930
|
|
39
|
+
0b8d7677d3fd396f515dd5f46cdb47c3da3885bd
|
|
40
|
+
bb6ba73a39bc166c6a9968476999a9c08b63ccc8
|
|
41
|
+
5c6dfea7b2dd5219901141935f29577bbf1fef55
|
|
42
|
+
9b3e5921d0b9d05fcd422202c5e3aef6db01e205
|
|
43
|
+
4caa83e882a1bf32c2e8da89608ad57b4a5dc136
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
## Checklist
|
|
7
7
|
<!--- We appreciate your help and want to give you credit. Place an `x` in the boxes below as you complete them. -->
|
|
8
8
|
- [ ] I added this contribution to the `changelog.md` file.
|
|
9
|
-
- [ ] I added my name to the `AUTHORS` file (or it's already there).
|
|
9
|
+
- [ ] I added my name to the `mycli/AUTHORS.txt` file (or it's already there).
|
|
10
10
|
- [ ] To lint and format the code, I ran
|
|
11
11
|
```bash
|
|
12
12
|
uv run ruff check && uv run ruff format && uv run mypy --install-types .
|
|
@@ -7,9 +7,9 @@ on:
|
|
|
7
7
|
- '**.rst'
|
|
8
8
|
- 'LICENSE.txt'
|
|
9
9
|
- 'doc/**/*.txt'
|
|
10
|
-
- '**/AUTHORS'
|
|
11
|
-
- '**/SPONSORS'
|
|
12
|
-
- '**/TIPS'
|
|
10
|
+
- '**/AUTHORS.txt'
|
|
11
|
+
- '**/SPONSORS.txt'
|
|
12
|
+
- '**/TIPS.txt'
|
|
13
13
|
|
|
14
14
|
jobs:
|
|
15
15
|
tests:
|
|
@@ -38,7 +38,7 @@ jobs:
|
|
|
38
38
|
sudo /etc/init.d/mysql start
|
|
39
39
|
|
|
40
40
|
- name: Install dependencies
|
|
41
|
-
run: uv sync --
|
|
41
|
+
run: uv sync --extra dev,llm,dataframe -p ${{ matrix.python-version }}
|
|
42
42
|
|
|
43
43
|
- name: Wait for MySQL connection
|
|
44
44
|
run: |
|
|
@@ -52,7 +52,7 @@ jobs:
|
|
|
52
52
|
PYTEST_HOST: 127.0.0.1
|
|
53
53
|
TERM: xterm
|
|
54
54
|
run: |
|
|
55
|
-
|
|
55
|
+
./.venv/bin/tox -e py${{ matrix.python-version }}
|
|
56
56
|
|
|
57
57
|
tests-macos:
|
|
58
58
|
name: Tests macOS
|
|
@@ -84,7 +84,7 @@ jobs:
|
|
|
84
84
|
brew services start mysql
|
|
85
85
|
|
|
86
86
|
- name: Install dependencies
|
|
87
|
-
run: uv sync --
|
|
87
|
+
run: uv sync --extra dev,llm,dataframe -p ${{ matrix.python-version }}
|
|
88
88
|
|
|
89
89
|
- name: Wait for MySQL connection
|
|
90
90
|
run: |
|
|
@@ -102,7 +102,7 @@ jobs:
|
|
|
102
102
|
PYTEST_HOST: 127.0.0.1
|
|
103
103
|
TERM: xterm
|
|
104
104
|
run: |
|
|
105
|
-
|
|
105
|
+
./.venv/bin/tox -e py${{ matrix.python-version }}
|
|
106
106
|
|
|
107
107
|
tests-windows:
|
|
108
108
|
name: Tests Windows
|
|
@@ -127,7 +127,7 @@ jobs:
|
|
|
127
127
|
|
|
128
128
|
- name: Install dependencies
|
|
129
129
|
shell: cmd
|
|
130
|
-
run: uv sync --
|
|
130
|
+
run: uv sync --extra dev,llm,dataframe -p ${{ matrix.python-version }}
|
|
131
131
|
|
|
132
132
|
- name: Set up MySQL
|
|
133
133
|
uses: shogo82148/actions-setup-mysql@083ec148d28e62f2b24b8f4541693dfe1d50488d # v1.54.0
|
|
@@ -182,7 +182,7 @@ jobs:
|
|
|
182
182
|
run: |
|
|
183
183
|
export PATH="$HOME/.local/bin:$PATH"
|
|
184
184
|
cd /root/mycli
|
|
185
|
-
uv sync --
|
|
185
|
+
uv sync --extra dev,llm,dataframe --python 3.14
|
|
186
186
|
|
|
187
187
|
- name: Start MySQL in WSL
|
|
188
188
|
shell: wsl-bash {0}
|
|
@@ -248,7 +248,7 @@ jobs:
|
|
|
248
248
|
PYTEST_HOST: 127.0.0.1
|
|
249
249
|
TERM: xterm
|
|
250
250
|
run: |
|
|
251
|
-
|
|
251
|
+
./.venv/bin/tox -e py3.14
|
|
252
252
|
|
|
253
253
|
docker-x86-build:
|
|
254
254
|
name: Build x86 Docker Image
|
|
@@ -46,7 +46,7 @@ jobs:
|
|
|
46
46
|
sudo /etc/init.d/mysql start
|
|
47
47
|
|
|
48
48
|
- name: Install dependencies
|
|
49
|
-
run: uv sync --
|
|
49
|
+
run: uv sync --extra dev,llm,dataframe -p ${{ matrix.python-version }}
|
|
50
50
|
|
|
51
51
|
- name: Wait for MySQL connection
|
|
52
52
|
run: |
|
|
@@ -54,16 +54,22 @@ jobs:
|
|
|
54
54
|
sleep 5
|
|
55
55
|
done
|
|
56
56
|
|
|
57
|
+
# arguably this should be made identical to CI for PRs
|
|
58
|
+
# better would be a composite GH action
|
|
59
|
+
- name: Run Style Checks
|
|
60
|
+
run: ./.venv/bin/tox -e style
|
|
61
|
+
|
|
62
|
+
# arguably this should be made identical to CI for PRs
|
|
63
|
+
# better would be a composite GH action
|
|
64
|
+
- name: Run Typechecker
|
|
65
|
+
run: ./.venv/bin/tox -e typecheck
|
|
66
|
+
|
|
57
67
|
- name: Pytest / behave
|
|
58
68
|
env:
|
|
59
69
|
PYTEST_PASSWORD: root
|
|
60
70
|
PYTEST_HOST: 127.0.0.1
|
|
61
71
|
run: |
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
# arguably this should be made identical to CI for PRs
|
|
65
|
-
- name: Run Style Checks
|
|
66
|
-
run: uv run tox -e style
|
|
72
|
+
./.venv/bin/tox -e py${{ matrix.python-version }}
|
|
67
73
|
|
|
68
74
|
tests-macos:
|
|
69
75
|
name: Tests macOS
|
|
@@ -95,7 +101,7 @@ jobs:
|
|
|
95
101
|
brew services start mysql
|
|
96
102
|
|
|
97
103
|
- name: Install dependencies
|
|
98
|
-
run: uv sync --
|
|
104
|
+
run: uv sync --extra dev,llm,dataframe -p ${{ matrix.python-version }}
|
|
99
105
|
|
|
100
106
|
- name: Wait for MySQL connection
|
|
101
107
|
run: |
|
|
@@ -113,7 +119,7 @@ jobs:
|
|
|
113
119
|
PYTEST_HOST: 127.0.0.1
|
|
114
120
|
TERM: xterm
|
|
115
121
|
run: |
|
|
116
|
-
|
|
122
|
+
./.venv/bin/tox -e py${{ matrix.python-version }}
|
|
117
123
|
|
|
118
124
|
tests-windows:
|
|
119
125
|
name: Tests Windows
|
|
@@ -138,7 +144,7 @@ jobs:
|
|
|
138
144
|
|
|
139
145
|
- name: Install dependencies
|
|
140
146
|
shell: cmd
|
|
141
|
-
run: uv sync --
|
|
147
|
+
run: uv sync --extra dev,llm,dataframe -p ${{ matrix.python-version }}
|
|
142
148
|
|
|
143
149
|
- name: Set up MySQL
|
|
144
150
|
uses: shogo82148/actions-setup-mysql@083ec148d28e62f2b24b8f4541693dfe1d50488d # v1.54.0
|
|
@@ -193,7 +199,7 @@ jobs:
|
|
|
193
199
|
run: |
|
|
194
200
|
export PATH="$HOME/.local/bin:$PATH"
|
|
195
201
|
cd /root/mycli
|
|
196
|
-
uv sync --
|
|
202
|
+
uv sync --extra dev,llm,dataframe --python 3.14
|
|
197
203
|
|
|
198
204
|
- name: Start MySQL in WSL
|
|
199
205
|
shell: wsl-bash {0}
|
|
@@ -240,7 +246,7 @@ jobs:
|
|
|
240
246
|
python-version: '3.14'
|
|
241
247
|
|
|
242
248
|
- name: Install dependencies
|
|
243
|
-
run: uv sync --
|
|
249
|
+
run: uv sync --extra llm,dataframe -p 3.14
|
|
244
250
|
|
|
245
251
|
- name: Build
|
|
246
252
|
run: uv build
|
|
@@ -7,9 +7,9 @@ on:
|
|
|
7
7
|
- '**.rst'
|
|
8
8
|
- 'LICENSE.txt'
|
|
9
9
|
- 'doc/**/*.txt'
|
|
10
|
-
- '**/AUTHORS'
|
|
11
|
-
- '**/SPONSORS'
|
|
12
|
-
- '**/TIPS'
|
|
10
|
+
- '**/AUTHORS.txt'
|
|
11
|
+
- '**/SPONSORS.txt'
|
|
12
|
+
- '**/TIPS.txt'
|
|
13
13
|
|
|
14
14
|
jobs:
|
|
15
15
|
typecheck:
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
version: 'latest'
|
|
31
31
|
|
|
32
32
|
- name: Install dependencies
|
|
33
|
-
run: uv sync --
|
|
33
|
+
run: uv sync --extra dev,llm,dataframe
|
|
34
34
|
|
|
35
35
|
- name: Run mypy
|
|
36
36
|
run: |
|
mycli-2.28.1/AGENTS.md
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Mycli
|
|
2
|
+
|
|
3
|
+
Rich MySQL terminal client with auto-completion, syntax highlighting, and dataframes.
|
|
4
|
+
|
|
5
|
+
## Project Structure
|
|
6
|
+
|
|
7
|
+
/ # repository root
|
|
8
|
+
├── .github/ # GitHub Actions and configuration
|
|
9
|
+
├── pyproject.toml # project configuration
|
|
10
|
+
├── doc/ # documentation
|
|
11
|
+
├── doc/cookbook.md # recipes for how to configure and use mycli
|
|
12
|
+
├── doc/key_bindings.md # documentation of key binding behaviors
|
|
13
|
+
├── doc/known_bugs.md # documentation of known bugs and limitations
|
|
14
|
+
├── doc/llm.md # documentation on how to use LLM features
|
|
15
|
+
├── doc/transforms.md # documentation on how to use dataframe transform/plot features
|
|
16
|
+
├── doc/screenshots/ # screenshots for documentation
|
|
17
|
+
├── mycli/ # application source
|
|
18
|
+
├── mycli/__init__.py # provides version number
|
|
19
|
+
├── mycli/app_state.py # `AppStateMixin` application state mixin and related functions
|
|
20
|
+
├── mycli/cli_runner.py # connects and dispatches main modes based on CLI arguments
|
|
21
|
+
├── mycli/client_commands.py # special commands which must be registered separately
|
|
22
|
+
├── mycli/client_connection.py # `ClientConnectionMixin` mixin for establishing the database connection
|
|
23
|
+
├── mycli/client_query.py # `ClientQueryMixin` mixin for running queries and refreshing completions
|
|
24
|
+
├── mycli/client.py # the `MyCli` "god class"
|
|
25
|
+
├── mycli/compat.py # OS compatibility helpers
|
|
26
|
+
├── mycli/config.py # configuration file readers and utilities
|
|
27
|
+
├── mycli/constants.py # shared constants
|
|
28
|
+
├── mycli/main.py # processes CLI arguments
|
|
29
|
+
├── mycli/main_modes/ # main execution paths
|
|
30
|
+
├── mycli/main_modes/batch.py # `--batch` mode
|
|
31
|
+
├── mycli/main_modes/checkup.py # `--checkup` mode
|
|
32
|
+
├── mycli/main_modes/completions.py # `--completions` mode
|
|
33
|
+
├── mycli/main_modes/execute.py # `--execute` mode
|
|
34
|
+
├── mycli/main_modes/list_dsn.py # `--list-dsn` mode
|
|
35
|
+
├── mycli/main_modes/repl.py # interactive REPL mode
|
|
36
|
+
├── mycli/myclirc # project-level configuration file
|
|
37
|
+
├── mycli/output.py # `OutputMixin` mixin for feedback and output of query results
|
|
38
|
+
├── mycli/packages/ # application packages
|
|
39
|
+
├── mycli/packages/completion/completion_engine.py # implementation of completion suggestions
|
|
40
|
+
├── mycli/packages/completion/completion_refresher.py # populates a `SQLCompleter` object in a background thread
|
|
41
|
+
├── mycli/packages/completion/schema_prefetcher.py # background prefetcher for multi-schema auto-completion
|
|
42
|
+
├── mycli/packages/completion/sql_completer.py # finds SQL completion candidates
|
|
43
|
+
├── mycli/packages/credentials/password_sources.py # password sources and precedence
|
|
44
|
+
├── mycli/packages/dataframes/completion.py # completions for `.|` transforms
|
|
45
|
+
├── mycli/packages/dataframes/transform.py # implements `.|` transforms
|
|
46
|
+
├── mycli/packages/execution/background_runner.py # run queries in the background, with query state and timing updates
|
|
47
|
+
├── mycli/packages/execution/sql_execute.py # `SQLExecute` class and friends
|
|
48
|
+
├── mycli/packages/integrations/ # integrations with fzf, Boundary, Kubernetes, macOS, OpenSSH, and Vault
|
|
49
|
+
├── mycli/packages/prompt_toolkit/fzf_history.py # uses fzf integration to serach the prompt_toolkit history
|
|
50
|
+
├── mycli/packages/prompt_toolkit/history.py # extends the prompt_toolkit history class
|
|
51
|
+
├── mycli/packages/prompt_toolkit/key_bindings.py # prompt_toolkit key bindings
|
|
52
|
+
├── mycli/packages/prompt_toolkit/multiline.py # prompt_toolkit multiline input
|
|
53
|
+
├── mycli/packages/prompt_toolkit/style.py # prompt_toolkit (and Pygments) styles
|
|
54
|
+
├── mycli/packages/prompt_toolkit/toolbar.py # prompt_toolkit bottom toolbar
|
|
55
|
+
├── mycli/packages/prompt_toolkit/utils.py # general utility functions for prompt_toolkit
|
|
56
|
+
├── mycli/packages/pygments/mycli_lexer.py # extends `MySqlLexer` from Pygments
|
|
57
|
+
├── mycli/packages/redirection/ # implementation of shell-style redirects
|
|
58
|
+
├── mycli/packages/special_commands/ # implementation of mycli special commands
|
|
59
|
+
├── mycli/packages/sql_result/sql_result.py # the `SQLResult` dataclass for holding responses
|
|
60
|
+
├── mycli/packages/tabular_output/ # extends cli_helper with additional output formats
|
|
61
|
+
├── mycli/packages/utils/batch_utils.py # utilities for `--batch` mode
|
|
62
|
+
├── mycli/packages/utils/cli_utils.py # utilities for parsing CLI arguments
|
|
63
|
+
├── mycli/packages/utils/interactive_utils.py # utilities for confirming on destructive statements
|
|
64
|
+
├── mycli/packages/utils/key_binding_utils.py # handlers for key bindings and related special commands
|
|
65
|
+
├── mycli/packages/utils/keyring_utils.py # saved credential utilities
|
|
66
|
+
├── mycli/packages/utils/path_utils.py # utilities for files, including completion suggestions
|
|
67
|
+
├── mycli/packages/utils/sql_utils.py # utilities for parsing SQL statements
|
|
68
|
+
├── mycli/packages/utils/string_utils.py # generic string utilities
|
|
69
|
+
├── mycli/resources/completions/ # shell completions for CLI interface
|
|
70
|
+
├── mycli/types.py # shared types
|
|
71
|
+
├── mycli_test/features/ # behave tests
|
|
72
|
+
├── mycli_test/myclirc # mycli configuration used for tests
|
|
73
|
+
├── mycli_test/mylogin.cnf # `mylogin.cnf` example used for tests
|
|
74
|
+
├── mycli_test/pytests/ # pytest tests
|
|
75
|
+
├── mycli_test/pytests/conftest.py # pytest configuration
|
|
76
|
+
└── mycli_test/utils.py # shared utilities for tests
|
|
77
|
+
|
|
78
|
+
## Development
|
|
79
|
+
|
|
80
|
+
### Python
|
|
81
|
+
|
|
82
|
+
#### Python Dependency Management
|
|
83
|
+
|
|
84
|
+
This repo uses `uv` for dependency management. **Always** prefix Python
|
|
85
|
+
commands with `uv run`. Example:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
env -u PYTHONPATH uv run -- python script.py
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
#### Python Typing
|
|
92
|
+
|
|
93
|
+
This repo uses type annotations which are checked by `mypy`. **Always** add
|
|
94
|
+
type annotations, and always check new code with `env -u PYTHONPATH uv run -- mypy --install-types --non-interactive script.py`.
|
|
95
|
+
|
|
96
|
+
Use lower-case type annotations such as `tuple`, not upper-case type
|
|
97
|
+
annotations such as `Tuple`.
|
|
98
|
+
|
|
99
|
+
Use `Type | None` instead of `Optional[Type]`.
|
|
100
|
+
|
|
101
|
+
#### Python Testing
|
|
102
|
+
|
|
103
|
+
Tests are coordinated by `tox`, and include both `pytest` and `behave` tests.
|
|
104
|
+
To run the full test suite, execute `env -u PYTHONPATH uv run -- tox`.
|
|
105
|
+
|
|
106
|
+
#### Python Compatibility
|
|
107
|
+
|
|
108
|
+
Use Python features available from Python 3.11 through Python 3.14.
|
|
109
|
+
Compatibility with Python 3.9 is not needed. Compatibility with Python
|
|
110
|
+
3.10 is not needed.
|
|
111
|
+
|
|
112
|
+
#### Python Style
|
|
113
|
+
|
|
114
|
+
Import style: prefer `from package import name` over `import package.name as name`.
|
|
115
|
+
|
|
116
|
+
Quoting style: prefer single quotes for new code, but do not remove double quotes
|
|
117
|
+
from existing code.
|
|
118
|
+
|
|
119
|
+
#### Python Environment
|
|
120
|
+
|
|
121
|
+
* Package manager: `uv` (not pip)
|
|
122
|
+
* Formatter: `env -u PYTHONPATH uv run -- ruff format`
|
|
123
|
+
* Linter: `env -u PYTHONPATH uv run -- ruff check`
|
|
124
|
+
* Type checker: `env -u PYTHONPATH uv run -- mypy --install-types --non-interactive`
|
|
125
|
+
|
|
126
|
+
### Git Workflows
|
|
127
|
+
|
|
128
|
+
#### Git Commit Messages
|
|
129
|
+
|
|
130
|
+
* Use the present tense.
|
|
131
|
+
* Keep the first line under 50 characters in length.
|
|
132
|
+
* Keep the second line blank.
|
|
133
|
+
* Keep all other lines under 72 characters in length.
|
|
134
|
+
* Reference issue numbers when available.
|
|
135
|
+
|
|
136
|
+
#### Generating PRs
|
|
137
|
+
|
|
138
|
+
When generating a PR, follow the instructions in `.github/PULL_REQUEST_TEMPLATE.md`:
|
|
139
|
+
|
|
140
|
+
* Add new author names to `mycli/AUTHORS.txt`.
|
|
141
|
+
* Add a new entry to `changelog.md`.
|
|
142
|
+
|
|
143
|
+
### Code Comments
|
|
144
|
+
|
|
145
|
+
Keep comments concise and direct. Use full sentences, ending with a period.
|
|
146
|
+
|
|
147
|
+
### See Also
|
|
148
|
+
|
|
149
|
+
See also the file `CONTRIBUTING.md`.
|
mycli-2.28.1/AUTHORS.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
See [AUTHORS.txt](mycli/AUTHORS.txt)
|
|
@@ -126,7 +126,7 @@ readlink -f $(which ex)
|
|
|
126
126
|
# GitHub PR checklist
|
|
127
127
|
|
|
128
128
|
* add the contribution to `changelog.md`
|
|
129
|
-
* add your name to the `AUTHORS` file (or make sure it is already there)
|
|
129
|
+
* add your name to the `mycli/AUTHORS.txt` file (or make sure it is already there)
|
|
130
130
|
* run
|
|
131
131
|
|
|
132
132
|
```bash
|
mycli-2.28.1/MANIFEST.in
ADDED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mycli
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.28.1
|
|
4
4
|
Summary: Rich MySQL terminal client with autocompletion, syntax highlighting, and dataframes
|
|
5
5
|
Author: Mycli Core Team
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
22
23
|
Classifier: Programming Language :: SQL
|
|
23
24
|
Classifier: Topic :: Database
|
|
24
25
|
Classifier: Topic :: Database :: Front-Ends
|
|
@@ -41,7 +42,6 @@ Requires-Dist: cli_helpers[styles]~=2.15.1
|
|
|
41
42
|
Requires-Dist: wcwidth~=0.8.3
|
|
42
43
|
Requires-Dist: pyperclip~=1.11.0
|
|
43
44
|
Requires-Dist: pycryptodomex~=3.23.0
|
|
44
|
-
Requires-Dist: pyfzf~=0.3.1
|
|
45
45
|
Requires-Dist: rapidfuzz~=3.14.5
|
|
46
46
|
Requires-Dist: keyring~=25.7.0
|
|
47
47
|
Requires-Dist: jinja2~=3.1.6
|
mycli-2.28.1/SPONSORS.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
See [SPONSORS.txt](mycli/SPONSORS.txt)
|
|
@@ -1,3 +1,67 @@
|
|
|
1
|
+
v2.28.1 (2026/10/03)
|
|
2
|
+
==============
|
|
3
|
+
|
|
4
|
+
Documentation
|
|
5
|
+
--------
|
|
6
|
+
* Align all uses of one-line app description with `README.md`.
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Internal
|
|
10
|
+
--------
|
|
11
|
+
* Add Python 3.15 trove classifier.
|
|
12
|
+
* Move Polars files to `dataframes` package directory.
|
|
13
|
+
* Move various utility files to a `utils` directory.
|
|
14
|
+
* Move various completion files to a `completion` directory.
|
|
15
|
+
* Move `fzf.py` inside a package directory.
|
|
16
|
+
* Move `hybrid_redirection.py` inside a package directory.
|
|
17
|
+
* Move `sql_result.py` inside a package directory.
|
|
18
|
+
* Rename `special` package to `special_commands`.
|
|
19
|
+
* Move various integrations to an `integrations` directory.
|
|
20
|
+
* Move various `prompt_toolkit` extensions to the `ptoolkit` directory.
|
|
21
|
+
* Rename the `ptoolkit` package to `prompt_toolkit`.
|
|
22
|
+
* Move `mycli_lexer.py` to a `pygments` package directory.
|
|
23
|
+
* Move `password_sources.py` to a `credentials` package directory.
|
|
24
|
+
* Create an `execution` package directory for `sql_execute.py` and `background_runner.py`.
|
|
25
|
+
* Add `.txt` to text files without file extensions.
|
|
26
|
+
* Move `test` directory to `mycli_test`.
|
|
27
|
+
* Ignore recent refactoring move commits in `git-blame`.
|
|
28
|
+
* Recast `cli_is_multiline()` as `repl_is_multiline()`.
|
|
29
|
+
* Align some imports and variable names to match filename moves.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
v2.28.0 (2026/10/02)
|
|
33
|
+
==============
|
|
34
|
+
|
|
35
|
+
Features
|
|
36
|
+
--------
|
|
37
|
+
* Add "streaming" query state when `--unbuffered` is in effect.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
Bug Fixes
|
|
41
|
+
--------
|
|
42
|
+
* Correct row counts when `--unbuffered` is in effect.
|
|
43
|
+
* Don't let `--unbuffered` override the state-update interval.
|
|
44
|
+
* Fix a brief blankout of query state feedback on large results.
|
|
45
|
+
* Note that `sqlglotc` is optional for performance in `--checkup`.
|
|
46
|
+
* Make imports less lazy, to load special commands under Python 3.15.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
Documentation
|
|
50
|
+
--------
|
|
51
|
+
* Add `doc/known_bugs.md` for known bugs and limitations.
|
|
52
|
+
* Add `doc/cookbook.md` for recipes on how to use mycli.
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
Internal
|
|
56
|
+
--------
|
|
57
|
+
* Replace `pyfzf` dependency with internal implementation.
|
|
58
|
+
* Use the `uv` outside of the `tox` environment when testing.
|
|
59
|
+
* Use forward-slash forms of special commands in the behave test suite.
|
|
60
|
+
* Use forward-slash forms of special commands in the pytest test suite.
|
|
61
|
+
* Add a `tox` typecheck command.
|
|
62
|
+
* Add a typecheck step to the `publish.yml` workflow.
|
|
63
|
+
|
|
64
|
+
|
|
1
65
|
v2.27.0 (2026/09/29)
|
|
2
66
|
==============
|
|
3
67
|
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Cookbook
|
|
2
|
+
|
|
3
|
+
Recipes for configuring and using mycli.
|
|
4
|
+
|
|
5
|
+
## faster table rendering
|
|
6
|
+
|
|
7
|
+
A substantial amount of time is spent rendering tables in `tabulate` when
|
|
8
|
+
the number of rows returned is say 100K or more. The reason is that
|
|
9
|
+
`tabulate` scans every row in pure Python to determine cell width.
|
|
10
|
+
|
|
11
|
+
One workaround for faster viewing of large results is to configure the output
|
|
12
|
+
format to CSV in `~/.myclirc`:
|
|
13
|
+
|
|
14
|
+
```ini
|
|
15
|
+
[main]
|
|
16
|
+
table_format = csv
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
and to configure the pager to a fast CSV viewer such as [csvlens](https://github.com/ys-l/csvlens):
|
|
20
|
+
|
|
21
|
+
```ini
|
|
22
|
+
[main]
|
|
23
|
+
pager = csvlens
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
which has the effect of moving cell-width calculations from Python to Rust.
|
|
27
|
+
|
|
28
|
+
## keyring
|
|
29
|
+
|
|
30
|
+
Use of the system keyring was left disabled in the default `~/.myclirc` to avoid
|
|
31
|
+
silently changing default behaviors. But it is recommended to enable it!
|
|
32
|
+
|
|
33
|
+
```ini
|
|
34
|
+
[main]
|
|
35
|
+
use_keyring = auto
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Sources eligible for the keyring can also be configured with
|
|
39
|
+
|
|
40
|
+
```ini
|
|
41
|
+
[main]
|
|
42
|
+
keyring_sources = prompt, literal, file, environment, dsn, login_path, fallback
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## completions trigger
|
|
46
|
+
|
|
47
|
+
Mycli's default completions trigger the display of candidates at the first
|
|
48
|
+
character, which might be distracting for some.
|
|
49
|
+
|
|
50
|
+
For more of an industry-standard experience, in which completions are deferred
|
|
51
|
+
until more information is typed, set `min_completion_trigger` to a small value
|
|
52
|
+
in `~/.myclirc`:
|
|
53
|
+
|
|
54
|
+
```ini
|
|
55
|
+
[main]
|
|
56
|
+
min_completion_trigger = 3
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## DSN environment variables
|
|
60
|
+
|
|
61
|
+
If using a tool such as [mise](https://github.com/jdx/mise) or [direnv](https://github.com/direnv/direnv) to manage
|
|
62
|
+
environment variables, it may be convenient to enable this setting in
|
|
63
|
+
`~/.myclirc`:
|
|
64
|
+
|
|
65
|
+
```ini
|
|
66
|
+
[main]
|
|
67
|
+
expand_dsn_alias_env_vars = True
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
which allows environment variables in the form `${VAR}` to be substituted
|
|
71
|
+
in DSNs.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Known Bugs
|
|
2
|
+
|
|
3
|
+
These are known bugs or limitations in mycli which it would be welcome to
|
|
4
|
+
fix.
|
|
5
|
+
|
|
6
|
+
## custom delimiters
|
|
7
|
+
|
|
8
|
+
A custom delimiter (query terminator) string may be set with the `/delimiter`
|
|
9
|
+
special command, but the custom delimiter is not respected in all parts of
|
|
10
|
+
mycli's code.
|
|
11
|
+
|
|
12
|
+
## completions after backtick
|
|
13
|
+
|
|
14
|
+
Completions after a backtick character are too exuberant. Example:
|
|
15
|
+
|
|
16
|
+
```sql
|
|
17
|
+
SELECT `<tab>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
will offer more completions than
|
|
21
|
+
|
|
22
|
+
```sql
|
|
23
|
+
SELECT <tab>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Windows limitations
|
|
27
|
+
|
|
28
|
+
Mycli is only partially tested on Windows, and several features such as
|
|
29
|
+
filename completion after `/source` may not work as expected.
|
|
30
|
+
|
|
31
|
+
## double-dash with shell redirections
|
|
32
|
+
|
|
33
|
+
The interpretation of `--` may not be consistent with `$|`. The double-dahs
|
|
34
|
+
is inherently ambiguous, being either a SQL comment initiator, or a common
|
|
35
|
+
part of a shell command. The rules for resolving the ambiguity should be
|
|
36
|
+
simple, and better documented.
|
|
37
|
+
|
|
38
|
+
## enum completions
|
|
39
|
+
|
|
40
|
+
Completions on enum values may fail if the values contain spaces.
|
|
41
|
+
|
|
42
|
+
## keyring support
|
|
43
|
+
|
|
44
|
+
If "Always Allow" is chosen on Mac, then all Python applications will have
|
|
45
|
+
access to the credential.
|
|
46
|
+
|
|
47
|
+
When making connections via a kubectl tunnel, the keyring is disabled, because
|
|
48
|
+
the Kubernetes context is not known.
|
|
49
|
+
|
|
50
|
+
## explorer
|
|
51
|
+
|
|
52
|
+
There is a trailing blank line in the explorer choices.
|
|
53
|
+
|
|
54
|
+
## prompt efficiency
|
|
55
|
+
|
|
56
|
+
The prompt and toolbar are updated more often than needed, even with caching.
|
|
57
|
+
|
|
58
|
+
## history search preview highlighting
|
|
59
|
+
|
|
60
|
+
When syntax highlighting with `pygmentize` is enabled for history search previews,
|
|
61
|
+
the colors do not match the user's preferences in `~/.myclirc`.
|