mycli 2.30.1__tar.gz → 2.30.3__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.30.1 → mycli-2.30.3}/.github/workflows/ci.yml +12 -12
- {mycli-2.30.1 → mycli-2.30.3}/.github/workflows/publish.yml +14 -14
- {mycli-2.30.1/mycli.egg-info → mycli-2.30.3}/PKG-INFO +10 -10
- {mycli-2.30.1 → mycli-2.30.3}/changelog.md +29 -0
- {mycli-2.30.1 → mycli-2.30.3}/docker/resources/test_db-1.0.7.tar.gz +1 -1
- {mycli-2.30.1 → mycli-2.30.3}/mycli/AUTHORS.txt +2 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/config.py +3 -3
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/sql_utils.py +2 -3
- {mycli-2.30.1 → mycli-2.30.3/mycli.egg-info}/PKG-INFO +10 -10
- {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/requires.txt +9 -9
- mycli-2.30.3/mycli.egg-info/scm_version.json +8 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_config.py +29 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_sql_utils.py +10 -0
- {mycli-2.30.1 → mycli-2.30.3}/pyproject.toml +10 -11
- mycli-2.30.1/mycli.egg-info/scm_version.json +0 -8
- {mycli-2.30.1 → mycli-2.30.3}/.git-blame-ignore-revs +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/.github/actions/lint/action.yml +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/.github/actions/typecheck/action.yml +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/.github/dependabot.yml +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/.github/workflows/lint.yml +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/.github/workflows/typecheck.yml +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/.gitignore +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/AGENTS.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/AUTHORS.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/CONTRIBUTING.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/LICENSE.txt +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/MANIFEST.in +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/README.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/SPONSORS.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/doc/cookbook.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/doc/key_bindings.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/doc/known_bugs.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/doc/llm.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/main.gif +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/polars_describe.png +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/polars_group_by.png +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/polars_histogram.png +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/polars_pivot.png +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/tables.png +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/doc/transforms.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/docker/Dockerfile +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/docker/resources/dot_mycli_history.txt +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/docker/resources/test_db_license.md +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/SPONSORS.txt +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/TIPS.txt +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/app_state.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/cli_runner.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/client.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/client_commands.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/client_connection.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/client_query.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/compat.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/constants.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/main.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/batch.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/checkup.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/completions.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/execute.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/list_dsn.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/repl.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/myclirc +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/output.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/completion/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/completion/completion_engine.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/completion/completion_refresher.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/completion/schema_prefetcher.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/completion/sql_completer.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/credentials/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/credentials/password_sources.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/dataframes/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/dataframes/completion.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/dataframes/transform.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/execution/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/execution/background_runner.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/execution/sql_execute.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/boundary/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/boundary/boundary_tunnel.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/fzf/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/fzf/fzf.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/kubernetes/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/kubernetes/kubectl_tunnel.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/macos/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/macos/macos_keychain.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/openssh/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/openssh/ssh_tunnel.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/vault/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/vault/vault_credentials.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/fzf_history.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/history.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/key_bindings.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/multiline.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/style.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/toolbar.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/pygments/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/pygments/mycli_lexer.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/redirection/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/redirection/hybrid_redirection.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/db_commands.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/delimiter_command.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/dsn_aliases.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/favorite_queries.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/io_commands.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/llm.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/main.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/source.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/special_command_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/sql_result/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/sql_result/sql_result.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/tabular_output/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/tabular_output/sql_format.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/batch_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/cli_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/dsn_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/interactive_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/key_binding_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/keyring_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/path_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/string_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/resources/completions/bash/mycli +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/resources/completions/fish/mycli.fish +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/resources/completions/zsh/_mycli +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli/types.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/SOURCES.txt +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/dependency_links.txt +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/entry_points.txt +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/scm_file_list.json +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/top_level.txt +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/auto_vertical.feature +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/basic_commands.feature +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/connection.feature +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/crud_database.feature +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/crud_table.feature +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/db_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/environment.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/fixture_data/help_commands.txt +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/fixture_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/iocommands.feature +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/named_queries.feature +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/specials.feature +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/__init__.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/auto_vertical.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/basic_commands.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/connection.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/crud_database.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/crud_table.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/iocommands.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/named_queries.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/specials.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/wrappers.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/wrappager.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/myclirc +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/mylogin.cnf +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/conftest.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_app_state.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_background_runner.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_bash_completion.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_batch_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_boundary_tunnel.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_checkup.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_cli_runner.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_cli_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_clibuffer.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_client.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_client_commands.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_client_connection.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_client_query.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_completer_use_switch.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_completion_engine.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_completion_refresher.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_delimitercommand.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_dsn_aliases.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_favoritequeries.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_fish_completion.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_fzf.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_hybrid_redirection.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_interactive_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_key_binding_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_key_bindings.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_keyring_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_kubectl_tunnel.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_macos_keychain.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_main.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_main_modes_batch.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_main_modes_execute.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_main_modes_list_dsn.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_main_modes_repl.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_naive_completion.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_output.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_password_sources.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_path_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_polars_completion.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_polars_transform.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_prompt_toolkit_fzf_history.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_prompt_toolkit_history.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_prompt_toolkit_style.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_prompt_toolkit_toolbar.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_prompt_toolkit_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_schema_prefetcher.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_smart_completion_public_schema_only.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_commands_init.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_db_commands.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_io_commands.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_llm.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_main.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_source.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_sql_execute.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_sqlcompleter.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_sqlresult.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_ssh_tunnel.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_string_utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_tabular_output.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_vault.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_zsh_completion.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/mycli_test/utils.py +0 -0
- {mycli-2.30.1 → mycli-2.30.3}/setup.cfg +0 -0
|
@@ -24,12 +24,12 @@ jobs:
|
|
|
24
24
|
steps:
|
|
25
25
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
26
26
|
|
|
27
|
-
- uses: astral-sh/setup-uv@
|
|
27
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
28
28
|
with:
|
|
29
29
|
version: "latest"
|
|
30
30
|
|
|
31
31
|
- name: Set up Python ${{ matrix.python-version }}
|
|
32
|
-
uses: actions/setup-python@
|
|
32
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
33
33
|
with:
|
|
34
34
|
python-version: ${{ matrix.python-version }}
|
|
35
35
|
|
|
@@ -66,12 +66,12 @@ jobs:
|
|
|
66
66
|
steps:
|
|
67
67
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
68
68
|
|
|
69
|
-
- uses: astral-sh/setup-uv@
|
|
69
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
70
70
|
with:
|
|
71
71
|
version: "latest"
|
|
72
72
|
|
|
73
73
|
- name: Set up Python ${{ matrix.python-version }}
|
|
74
|
-
uses: actions/setup-python@
|
|
74
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
75
75
|
with:
|
|
76
76
|
python-version: ${{ matrix.python-version }}
|
|
77
77
|
|
|
@@ -116,12 +116,12 @@ jobs:
|
|
|
116
116
|
steps:
|
|
117
117
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
118
118
|
|
|
119
|
-
- uses: astral-sh/setup-uv@
|
|
119
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
120
120
|
with:
|
|
121
121
|
version: 'latest'
|
|
122
122
|
|
|
123
123
|
- name: Set up Python ${{ matrix.python-version }}
|
|
124
|
-
uses: actions/setup-python@
|
|
124
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
125
125
|
with:
|
|
126
126
|
python-version: ${{ matrix.python-version }}
|
|
127
127
|
|
|
@@ -130,7 +130,7 @@ jobs:
|
|
|
130
130
|
run: uv sync --extra dev,llm,dataframe -p ${{ matrix.python-version }}
|
|
131
131
|
|
|
132
132
|
- name: Set up MySQL
|
|
133
|
-
uses: shogo82148/actions-setup-mysql@
|
|
133
|
+
uses: shogo82148/actions-setup-mysql@fb8ae72ad9f2f8244e594d6d48a981e975aee78e # v1.56.1
|
|
134
134
|
with:
|
|
135
135
|
mysql-version: '9.7'
|
|
136
136
|
root-password: root
|
|
@@ -150,7 +150,7 @@ jobs:
|
|
|
150
150
|
steps:
|
|
151
151
|
- uses: vampire/setup-wsl@4c48163d9f981914dd8caa0fc335fe19cca5bff4 # v7.2.0
|
|
152
152
|
with:
|
|
153
|
-
distribution: Ubuntu-
|
|
153
|
+
distribution: Ubuntu-26.04
|
|
154
154
|
use-cache: 'true'
|
|
155
155
|
update: 'false'
|
|
156
156
|
additional-packages: |
|
|
@@ -166,9 +166,9 @@ jobs:
|
|
|
166
166
|
run: |
|
|
167
167
|
mkdir -p /root/mycli
|
|
168
168
|
|
|
169
|
-
- uses: ubuntu/wsl/.github/actions/wsl-checkout@
|
|
169
|
+
- uses: ubuntu/wsl/.github/actions/wsl-checkout@e7fb23c6481945b25b974b6cf7a5c7f4550b6cf8
|
|
170
170
|
with:
|
|
171
|
-
distro: Ubuntu-
|
|
171
|
+
distro: Ubuntu-26.04
|
|
172
172
|
working-dir: /root/mycli
|
|
173
173
|
|
|
174
174
|
- name: Install uv
|
|
@@ -220,12 +220,12 @@ jobs:
|
|
|
220
220
|
steps:
|
|
221
221
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
222
222
|
|
|
223
|
-
- uses: astral-sh/setup-uv@
|
|
223
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
224
224
|
with:
|
|
225
225
|
version: "latest"
|
|
226
226
|
|
|
227
227
|
- name: Set up Python ${{ matrix.python-version }}
|
|
228
|
-
uses: actions/setup-python@
|
|
228
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
229
229
|
with:
|
|
230
230
|
python-version: '3.15'
|
|
231
231
|
|
|
@@ -51,12 +51,12 @@ jobs:
|
|
|
51
51
|
|
|
52
52
|
steps:
|
|
53
53
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
54
|
-
- uses: astral-sh/setup-uv@
|
|
54
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
55
55
|
with:
|
|
56
56
|
version: "latest"
|
|
57
57
|
|
|
58
58
|
- name: Set up Python ${{ matrix.python-version }}
|
|
59
|
-
uses: actions/setup-python@
|
|
59
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
60
60
|
with:
|
|
61
61
|
python-version: ${{ matrix.python-version }}
|
|
62
62
|
|
|
@@ -93,12 +93,12 @@ jobs:
|
|
|
93
93
|
steps:
|
|
94
94
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
95
95
|
|
|
96
|
-
- uses: astral-sh/setup-uv@
|
|
96
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
97
97
|
with:
|
|
98
98
|
version: "latest"
|
|
99
99
|
|
|
100
100
|
- name: Set up Python ${{ matrix.python-version }}
|
|
101
|
-
uses: actions/setup-python@
|
|
101
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
102
102
|
with:
|
|
103
103
|
python-version: ${{ matrix.python-version }}
|
|
104
104
|
|
|
@@ -144,12 +144,12 @@ jobs:
|
|
|
144
144
|
steps:
|
|
145
145
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
146
146
|
|
|
147
|
-
- uses: astral-sh/setup-uv@
|
|
147
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
148
148
|
with:
|
|
149
149
|
version: 'latest'
|
|
150
150
|
|
|
151
151
|
- name: Set up Python ${{ matrix.python-version }}
|
|
152
|
-
uses: actions/setup-python@
|
|
152
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
153
153
|
with:
|
|
154
154
|
python-version: ${{ matrix.python-version }}
|
|
155
155
|
|
|
@@ -158,7 +158,7 @@ jobs:
|
|
|
158
158
|
run: uv sync --extra dev,llm,dataframe --python ${{ matrix.python-version }}
|
|
159
159
|
|
|
160
160
|
- name: Set up MySQL
|
|
161
|
-
uses: shogo82148/actions-setup-mysql@
|
|
161
|
+
uses: shogo82148/actions-setup-mysql@fb8ae72ad9f2f8244e594d6d48a981e975aee78e # v1.56.1
|
|
162
162
|
with:
|
|
163
163
|
mysql-version: '9.7'
|
|
164
164
|
root-password: root
|
|
@@ -179,7 +179,7 @@ jobs:
|
|
|
179
179
|
steps:
|
|
180
180
|
- uses: vampire/setup-wsl@4c48163d9f981914dd8caa0fc335fe19cca5bff4 # v7.2.0
|
|
181
181
|
with:
|
|
182
|
-
distribution: Ubuntu-
|
|
182
|
+
distribution: Ubuntu-26.04
|
|
183
183
|
use-cache: 'true'
|
|
184
184
|
update: 'false'
|
|
185
185
|
additional-packages: |
|
|
@@ -195,9 +195,9 @@ jobs:
|
|
|
195
195
|
run: |
|
|
196
196
|
mkdir -p /root/mycli
|
|
197
197
|
|
|
198
|
-
- uses: ubuntu/wsl/.github/actions/wsl-checkout@
|
|
198
|
+
- uses: ubuntu/wsl/.github/actions/wsl-checkout@e7fb23c6481945b25b974b6cf7a5c7f4550b6cf8
|
|
199
199
|
with:
|
|
200
|
-
distro: Ubuntu-
|
|
200
|
+
distro: Ubuntu-26.04
|
|
201
201
|
working-dir: /root/mycli
|
|
202
202
|
|
|
203
203
|
- name: Install uv
|
|
@@ -248,12 +248,12 @@ jobs:
|
|
|
248
248
|
|
|
249
249
|
steps:
|
|
250
250
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
251
|
-
- uses: astral-sh/setup-uv@
|
|
251
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
252
252
|
with:
|
|
253
253
|
version: "latest"
|
|
254
254
|
|
|
255
255
|
- name: Set up Python
|
|
256
|
-
uses: actions/setup-python@
|
|
256
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
257
257
|
with:
|
|
258
258
|
python-version: '3.15'
|
|
259
259
|
|
|
@@ -284,7 +284,7 @@ jobs:
|
|
|
284
284
|
name: python-packages
|
|
285
285
|
path: dist/
|
|
286
286
|
- name: Publish to PyPI
|
|
287
|
-
uses: pypa/gh-action-pypi-publish@
|
|
287
|
+
uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
288
288
|
|
|
289
289
|
publish-image:
|
|
290
290
|
name: Publish Image to ghcr.io
|
|
@@ -309,7 +309,7 @@ jobs:
|
|
|
309
309
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
310
310
|
|
|
311
311
|
- name: Log in to the Container registry
|
|
312
|
-
uses: docker/login-action@
|
|
312
|
+
uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0
|
|
313
313
|
with:
|
|
314
314
|
registry: ${{ env.REGISTRY }}
|
|
315
315
|
username: ${{ github.actor }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mycli
|
|
3
|
-
Version: 2.30.
|
|
3
|
+
Version: 2.30.3
|
|
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
|
|
@@ -35,11 +35,11 @@ Requires-Dist: Pygments~=2.21.0
|
|
|
35
35
|
Requires-Dist: prompt_toolkit~=3.0.53
|
|
36
36
|
Requires-Dist: PyMySQL~=1.2.3
|
|
37
37
|
Requires-Dist: sqlparse~=0.6.0
|
|
38
|
-
Requires-Dist: sqlglot~=30.
|
|
39
|
-
Requires-Dist: sqlglotc~=30.
|
|
38
|
+
Requires-Dist: sqlglot~=30.25.0
|
|
39
|
+
Requires-Dist: sqlglotc~=30.25.0
|
|
40
40
|
Requires-Dist: configobj~=5.0.9
|
|
41
|
-
Requires-Dist: cli_helpers[styles]~=2.15.
|
|
42
|
-
Requires-Dist: wcwidth~=0.9.
|
|
41
|
+
Requires-Dist: cli_helpers[styles]~=2.15.3
|
|
42
|
+
Requires-Dist: wcwidth~=0.9.4
|
|
43
43
|
Requires-Dist: pyperclip~=1.11.0
|
|
44
44
|
Requires-Dist: pycryptodomex~=3.24.1
|
|
45
45
|
Requires-Dist: rapidfuzz~=3.14.6
|
|
@@ -52,22 +52,22 @@ Requires-Dist: llm~=0.36; extra == "llm"
|
|
|
52
52
|
Requires-Dist: setuptools==84.*; extra == "llm"
|
|
53
53
|
Requires-Dist: pip~=26.2.2; extra == "llm"
|
|
54
54
|
Provides-Extra: dataframe
|
|
55
|
-
Requires-Dist: polars~=2.
|
|
55
|
+
Requires-Dist: polars~=2.1.0; extra == "dataframe"
|
|
56
56
|
Requires-Dist: altair~=6.3.0; extra == "dataframe"
|
|
57
57
|
Requires-Dist: vl-convert-python~=1.9.0; extra == "dataframe"
|
|
58
58
|
Provides-Extra: all
|
|
59
59
|
Requires-Dist: mycli[dataframe,llm]; extra == "all"
|
|
60
60
|
Provides-Extra: dev
|
|
61
61
|
Requires-Dist: behave~=1.3.3; extra == "dev"
|
|
62
|
-
Requires-Dist: coverage~=7.
|
|
62
|
+
Requires-Dist: coverage~=7.17.0; extra == "dev"
|
|
63
63
|
Requires-Dist: mypy~=2.4.0; extra == "dev"
|
|
64
64
|
Requires-Dist: pexpect~=4.9.0; extra == "dev"
|
|
65
|
-
Requires-Dist: pytest~=9.
|
|
65
|
+
Requires-Dist: pytest~=9.2.0; extra == "dev"
|
|
66
66
|
Requires-Dist: pytest-cov~=7.1.0; extra == "dev"
|
|
67
67
|
Requires-Dist: pytest-random-order~=1.2.0; extra == "dev"
|
|
68
|
-
Requires-Dist: tox~=4.
|
|
68
|
+
Requires-Dist: tox~=4.67.1; extra == "dev"
|
|
69
69
|
Requires-Dist: pdbpp~=0.12.1; extra == "dev"
|
|
70
|
-
Requires-Dist: ruff~=0.17.
|
|
70
|
+
Requires-Dist: ruff~=0.17.3; extra == "dev"
|
|
71
71
|
Dynamic: license-file
|
|
72
72
|
|
|
73
73
|
# mycli
|
|
@@ -1,3 +1,32 @@
|
|
|
1
|
+
v2.30.3 (2026/11/05)
|
|
2
|
+
==============
|
|
3
|
+
|
|
4
|
+
Internal
|
|
5
|
+
--------
|
|
6
|
+
* Update `wcwidth` dependency to v0.9.4.
|
|
7
|
+
* Update `sqlglot` dependency to v30.25.0.
|
|
8
|
+
* Update `coverage` dev dependency to v7.17.0.
|
|
9
|
+
* Update `tox` dev dependency to v4.67.1.
|
|
10
|
+
* Update `ruff` dev dependency to v0.17.3.
|
|
11
|
+
* Update WSL Linux in CI to Ubuntu 26.04.
|
|
12
|
+
* Update `polars` dependency to v2.1.0.
|
|
13
|
+
* Update `pytest` dev dependency to v9.2.0.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
v2.30.2 (2026/10/28)
|
|
17
|
+
==============
|
|
18
|
+
|
|
19
|
+
Bug Fixes
|
|
20
|
+
--------
|
|
21
|
+
* Read and write the package `myclirc` as UTF-8, fixing a startup crash on non-UTF-8 locales such as Japanese Windows.
|
|
22
|
+
* Keep checking later statements for the destructive warning after a single-table `UPDATE ... WHERE`.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
Internal
|
|
26
|
+
--------
|
|
27
|
+
* Update `cli_helpers` to v2.15.3.
|
|
28
|
+
|
|
29
|
+
|
|
1
30
|
v2.30.1 (2026/10/24)
|
|
2
31
|
==============
|
|
3
32
|
|
|
@@ -197,20 +197,20 @@ def read_config_files(
|
|
|
197
197
|
def create_default_config(list_values: bool = True) -> ConfigObj:
|
|
198
198
|
import mycli
|
|
199
199
|
|
|
200
|
-
default_config_file = resources.files(mycli).joinpath("myclirc").open('r')
|
|
200
|
+
default_config_file = resources.files(mycli).joinpath("myclirc").open('r', encoding='utf8')
|
|
201
201
|
return read_config_file(default_config_file, list_values=list_values)
|
|
202
202
|
|
|
203
203
|
|
|
204
204
|
def write_default_config(destination: str, overwrite: bool = False) -> None:
|
|
205
205
|
import mycli
|
|
206
206
|
|
|
207
|
-
with resources.files(mycli).joinpath("myclirc").open('r') as f:
|
|
207
|
+
with resources.files(mycli).joinpath("myclirc").open('r', encoding='utf8') as f:
|
|
208
208
|
default_config = f.read()
|
|
209
209
|
destination = os.path.expanduser(destination)
|
|
210
210
|
if not overwrite and exists(destination):
|
|
211
211
|
return
|
|
212
212
|
|
|
213
|
-
with open(destination, "w") as f:
|
|
213
|
+
with open(destination, "w", encoding='utf8') as f:
|
|
214
214
|
f.write(default_config)
|
|
215
215
|
|
|
216
216
|
|
|
@@ -391,9 +391,8 @@ def is_destructive(keywords: list[str], queries: str) -> bool:
|
|
|
391
391
|
# subtle: if "UPDATE" is one of our keywords AND "query" starts with "UPDATE"
|
|
392
392
|
if query_starts_with(query, keywords) and query_starts_with(query, ["update"]):
|
|
393
393
|
if query_has_where_clause(query) and query_is_single_table_update(query):
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
return True
|
|
394
|
+
continue
|
|
395
|
+
return True
|
|
397
396
|
if query_starts_with(query, keywords):
|
|
398
397
|
return True
|
|
399
398
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mycli
|
|
3
|
-
Version: 2.30.
|
|
3
|
+
Version: 2.30.3
|
|
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
|
|
@@ -35,11 +35,11 @@ Requires-Dist: Pygments~=2.21.0
|
|
|
35
35
|
Requires-Dist: prompt_toolkit~=3.0.53
|
|
36
36
|
Requires-Dist: PyMySQL~=1.2.3
|
|
37
37
|
Requires-Dist: sqlparse~=0.6.0
|
|
38
|
-
Requires-Dist: sqlglot~=30.
|
|
39
|
-
Requires-Dist: sqlglotc~=30.
|
|
38
|
+
Requires-Dist: sqlglot~=30.25.0
|
|
39
|
+
Requires-Dist: sqlglotc~=30.25.0
|
|
40
40
|
Requires-Dist: configobj~=5.0.9
|
|
41
|
-
Requires-Dist: cli_helpers[styles]~=2.15.
|
|
42
|
-
Requires-Dist: wcwidth~=0.9.
|
|
41
|
+
Requires-Dist: cli_helpers[styles]~=2.15.3
|
|
42
|
+
Requires-Dist: wcwidth~=0.9.4
|
|
43
43
|
Requires-Dist: pyperclip~=1.11.0
|
|
44
44
|
Requires-Dist: pycryptodomex~=3.24.1
|
|
45
45
|
Requires-Dist: rapidfuzz~=3.14.6
|
|
@@ -52,22 +52,22 @@ Requires-Dist: llm~=0.36; extra == "llm"
|
|
|
52
52
|
Requires-Dist: setuptools==84.*; extra == "llm"
|
|
53
53
|
Requires-Dist: pip~=26.2.2; extra == "llm"
|
|
54
54
|
Provides-Extra: dataframe
|
|
55
|
-
Requires-Dist: polars~=2.
|
|
55
|
+
Requires-Dist: polars~=2.1.0; extra == "dataframe"
|
|
56
56
|
Requires-Dist: altair~=6.3.0; extra == "dataframe"
|
|
57
57
|
Requires-Dist: vl-convert-python~=1.9.0; extra == "dataframe"
|
|
58
58
|
Provides-Extra: all
|
|
59
59
|
Requires-Dist: mycli[dataframe,llm]; extra == "all"
|
|
60
60
|
Provides-Extra: dev
|
|
61
61
|
Requires-Dist: behave~=1.3.3; extra == "dev"
|
|
62
|
-
Requires-Dist: coverage~=7.
|
|
62
|
+
Requires-Dist: coverage~=7.17.0; extra == "dev"
|
|
63
63
|
Requires-Dist: mypy~=2.4.0; extra == "dev"
|
|
64
64
|
Requires-Dist: pexpect~=4.9.0; extra == "dev"
|
|
65
|
-
Requires-Dist: pytest~=9.
|
|
65
|
+
Requires-Dist: pytest~=9.2.0; extra == "dev"
|
|
66
66
|
Requires-Dist: pytest-cov~=7.1.0; extra == "dev"
|
|
67
67
|
Requires-Dist: pytest-random-order~=1.2.0; extra == "dev"
|
|
68
|
-
Requires-Dist: tox~=4.
|
|
68
|
+
Requires-Dist: tox~=4.67.1; extra == "dev"
|
|
69
69
|
Requires-Dist: pdbpp~=0.12.1; extra == "dev"
|
|
70
|
-
Requires-Dist: ruff~=0.17.
|
|
70
|
+
Requires-Dist: ruff~=0.17.3; extra == "dev"
|
|
71
71
|
Dynamic: license-file
|
|
72
72
|
|
|
73
73
|
# mycli
|
|
@@ -5,11 +5,11 @@ Pygments~=2.21.0
|
|
|
5
5
|
prompt_toolkit~=3.0.53
|
|
6
6
|
PyMySQL~=1.2.3
|
|
7
7
|
sqlparse~=0.6.0
|
|
8
|
-
sqlglot~=30.
|
|
9
|
-
sqlglotc~=30.
|
|
8
|
+
sqlglot~=30.25.0
|
|
9
|
+
sqlglotc~=30.25.0
|
|
10
10
|
configobj~=5.0.9
|
|
11
|
-
cli_helpers[styles]~=2.15.
|
|
12
|
-
wcwidth~=0.9.
|
|
11
|
+
cli_helpers[styles]~=2.15.3
|
|
12
|
+
wcwidth~=0.9.4
|
|
13
13
|
pyperclip~=1.11.0
|
|
14
14
|
pycryptodomex~=3.24.1
|
|
15
15
|
rapidfuzz~=3.14.6
|
|
@@ -22,21 +22,21 @@ yaspin~=3.5.1
|
|
|
22
22
|
mycli[dataframe,llm]
|
|
23
23
|
|
|
24
24
|
[dataframe]
|
|
25
|
-
polars~=2.
|
|
25
|
+
polars~=2.1.0
|
|
26
26
|
altair~=6.3.0
|
|
27
27
|
vl-convert-python~=1.9.0
|
|
28
28
|
|
|
29
29
|
[dev]
|
|
30
30
|
behave~=1.3.3
|
|
31
|
-
coverage~=7.
|
|
31
|
+
coverage~=7.17.0
|
|
32
32
|
mypy~=2.4.0
|
|
33
33
|
pexpect~=4.9.0
|
|
34
|
-
pytest~=9.
|
|
34
|
+
pytest~=9.2.0
|
|
35
35
|
pytest-cov~=7.1.0
|
|
36
36
|
pytest-random-order~=1.2.0
|
|
37
|
-
tox~=4.
|
|
37
|
+
tox~=4.67.1
|
|
38
38
|
pdbpp~=0.12.1
|
|
39
|
-
ruff~=0.17.
|
|
39
|
+
ruff~=0.17.3
|
|
40
40
|
|
|
41
41
|
[llm]
|
|
42
42
|
llm~=0.36
|
|
@@ -6,6 +6,7 @@ from io import BytesIO, StringIO, TextIOWrapper
|
|
|
6
6
|
import logging
|
|
7
7
|
import os
|
|
8
8
|
import struct
|
|
9
|
+
import subprocess
|
|
9
10
|
import sys
|
|
10
11
|
from tempfile import NamedTemporaryFile
|
|
11
12
|
from types import SimpleNamespace
|
|
@@ -435,6 +436,34 @@ def test_create_and_write_default_config(tmp_path) -> None:
|
|
|
435
436
|
assert '[main]' in destination.read_text(encoding='utf8')
|
|
436
437
|
|
|
437
438
|
|
|
439
|
+
def test_default_config_does_not_use_locale_encoding(tmp_path) -> None:
|
|
440
|
+
# The packaged myclirc is UTF-8 with non-ASCII text, so opening it with the
|
|
441
|
+
# locale encoding fails on non-UTF-8 locales such as cp932 (Japanese Windows).
|
|
442
|
+
script = '\n'.join((
|
|
443
|
+
'import sys',
|
|
444
|
+
'from mycli.config import create_default_config, write_default_config',
|
|
445
|
+
'create_default_config()',
|
|
446
|
+
'write_default_config(sys.argv[1])',
|
|
447
|
+
))
|
|
448
|
+
result = subprocess.run(
|
|
449
|
+
[
|
|
450
|
+
sys.executable,
|
|
451
|
+
'-X',
|
|
452
|
+
'warn_default_encoding',
|
|
453
|
+
'-W',
|
|
454
|
+
'error::EncodingWarning:mycli.config',
|
|
455
|
+
'-c',
|
|
456
|
+
script,
|
|
457
|
+
str(tmp_path / 'myclirc'),
|
|
458
|
+
],
|
|
459
|
+
capture_output=True,
|
|
460
|
+
encoding='utf8',
|
|
461
|
+
errors='replace',
|
|
462
|
+
)
|
|
463
|
+
assert result.returncode == 0, result.stderr
|
|
464
|
+
assert '[main]' in (tmp_path / 'myclirc').read_text(encoding='utf8')
|
|
465
|
+
|
|
466
|
+
|
|
438
467
|
def test_get_mylogin_cnf_path_returns_none_for_missing_file(monkeypatch, tmp_path) -> None:
|
|
439
468
|
monkeypatch.setenv('MYSQL_TEST_LOGIN_FILE', str(tmp_path / 'missing.mylogin.cnf'))
|
|
440
469
|
|
|
@@ -456,6 +456,16 @@ def test_is_destructive_update_with_where_clause_and_comment():
|
|
|
456
456
|
assert is_destructive(["update"], sql) is False
|
|
457
457
|
|
|
458
458
|
|
|
459
|
+
def test_is_destructive_checks_queries_after_safe_update():
|
|
460
|
+
sql = "UPDATE test SET x = 1 WHERE id = 1;\ndrop database foo;"
|
|
461
|
+
assert is_destructive(["update", "drop"], sql) is True
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
def test_is_destructive_checks_updates_after_safe_update():
|
|
465
|
+
sql = "UPDATE test SET x = 1 WHERE id = 1;\nUPDATE test SET x = 2;"
|
|
466
|
+
assert is_destructive(["update"], sql) is True
|
|
467
|
+
|
|
468
|
+
|
|
459
469
|
def test_is_destructive_update_multiple_tables_with_where_clause():
|
|
460
470
|
sql = "use test;\nshow databases;\nUPDATE test, foo SET x = 1 WHERE id = 1;"
|
|
461
471
|
assert is_destructive(["update"], sql) is True
|
|
@@ -32,11 +32,11 @@ dependencies = [
|
|
|
32
32
|
"prompt_toolkit ~= 3.0.53",
|
|
33
33
|
"PyMySQL ~= 1.2.3",
|
|
34
34
|
"sqlparse ~= 0.6.0",
|
|
35
|
-
"sqlglot ~= 30.
|
|
36
|
-
"sqlglotc ~= 30.
|
|
35
|
+
"sqlglot ~= 30.25.0",
|
|
36
|
+
"sqlglotc ~= 30.25.0",
|
|
37
37
|
"configobj ~= 5.0.9",
|
|
38
|
-
"cli_helpers[styles] ~= 2.15.
|
|
39
|
-
"wcwidth ~= 0.9.
|
|
38
|
+
"cli_helpers[styles] ~= 2.15.3",
|
|
39
|
+
"wcwidth ~= 0.9.4",
|
|
40
40
|
"pyperclip ~= 1.11.0",
|
|
41
41
|
"pycryptodomex ~= 3.24.1",
|
|
42
42
|
"rapidfuzz ~= 3.14.6",
|
|
@@ -67,7 +67,7 @@ llm = [
|
|
|
67
67
|
"pip ~= 26.2.2",
|
|
68
68
|
]
|
|
69
69
|
dataframe = [
|
|
70
|
-
"polars ~= 2.
|
|
70
|
+
"polars ~= 2.1.0",
|
|
71
71
|
"altair ~= 6.3.0",
|
|
72
72
|
"vl-convert-python ~= 1.9.0",
|
|
73
73
|
]
|
|
@@ -76,15 +76,15 @@ all = [
|
|
|
76
76
|
]
|
|
77
77
|
dev = [
|
|
78
78
|
"behave ~= 1.3.3",
|
|
79
|
-
"coverage ~= 7.
|
|
79
|
+
"coverage ~= 7.17.0",
|
|
80
80
|
"mypy ~= 2.4.0",
|
|
81
81
|
"pexpect ~= 4.9.0",
|
|
82
|
-
"pytest ~= 9.
|
|
82
|
+
"pytest ~= 9.2.0",
|
|
83
83
|
"pytest-cov ~= 7.1.0",
|
|
84
84
|
"pytest-random-order ~= 1.2.0",
|
|
85
|
-
"tox ~= 4.
|
|
85
|
+
"tox ~= 4.67.1",
|
|
86
86
|
"pdbpp ~= 0.12.1",
|
|
87
|
-
"ruff ~= 0.17.
|
|
87
|
+
"ruff ~= 0.17.3", # keep in sync with the tool.tox.env.style stanza below
|
|
88
88
|
]
|
|
89
89
|
|
|
90
90
|
[project.scripts]
|
|
@@ -101,7 +101,6 @@ exclude-newer = '1 week'
|
|
|
101
101
|
|
|
102
102
|
[tool.uv.exclude-newer-package]
|
|
103
103
|
cli_helpers = false
|
|
104
|
-
pip = false # removeme after 2026-10-27
|
|
105
104
|
|
|
106
105
|
[tool.ruff]
|
|
107
106
|
target-version = 'py311'
|
|
@@ -165,7 +164,7 @@ allowlist_externals = ['rm', 'uv']
|
|
|
165
164
|
|
|
166
165
|
[tool.tox.env.style]
|
|
167
166
|
skip_install = true
|
|
168
|
-
deps = ['ruff~=0.17.
|
|
167
|
+
deps = ['ruff~=0.17.3'] # keep in sync with dev dependency group above
|
|
169
168
|
commands = [['ruff', 'check'],
|
|
170
169
|
['ruff', 'format', '--diff']]
|
|
171
170
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|