mycli 2.25.3__tar.gz → 2.26.0__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.25.3 → mycli-2.26.0}/.github/workflows/ci.yml +2 -2
- {mycli-2.25.3 → mycli-2.26.0}/.github/workflows/publish.yml +1 -1
- {mycli-2.25.3 → mycli-2.26.0}/AGENTS.md +9 -8
- mycli-2.26.0/CONTRIBUTING.md +152 -0
- {mycli-2.25.3/mycli.egg-info → mycli-2.26.0}/PKG-INFO +15 -7
- {mycli-2.25.3 → mycli-2.26.0}/README.md +12 -3
- {mycli-2.25.3 → mycli-2.26.0}/changelog.md +188 -164
- {mycli-2.25.3 → mycli-2.26.0}/doc/key_bindings.md +8 -0
- {mycli-2.25.3 → mycli-2.26.0}/docker/resources/test_db-1.0.7.tar.gz +1 -1
- mycli-2.26.0/docker/resources/test_db_license.md +18 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/TIPS +2 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/boundary_tunnel.py +3 -7
- {mycli-2.25.3 → mycli-2.26.0}/mycli/client_connection.py +7 -25
- {mycli-2.25.3 → mycli-2.26.0}/mycli/constants.py +9 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/key_bindings.py +18 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/main_modes/repl.py +2 -2
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/completion_engine.py +68 -1
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/key_binding_utils.py +9 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/special/dbcommands.py +1 -1
- {mycli-2.25.3 → mycli-2.26.0}/mycli/sqlcompleter.py +24 -1
- {mycli-2.25.3 → mycli-2.26.0}/mycli/sqlexecute.py +26 -17
- {mycli-2.25.3 → mycli-2.26.0/mycli.egg-info}/PKG-INFO +15 -7
- {mycli-2.25.3 → mycli-2.26.0}/mycli.egg-info/SOURCES.txt +1 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli.egg-info/requires.txt +1 -1
- {mycli-2.25.3 → mycli-2.26.0}/mycli.egg-info/scm_file_list.json +1 -0
- mycli-2.26.0/mycli.egg-info/scm_version.json +8 -0
- {mycli-2.25.3 → mycli-2.26.0}/pyproject.toml +3 -4
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_boundary_tunnel.py +73 -70
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_client.py +15 -3
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_client_connection.py +0 -10
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_completion_engine.py +89 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_key_binding_utils.py +33 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_key_bindings.py +61 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_main_modes_repl.py +3 -9
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_smart_completion_public_schema_only.py +85 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_special_dbcommands.py +1 -6
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_sqlcompleter.py +97 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_sqlexecute.py +106 -13
- mycli-2.25.3/CONTRIBUTING.md +0 -118
- mycli-2.25.3/mycli.egg-info/scm_version.json +0 -8
- {mycli-2.25.3 → mycli-2.26.0}/.git-blame-ignore-revs +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/.github/dependabot.yml +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/.github/workflows/lint.yml +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/.github/workflows/typecheck.yml +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/.gitignore +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/AUTHORS.md +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/LICENSE.txt +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/MANIFEST.in +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/SPONSORS.md +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/doc/llm.md +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/doc/screenshots/main.gif +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/doc/screenshots/polars_describe.png +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/doc/screenshots/polars_group_by.png +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/doc/screenshots/polars_histogram.png +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/doc/screenshots/polars_pivot.png +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/doc/screenshots/tables.png +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/doc/transforms.md +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/docker/Dockerfile +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/AUTHORS +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/SPONSORS +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/__init__.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/app_state.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/cli_runner.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/clibuffer.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/client.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/client_commands.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/client_query.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/clistyle.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/clitoolbar.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/compat.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/completion_refresher.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/config.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/keyring_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/kubectl_tunnel.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/lexer.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/macos_keychain.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/main.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/main_modes/batch.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/main_modes/checkup.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/main_modes/completions.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/main_modes/execute.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/main_modes/list_dsn.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/myclirc +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/output.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/__init__.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/batch_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/cli_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/filepaths.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/hybrid_redirection.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/interactive_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/polars_completion.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/polars_transform.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/ptoolkit/__init__.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/ptoolkit/fzf.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/ptoolkit/history.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/ptoolkit/utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/special/__init__.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/special/delimitercommand.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/special/dsn_aliases.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/special/favoritequeries.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/special/iocommands.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/special/llm.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/special/main.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/special/source.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/special/utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/sql_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/sqlresult.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/string_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/tabular_output/__init__.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/packages/tabular_output/sql_format.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/password_sources.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/resources/completions/bash/mycli +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/resources/completions/fish/mycli.fish +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/resources/completions/zsh/_mycli +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/schema_prefetcher.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/ssh_tunnel.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/types.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli/vault.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli.egg-info/dependency_links.txt +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli.egg-info/entry_points.txt +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/mycli.egg-info/top_level.txt +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/setup.cfg +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/__init__.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/__init__.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/auto_vertical.feature +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/basic_commands.feature +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/connection.feature +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/crud_database.feature +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/crud_table.feature +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/db_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/environment.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/fixture_data/help_commands.txt +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/fixture_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/iocommands.feature +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/named_queries.feature +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/specials.feature +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/steps/__init__.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/steps/auto_vertical.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/steps/basic_commands.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/steps/connection.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/steps/crud_database.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/steps/crud_table.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/steps/iocommands.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/steps/named_queries.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/steps/specials.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/steps/utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/steps/wrappers.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/features/wrappager.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/myclirc +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/mylogin.cnf +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/conftest.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_app_state.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_bash_completion.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_batch_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_checkup.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_cli_runner.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_cli_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_clibuffer.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_client_commands.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_client_query.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_clistyle.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_clitoolbar.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_completer_use_switch.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_completion_refresher.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_config.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_delimitercommand.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_dsn_aliases.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_favoritequeries.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_filepaths.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_fish_completion.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_hybrid_redirection.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_interactive_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_keyring_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_kubectl_tunnel.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_macos_keychain.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_main.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_main_modes_batch.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_main_modes_execute.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_main_modes_list_dsn.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_naive_completion.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_output.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_password_sources.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_polars_completion.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_polars_transform.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_ptoolkit_fzf.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_ptoolkit_history.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_ptoolkit_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_schema_prefetcher.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_special_init.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_special_iocommands.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_special_llm.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_special_main.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_special_source.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_special_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_sql_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_sqlresult.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_ssh_tunnel.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_string_utils.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_tabular_output.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_vault.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/pytests/test_zsh_completion.py +0 -0
- {mycli-2.25.3 → mycli-2.26.0}/test/utils.py +0 -0
|
@@ -264,7 +264,7 @@ jobs:
|
|
|
264
264
|
|
|
265
265
|
- name: Build Docker image
|
|
266
266
|
id: build
|
|
267
|
-
uses: docker/build-push-action@
|
|
267
|
+
uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
|
|
268
268
|
with:
|
|
269
269
|
context: .
|
|
270
270
|
file: docker/Dockerfile
|
|
@@ -284,7 +284,7 @@ jobs:
|
|
|
284
284
|
|
|
285
285
|
- name: Build Docker image
|
|
286
286
|
id: build
|
|
287
|
-
uses: docker/build-push-action@
|
|
287
|
+
uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
|
|
288
288
|
with:
|
|
289
289
|
context: .
|
|
290
290
|
file: docker/Dockerfile
|
|
@@ -314,7 +314,7 @@ jobs:
|
|
|
314
314
|
|
|
315
315
|
- name: Build and push Docker image
|
|
316
316
|
id: push
|
|
317
|
-
uses: docker/build-push-action@
|
|
317
|
+
uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
|
|
318
318
|
with:
|
|
319
319
|
context: .
|
|
320
320
|
file: docker/Dockerfile
|
|
@@ -80,13 +80,13 @@ This repo uses `uv` for dependency management. **Always** prefix Python
|
|
|
80
80
|
commands with `uv run`. Example:
|
|
81
81
|
|
|
82
82
|
```bash
|
|
83
|
-
uv run -- python script.py
|
|
83
|
+
env -u PYTHONPATH uv run -- python script.py
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
#### Python Typing
|
|
87
87
|
|
|
88
88
|
This repo uses type annotations which are checked by `mypy`. **Always** add
|
|
89
|
-
type annotations, and always check new code with `uv run -- mypy --install-types --non-interactive script.py`.
|
|
89
|
+
type annotations, and always check new code with `env -u PYTHONPATH uv run -- mypy --install-types --non-interactive script.py`.
|
|
90
90
|
|
|
91
91
|
Use lower-case type annotations such as `tuple`, not upper-case type
|
|
92
92
|
annotations such as `Tuple`.
|
|
@@ -96,12 +96,13 @@ Use `Type | None` instead of `Optional[Type]`.
|
|
|
96
96
|
#### Python Testing
|
|
97
97
|
|
|
98
98
|
Tests are coordinated by `tox`, and include both `pytest` and `behave` tests.
|
|
99
|
-
To run the full test suite, execute `uv run -- tox`.
|
|
99
|
+
To run the full test suite, execute `env -u PYTHONPATH uv run -- tox`.
|
|
100
100
|
|
|
101
101
|
#### Python Compatibility
|
|
102
102
|
|
|
103
|
-
Use Python features available from Python 3.
|
|
104
|
-
Compatibility with Python 3.9 is not needed.
|
|
103
|
+
Use Python features available from Python 3.11 through Python 3.14.
|
|
104
|
+
Compatibility with Python 3.9 is not needed. Compatibility with Python
|
|
105
|
+
3.10 is not needed.
|
|
105
106
|
|
|
106
107
|
#### Python Style
|
|
107
108
|
|
|
@@ -113,9 +114,9 @@ from existing code.
|
|
|
113
114
|
#### Python Environment
|
|
114
115
|
|
|
115
116
|
* Package manager: `uv` (not pip)
|
|
116
|
-
* Formatter: `uv run -- ruff format`
|
|
117
|
-
* Linter: `uv run -- ruff check`
|
|
118
|
-
* Type checker: `uv run -- mypy --install-types --non-interactive`
|
|
117
|
+
* Formatter: `env -u PYTHONPATH uv run -- ruff format`
|
|
118
|
+
* Linter: `env -u PYTHONPATH uv run -- ruff check`
|
|
119
|
+
* Type checker: `env -u PYTHONPATH uv run -- mypy --install-types --non-interactive`
|
|
119
120
|
|
|
120
121
|
### Git Workflows
|
|
121
122
|
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Development Guide
|
|
2
|
+
|
|
3
|
+
This is a guide for developers who would like to contribute to the project.
|
|
4
|
+
|
|
5
|
+
If you're interested in contributing to mycli, thank you. We'd love your help!
|
|
6
|
+
You'll always get credit and appreciation for your work.
|
|
7
|
+
|
|
8
|
+
## GitHub Workflow
|
|
9
|
+
|
|
10
|
+
1. [Fork the repository](https://github.com/dbcli/mycli) on GitHub.
|
|
11
|
+
|
|
12
|
+
2. Clone your fork locally:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
git clone <url-for-your-fork>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
3. Add the official repository (`upstream`) as a remote repository:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
git remote add upstream git@github.com:dbcli/mycli.git
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
4. Once you have added upstream, the following command will pull the latest changes to your local `main`:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
git pull upstream main
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
5. Set up [uv](https://docs.astral.sh/uv/getting-started/installation/)
|
|
31
|
+
for development:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
cd mycli
|
|
35
|
+
uv sync --all-extras
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
We've just created a virtual environment and installed all the dependencies
|
|
39
|
+
and tools we need to work on mycli.
|
|
40
|
+
|
|
41
|
+
6. Create a branch for your bugfix or feature based off the `main` branch:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
git checkout -b <name-of-bugfix-or-feature> main
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
7. When your work is ready for the mycli team to review it, push your branch to your fork:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
git push origin <name-of-bugfix-or-feature>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
8. [Create a pull request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/)
|
|
54
|
+
on GitHub.
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
## Running Mycli with Changes
|
|
58
|
+
|
|
59
|
+
To run mycli with your local changes:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
uv run mycli
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## Running the Tests
|
|
67
|
+
|
|
68
|
+
While you work on mycli, it's important to run the tests to make sure your code
|
|
69
|
+
hasn't broken any existing functionality. To run the tests, just run:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
uv run tox
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Test Database Credentials
|
|
76
|
+
|
|
77
|
+
Some tests require a database connection to work. You can tell the tests which
|
|
78
|
+
credentials to use by setting the applicable environment variables:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
export PYTEST_HOST=localhost
|
|
82
|
+
export PYTEST_USER=mycli
|
|
83
|
+
export PYTEST_PASSWORD=myclirocks
|
|
84
|
+
export PYTEST_PORT=3306
|
|
85
|
+
export PYTEST_CHARSET=utf8mb4
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Since the default values are
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
export PYTEST_HOST=localhost
|
|
92
|
+
export PYTEST_USER=root
|
|
93
|
+
export PYTEST_PASSWORD=<no password>
|
|
94
|
+
export PYTEST_PORT=3306
|
|
95
|
+
export PYTEST_CHARSET=utf8mb4
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
for most cases you only need to set the values which differ from the defaults:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
export PYTEST_USER=mycli
|
|
102
|
+
export PYTEST_PASSWORD=myclirocks
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
If you would like to run the tests as a user with only the necessary privileges,
|
|
106
|
+
create a `mycli` user on your MySQL server and run the following GRANT statements:
|
|
107
|
+
|
|
108
|
+
```sql
|
|
109
|
+
GRANT ALL PRIVILEGES ON `mycli_%`.* TO 'mycli'@'localhost';
|
|
110
|
+
GRANT SELECT ON mysql.* TO 'mycli'@'localhost';
|
|
111
|
+
GRANT SELECT ON performance_schema.* TO 'mycli'@'localhost';
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Editor Tests
|
|
115
|
+
|
|
116
|
+
Some tests expect the program `ex` to be a symbolic link to `vim`.
|
|
117
|
+
|
|
118
|
+
In some systems (e.g. Arch Linux) `ex` is a symbolic link to `vi`, which will
|
|
119
|
+
change the output and therefore make some tests fail.
|
|
120
|
+
|
|
121
|
+
You can check this by running:
|
|
122
|
+
```bash
|
|
123
|
+
readlink -f $(which ex)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
# GitHub PR checklist
|
|
127
|
+
|
|
128
|
+
* add the contribution to `changelog.md`
|
|
129
|
+
* add your name to the `AUTHORS` file (or make sure it is already there)
|
|
130
|
+
* run
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
uv run ruff check && uv run ruff format && uv run mypy --install-types .
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
## Releasing a New Version of Mycli (For Maintainers)
|
|
138
|
+
|
|
139
|
+
We create a new [release](https://github.com/dbcli/mycli/releases) in GitHub. This triggers a GitHub Action which will
|
|
140
|
+
|
|
141
|
+
* run all the tests
|
|
142
|
+
* build a wheel and upload it to PyPI
|
|
143
|
+
* build a Docker image and upload it to ghcr.io
|
|
144
|
+
|
|
145
|
+
Steps to create a release:
|
|
146
|
+
|
|
147
|
+
* Update `changelog.md`, setting the release version and date at the top. Bump the feature version if there are new features in the changelog, otherwise only bump the patch version. Merge this change.
|
|
148
|
+
* Navigate to https://github.com/dbcli/mycli/releases/new .
|
|
149
|
+
* Press "Select Tag" and enter the new version number. It should be the same as in `changelog.md` but with a leading `v`. It should not already exist.
|
|
150
|
+
* Press "Generate Release Notes", which will fill in the notes and the title.
|
|
151
|
+
* Sanity check the generated release notes.
|
|
152
|
+
* Press "Publish Release".
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mycli
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.26.0
|
|
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
|
|
@@ -15,7 +15,6 @@ Classifier: Intended Audience :: Science/Research
|
|
|
15
15
|
Classifier: Operating System :: OS Independent
|
|
16
16
|
Classifier: Programming Language :: Python
|
|
17
17
|
Classifier: Programming Language :: Python :: 3
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.13
|
|
@@ -24,7 +23,7 @@ Classifier: Programming Language :: SQL
|
|
|
24
23
|
Classifier: Topic :: Database
|
|
25
24
|
Classifier: Topic :: Database :: Front-Ends
|
|
26
25
|
Classifier: Topic :: Software Development
|
|
27
|
-
Requires-Python: >=3.
|
|
26
|
+
Requires-Python: >=3.11
|
|
28
27
|
Description-Content-Type: text/markdown
|
|
29
28
|
License-File: LICENSE.txt
|
|
30
29
|
License-File: AUTHORS.md
|
|
@@ -33,7 +32,7 @@ Requires-Dist: clickdc~=0.1.1
|
|
|
33
32
|
Requires-Dist: cryptography~=50.0.1
|
|
34
33
|
Requires-Dist: Pygments~=2.21.0
|
|
35
34
|
Requires-Dist: prompt_toolkit<4.0.0,>=3.0.41
|
|
36
|
-
Requires-Dist: PyMySQL~=1.
|
|
35
|
+
Requires-Dist: PyMySQL~=1.2.3
|
|
37
36
|
Requires-Dist: sqlparse~=0.6.0
|
|
38
37
|
Requires-Dist: sqlglot~=30.17.0
|
|
39
38
|
Requires-Dist: sqlglotc~=30.17.0
|
|
@@ -72,8 +71,9 @@ Dynamic: license-file
|
|
|
72
71
|
|
|
73
72
|
# mycli
|
|
74
73
|
|
|
75
|
-
[](https://github.com/dbcli/mycli/actions/workflows/ci.yml)
|
|
75
|
+
[](https://pypi.org/project/mycli/)
|
|
76
|
+
[](https://github.com/dbcli/mycli/blob/main/LICENSE.txt)
|
|
77
77
|
|
|
78
78
|
Rich MySQL terminal client with auto-completion, syntax highlighting, and dataframes.
|
|
79
79
|
|
|
@@ -315,7 +315,7 @@ Thanks to [PyMysql](https://github.com/PyMySQL/PyMySQL) for a pure Python adapte
|
|
|
315
315
|
# Compatibility
|
|
316
316
|
|
|
317
317
|
Mycli is tested on macOS (full), Linux (full), Windows (partial), and WSL
|
|
318
|
-
(partial), and requires Python 3.
|
|
318
|
+
(partial), and requires Python 3.11 or better.
|
|
319
319
|
|
|
320
320
|
To connect to MySQL versions earlier than 5.5, you may need to set the
|
|
321
321
|
following in `~/.myclirc`:
|
|
@@ -336,3 +336,11 @@ Common topics include:
|
|
|
336
336
|
- [Configuring mycli](https://mycli.net/config)
|
|
337
337
|
- [Using/Disabling the pager](https://mycli.net/pager)
|
|
338
338
|
- [Syntax colors](https://mycli.net/syntax)
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
# License
|
|
342
|
+
|
|
343
|
+
Mycli is Open Source Software provided under the [BSD 3-Clause License](LICENSE.txt).
|
|
344
|
+
|
|
345
|
+
The Mycli Docker image and git repository include a copy of the [employees sample database](https://dev.mysql.com/doc/employee/en/)
|
|
346
|
+
provided by Oracle under the [Creative Commons Attribution-Share Alike 3.0 Unported License](https://dev.mysql.com/doc/employee/en/employees-license.html).
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# mycli
|
|
2
2
|
|
|
3
|
-
[](https://github.com/dbcli/mycli/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/mycli/)
|
|
5
|
+
[](https://github.com/dbcli/mycli/blob/main/LICENSE.txt)
|
|
5
6
|
|
|
6
7
|
Rich MySQL terminal client with auto-completion, syntax highlighting, and dataframes.
|
|
7
8
|
|
|
@@ -243,7 +244,7 @@ Thanks to [PyMysql](https://github.com/PyMySQL/PyMySQL) for a pure Python adapte
|
|
|
243
244
|
# Compatibility
|
|
244
245
|
|
|
245
246
|
Mycli is tested on macOS (full), Linux (full), Windows (partial), and WSL
|
|
246
|
-
(partial), and requires Python 3.
|
|
247
|
+
(partial), and requires Python 3.11 or better.
|
|
247
248
|
|
|
248
249
|
To connect to MySQL versions earlier than 5.5, you may need to set the
|
|
249
250
|
following in `~/.myclirc`:
|
|
@@ -264,3 +265,11 @@ Common topics include:
|
|
|
264
265
|
- [Configuring mycli](https://mycli.net/config)
|
|
265
266
|
- [Using/Disabling the pager](https://mycli.net/pager)
|
|
266
267
|
- [Syntax colors](https://mycli.net/syntax)
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
# License
|
|
271
|
+
|
|
272
|
+
Mycli is Open Source Software provided under the [BSD 3-Clause License](LICENSE.txt).
|
|
273
|
+
|
|
274
|
+
The Mycli Docker image and git repository include a copy of the [employees sample database](https://dev.mysql.com/doc/employee/en/)
|
|
275
|
+
provided by Oracle under the [Creative Commons Attribution-Share Alike 3.0 Unported License](https://dev.mysql.com/doc/employee/en/employees-license.html).
|