mycli 2.25.1__tar.gz → 2.25.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.
Files changed (207) hide show
  1. {mycli-2.25.1 → mycli-2.25.3}/.github/workflows/ci.yml +26 -5
  2. {mycli-2.25.1 → mycli-2.25.3}/.github/workflows/publish.yml +8 -1
  3. mycli-2.25.3/AGENTS.md +143 -0
  4. mycli-2.25.3/AUTHORS.md +1 -0
  5. {mycli-2.25.1/mycli.egg-info → mycli-2.25.3}/PKG-INFO +43 -30
  6. {mycli-2.25.1 → mycli-2.25.3}/README.md +41 -28
  7. mycli-2.25.3/SPONSORS.md +1 -0
  8. {mycli-2.25.1 → mycli-2.25.3}/changelog.md +28 -0
  9. mycli-2.25.1/doc/key_bindings.rst → mycli-2.25.3/doc/key_bindings.md +16 -44
  10. mycli-2.25.3/doc/screenshots/polars_describe.png +0 -0
  11. mycli-2.25.3/doc/screenshots/polars_group_by.png +0 -0
  12. mycli-2.25.3/doc/screenshots/polars_histogram.png +0 -0
  13. mycli-2.25.3/doc/screenshots/polars_pivot.png +0 -0
  14. {mycli-2.25.1 → mycli-2.25.3}/doc/transforms.md +30 -11
  15. {mycli-2.25.1 → mycli-2.25.3}/docker/resources/test_db-1.0.7.tar.gz +1 -1
  16. {mycli-2.25.1 → mycli-2.25.3/mycli.egg-info}/PKG-INFO +43 -30
  17. {mycli-2.25.1 → mycli-2.25.3}/mycli.egg-info/SOURCES.txt +7 -4
  18. {mycli-2.25.1 → mycli-2.25.3}/mycli.egg-info/scm_file_list.json +7 -4
  19. mycli-2.25.3/mycli.egg-info/scm_version.json +8 -0
  20. mycli-2.25.1/AGENTS.md +0 -143
  21. mycli-2.25.1/AUTHORS.rst +0 -3
  22. mycli-2.25.1/SPONSORS.rst +0 -3
  23. mycli-2.25.1/doc/screenshots/total_histogram.png +0 -0
  24. mycli-2.25.1/mycli.egg-info/scm_version.json +0 -8
  25. {mycli-2.25.1 → mycli-2.25.3}/.git-blame-ignore-revs +0 -0
  26. {mycli-2.25.1 → mycli-2.25.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  27. {mycli-2.25.1 → mycli-2.25.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  28. {mycli-2.25.1 → mycli-2.25.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  29. {mycli-2.25.1 → mycli-2.25.3}/.github/dependabot.yml +0 -0
  30. {mycli-2.25.1 → mycli-2.25.3}/.github/workflows/lint.yml +0 -0
  31. {mycli-2.25.1 → mycli-2.25.3}/.github/workflows/typecheck.yml +0 -0
  32. {mycli-2.25.1 → mycli-2.25.3}/.gitignore +0 -0
  33. {mycli-2.25.1 → mycli-2.25.3}/CONTRIBUTING.md +0 -0
  34. {mycli-2.25.1 → mycli-2.25.3}/LICENSE.txt +0 -0
  35. {mycli-2.25.1 → mycli-2.25.3}/MANIFEST.in +0 -0
  36. {mycli-2.25.1 → mycli-2.25.3}/doc/llm.md +0 -0
  37. {mycli-2.25.1 → mycli-2.25.3}/doc/screenshots/main.gif +0 -0
  38. {mycli-2.25.1 → mycli-2.25.3}/doc/screenshots/tables.png +0 -0
  39. {mycli-2.25.1 → mycli-2.25.3}/docker/Dockerfile +0 -0
  40. {mycli-2.25.1 → mycli-2.25.3}/mycli/AUTHORS +0 -0
  41. {mycli-2.25.1 → mycli-2.25.3}/mycli/SPONSORS +0 -0
  42. {mycli-2.25.1 → mycli-2.25.3}/mycli/TIPS +0 -0
  43. {mycli-2.25.1 → mycli-2.25.3}/mycli/__init__.py +0 -0
  44. {mycli-2.25.1 → mycli-2.25.3}/mycli/app_state.py +0 -0
  45. {mycli-2.25.1 → mycli-2.25.3}/mycli/boundary_tunnel.py +0 -0
  46. {mycli-2.25.1 → mycli-2.25.3}/mycli/cli_runner.py +0 -0
  47. {mycli-2.25.1 → mycli-2.25.3}/mycli/clibuffer.py +0 -0
  48. {mycli-2.25.1 → mycli-2.25.3}/mycli/client.py +0 -0
  49. {mycli-2.25.1 → mycli-2.25.3}/mycli/client_commands.py +0 -0
  50. {mycli-2.25.1 → mycli-2.25.3}/mycli/client_connection.py +0 -0
  51. {mycli-2.25.1 → mycli-2.25.3}/mycli/client_query.py +0 -0
  52. {mycli-2.25.1 → mycli-2.25.3}/mycli/clistyle.py +0 -0
  53. {mycli-2.25.1 → mycli-2.25.3}/mycli/clitoolbar.py +0 -0
  54. {mycli-2.25.1 → mycli-2.25.3}/mycli/compat.py +0 -0
  55. {mycli-2.25.1 → mycli-2.25.3}/mycli/completion_refresher.py +0 -0
  56. {mycli-2.25.1 → mycli-2.25.3}/mycli/config.py +0 -0
  57. {mycli-2.25.1 → mycli-2.25.3}/mycli/constants.py +0 -0
  58. {mycli-2.25.1 → mycli-2.25.3}/mycli/key_bindings.py +0 -0
  59. {mycli-2.25.1 → mycli-2.25.3}/mycli/keyring_utils.py +0 -0
  60. {mycli-2.25.1 → mycli-2.25.3}/mycli/kubectl_tunnel.py +0 -0
  61. {mycli-2.25.1 → mycli-2.25.3}/mycli/lexer.py +0 -0
  62. {mycli-2.25.1 → mycli-2.25.3}/mycli/macos_keychain.py +0 -0
  63. {mycli-2.25.1 → mycli-2.25.3}/mycli/main.py +0 -0
  64. {mycli-2.25.1 → mycli-2.25.3}/mycli/main_modes/batch.py +0 -0
  65. {mycli-2.25.1 → mycli-2.25.3}/mycli/main_modes/checkup.py +0 -0
  66. {mycli-2.25.1 → mycli-2.25.3}/mycli/main_modes/completions.py +0 -0
  67. {mycli-2.25.1 → mycli-2.25.3}/mycli/main_modes/execute.py +0 -0
  68. {mycli-2.25.1 → mycli-2.25.3}/mycli/main_modes/list_dsn.py +0 -0
  69. {mycli-2.25.1 → mycli-2.25.3}/mycli/main_modes/repl.py +0 -0
  70. {mycli-2.25.1 → mycli-2.25.3}/mycli/myclirc +0 -0
  71. {mycli-2.25.1 → mycli-2.25.3}/mycli/output.py +0 -0
  72. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/__init__.py +0 -0
  73. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/batch_utils.py +0 -0
  74. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/cli_utils.py +0 -0
  75. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/completion_engine.py +0 -0
  76. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/filepaths.py +0 -0
  77. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/hybrid_redirection.py +0 -0
  78. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/interactive_utils.py +0 -0
  79. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/key_binding_utils.py +0 -0
  80. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/polars_completion.py +0 -0
  81. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/polars_transform.py +0 -0
  82. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/ptoolkit/__init__.py +0 -0
  83. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/ptoolkit/fzf.py +0 -0
  84. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/ptoolkit/history.py +0 -0
  85. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/ptoolkit/utils.py +0 -0
  86. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/special/__init__.py +0 -0
  87. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/special/dbcommands.py +0 -0
  88. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/special/delimitercommand.py +0 -0
  89. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/special/dsn_aliases.py +0 -0
  90. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/special/favoritequeries.py +0 -0
  91. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/special/iocommands.py +0 -0
  92. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/special/llm.py +0 -0
  93. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/special/main.py +0 -0
  94. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/special/source.py +0 -0
  95. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/special/utils.py +0 -0
  96. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/sql_utils.py +0 -0
  97. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/sqlresult.py +0 -0
  98. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/string_utils.py +0 -0
  99. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/tabular_output/__init__.py +0 -0
  100. {mycli-2.25.1 → mycli-2.25.3}/mycli/packages/tabular_output/sql_format.py +0 -0
  101. {mycli-2.25.1 → mycli-2.25.3}/mycli/password_sources.py +0 -0
  102. {mycli-2.25.1 → mycli-2.25.3}/mycli/resources/completions/bash/mycli +0 -0
  103. {mycli-2.25.1 → mycli-2.25.3}/mycli/resources/completions/fish/mycli.fish +0 -0
  104. {mycli-2.25.1 → mycli-2.25.3}/mycli/resources/completions/zsh/_mycli +0 -0
  105. {mycli-2.25.1 → mycli-2.25.3}/mycli/schema_prefetcher.py +0 -0
  106. {mycli-2.25.1 → mycli-2.25.3}/mycli/sqlcompleter.py +0 -0
  107. {mycli-2.25.1 → mycli-2.25.3}/mycli/sqlexecute.py +0 -0
  108. {mycli-2.25.1 → mycli-2.25.3}/mycli/ssh_tunnel.py +0 -0
  109. {mycli-2.25.1 → mycli-2.25.3}/mycli/types.py +0 -0
  110. {mycli-2.25.1 → mycli-2.25.3}/mycli/vault.py +0 -0
  111. {mycli-2.25.1 → mycli-2.25.3}/mycli.egg-info/dependency_links.txt +0 -0
  112. {mycli-2.25.1 → mycli-2.25.3}/mycli.egg-info/entry_points.txt +0 -0
  113. {mycli-2.25.1 → mycli-2.25.3}/mycli.egg-info/requires.txt +0 -0
  114. {mycli-2.25.1 → mycli-2.25.3}/mycli.egg-info/top_level.txt +0 -0
  115. {mycli-2.25.1 → mycli-2.25.3}/pyproject.toml +0 -0
  116. {mycli-2.25.1 → mycli-2.25.3}/setup.cfg +0 -0
  117. {mycli-2.25.1 → mycli-2.25.3}/test/__init__.py +0 -0
  118. {mycli-2.25.1 → mycli-2.25.3}/test/features/__init__.py +0 -0
  119. {mycli-2.25.1 → mycli-2.25.3}/test/features/auto_vertical.feature +0 -0
  120. {mycli-2.25.1 → mycli-2.25.3}/test/features/basic_commands.feature +0 -0
  121. {mycli-2.25.1 → mycli-2.25.3}/test/features/connection.feature +0 -0
  122. {mycli-2.25.1 → mycli-2.25.3}/test/features/crud_database.feature +0 -0
  123. {mycli-2.25.1 → mycli-2.25.3}/test/features/crud_table.feature +0 -0
  124. {mycli-2.25.1 → mycli-2.25.3}/test/features/db_utils.py +0 -0
  125. {mycli-2.25.1 → mycli-2.25.3}/test/features/environment.py +0 -0
  126. {mycli-2.25.1 → mycli-2.25.3}/test/features/fixture_data/help_commands.txt +0 -0
  127. {mycli-2.25.1 → mycli-2.25.3}/test/features/fixture_utils.py +0 -0
  128. {mycli-2.25.1 → mycli-2.25.3}/test/features/iocommands.feature +0 -0
  129. {mycli-2.25.1 → mycli-2.25.3}/test/features/named_queries.feature +0 -0
  130. {mycli-2.25.1 → mycli-2.25.3}/test/features/specials.feature +0 -0
  131. {mycli-2.25.1 → mycli-2.25.3}/test/features/steps/__init__.py +0 -0
  132. {mycli-2.25.1 → mycli-2.25.3}/test/features/steps/auto_vertical.py +0 -0
  133. {mycli-2.25.1 → mycli-2.25.3}/test/features/steps/basic_commands.py +0 -0
  134. {mycli-2.25.1 → mycli-2.25.3}/test/features/steps/connection.py +0 -0
  135. {mycli-2.25.1 → mycli-2.25.3}/test/features/steps/crud_database.py +0 -0
  136. {mycli-2.25.1 → mycli-2.25.3}/test/features/steps/crud_table.py +0 -0
  137. {mycli-2.25.1 → mycli-2.25.3}/test/features/steps/iocommands.py +0 -0
  138. {mycli-2.25.1 → mycli-2.25.3}/test/features/steps/named_queries.py +0 -0
  139. {mycli-2.25.1 → mycli-2.25.3}/test/features/steps/specials.py +0 -0
  140. {mycli-2.25.1 → mycli-2.25.3}/test/features/steps/utils.py +0 -0
  141. {mycli-2.25.1 → mycli-2.25.3}/test/features/steps/wrappers.py +0 -0
  142. {mycli-2.25.1 → mycli-2.25.3}/test/features/wrappager.py +0 -0
  143. {mycli-2.25.1 → mycli-2.25.3}/test/myclirc +0 -0
  144. {mycli-2.25.1 → mycli-2.25.3}/test/mylogin.cnf +0 -0
  145. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/conftest.py +0 -0
  146. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_app_state.py +0 -0
  147. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_bash_completion.py +0 -0
  148. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_batch_utils.py +0 -0
  149. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_boundary_tunnel.py +0 -0
  150. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_checkup.py +0 -0
  151. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_cli_runner.py +0 -0
  152. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_cli_utils.py +0 -0
  153. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_clibuffer.py +0 -0
  154. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_client.py +0 -0
  155. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_client_commands.py +0 -0
  156. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_client_connection.py +0 -0
  157. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_client_query.py +0 -0
  158. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_clistyle.py +0 -0
  159. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_clitoolbar.py +0 -0
  160. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_completer_use_switch.py +0 -0
  161. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_completion_engine.py +0 -0
  162. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_completion_refresher.py +0 -0
  163. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_config.py +0 -0
  164. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_delimitercommand.py +0 -0
  165. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_dsn_aliases.py +0 -0
  166. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_favoritequeries.py +0 -0
  167. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_filepaths.py +0 -0
  168. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_fish_completion.py +0 -0
  169. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_hybrid_redirection.py +0 -0
  170. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_interactive_utils.py +0 -0
  171. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_key_binding_utils.py +0 -0
  172. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_key_bindings.py +0 -0
  173. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_keyring_utils.py +0 -0
  174. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_kubectl_tunnel.py +0 -0
  175. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_macos_keychain.py +0 -0
  176. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_main.py +0 -0
  177. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_main_modes_batch.py +0 -0
  178. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_main_modes_execute.py +0 -0
  179. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_main_modes_list_dsn.py +0 -0
  180. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_main_modes_repl.py +0 -0
  181. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_naive_completion.py +0 -0
  182. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_output.py +0 -0
  183. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_password_sources.py +0 -0
  184. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_polars_completion.py +0 -0
  185. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_polars_transform.py +0 -0
  186. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_ptoolkit_fzf.py +0 -0
  187. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_ptoolkit_history.py +0 -0
  188. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_ptoolkit_utils.py +0 -0
  189. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_schema_prefetcher.py +0 -0
  190. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_smart_completion_public_schema_only.py +0 -0
  191. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_special_dbcommands.py +0 -0
  192. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_special_init.py +0 -0
  193. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_special_iocommands.py +0 -0
  194. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_special_llm.py +0 -0
  195. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_special_main.py +0 -0
  196. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_special_source.py +0 -0
  197. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_special_utils.py +0 -0
  198. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_sql_utils.py +0 -0
  199. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_sqlcompleter.py +0 -0
  200. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_sqlexecute.py +0 -0
  201. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_sqlresult.py +0 -0
  202. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_ssh_tunnel.py +0 -0
  203. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_string_utils.py +0 -0
  204. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_tabular_output.py +0 -0
  205. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_vault.py +0 -0
  206. {mycli-2.25.1 → mycli-2.25.3}/test/pytests/test_zsh_completion.py +0 -0
  207. {mycli-2.25.1 → mycli-2.25.3}/test/utils.py +0 -0
@@ -19,7 +19,7 @@ jobs:
19
19
  strategy:
20
20
  fail-fast: false
21
21
  matrix:
22
- python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
22
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
23
23
 
24
24
  steps:
25
25
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -144,7 +144,7 @@ jobs:
144
144
  uv run -- coverage report -m --sort=Miss --skip-covered --skip-empty
145
145
 
146
146
  tests-wsl:
147
- name: Tests WSL
147
+ name: Tests WSL (3.14)
148
148
  runs-on: windows-latest
149
149
 
150
150
  steps:
@@ -214,7 +214,7 @@ jobs:
214
214
  uv run --python 3.14 -- coverage report -m --sort=Miss --skip-covered --skip-empty
215
215
 
216
216
  test-no-extras:
217
- name: Tests Without Extras
217
+ name: Tests Without Extras (3.14)
218
218
  runs-on: ubuntu-latest
219
219
 
220
220
  steps:
@@ -250,13 +250,34 @@ jobs:
250
250
  run: |
251
251
  uv run tox -e py3.14
252
252
 
253
- docker-build:
254
- name: Build Docker Image
253
+ docker-x86-build:
254
+ name: Build x86 Docker Image
255
255
  runs-on: ubuntu-latest
256
256
 
257
257
  permissions:
258
258
  contents: read
259
259
 
260
+ # simpler than the steps in publish.yml, because we don't do the slow buildx multiarch
261
+ steps:
262
+ - name: Checkout repository
263
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
264
+
265
+ - name: Build Docker image
266
+ id: build
267
+ uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
268
+ with:
269
+ context: .
270
+ file: docker/Dockerfile
271
+ push: false
272
+
273
+ docker-arm-build:
274
+ name: Build ARM Docker Image
275
+ runs-on: ubuntu-24.04-arm
276
+
277
+ permissions:
278
+ contents: read
279
+
280
+ # simpler than the steps in publish.yml, because we don't do the slow buildx multiarch
260
281
  steps:
261
282
  - name: Checkout repository
262
283
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -28,7 +28,7 @@ jobs:
28
28
 
29
29
  strategy:
30
30
  matrix:
31
- python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
31
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
32
32
 
33
33
  steps:
34
34
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -277,6 +277,8 @@ jobs:
277
277
  needs: [build]
278
278
  environment: release
279
279
 
280
+ # some of these permissions are probably not needed since attestations
281
+ # were removed
280
282
  permissions:
281
283
  contents: read
282
284
  packages: write
@@ -295,6 +297,7 @@ jobs:
295
297
  username: ${{ github.actor }}
296
298
  password: ${{ secrets.GITHUB_TOKEN }}
297
299
 
300
+ # should be needed for multi-arch images
298
301
  - name: Set up Docker Buildx
299
302
  id: buildx
300
303
  uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
@@ -305,6 +308,8 @@ jobs:
305
308
  with:
306
309
  images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
307
310
  env:
311
+ # despite this setting, annotations only seem to appear at the index level
312
+ # on "docker buildx imagetools inspect"
308
313
  DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index
309
314
 
310
315
  - name: Build and push Docker image
@@ -314,6 +319,8 @@ jobs:
314
319
  context: .
315
320
  file: docker/Dockerfile
316
321
  push: true
322
+ # the linux/arm64 arch will be very slow to build, so it is only made for
323
+ # publication, not testing
317
324
  platforms: linux/amd64,linux/arm64
318
325
  tags: ${{ steps.meta.outputs.tags }}
319
326
  labels: ${{ steps.meta.outputs.labels }}
mycli-2.25.3/AGENTS.md ADDED
@@ -0,0 +1,143 @@
1
+ # Mycli
2
+
3
+ A command line client for MySQL with auto-completion and syntax highlighting.
4
+
5
+ ## Project Structure
6
+
7
+ / # repository root
8
+ ├── .github/ # GitHub Actions and configuration
9
+ ├── pyproject.toml # project configuration
10
+ ├── doc/ # documentation
11
+ ├── mycli/ # application source
12
+ ├── mycli/__init__.py # provides version number
13
+ ├── mycli/app_state.py # `AppStateMixin` application state mixin and related functions
14
+ ├── mycli/boundary_tunnel.py # connection over Boundary tunnel
15
+ ├── mycli/cli_runner.py # connects and dispatches main modes based on CLI arguments
16
+ ├── mycli/clibuffer.py # prompt_toolkit buffer utilities
17
+ ├── mycli/client_commands.py # special commands which must be registered separately
18
+ ├── mycli/client_connection.py # `ClientConnectionMixin` mixin for establishing the database connection
19
+ ├── mycli/client_query.py # `ClientQueryMixin` mixin for running queries and refreshing completions
20
+ ├── mycli/client.py # the `MyCli` "god class"
21
+ ├── mycli/clistyle.py # prompt_toolkit style utilities
22
+ ├── mycli/clitoolbar.py # prompt_toolkit toolbar utilities
23
+ ├── mycli/compat.py # OS compatibility helpers
24
+ ├── mycli/completion_refresher.py # populates a `SQLCompleter` object in a background thread
25
+ ├── mycli/config.py # configuration file readers and utilities
26
+ ├── mycli/constants.py # shared constants
27
+ ├── mycli/key_bindings.py # prompt_toolkit key binding utilities
28
+ ├── mycli/keyring_utils.py # saved credential utilities
29
+ ├── mycli/kubectl_tunnel.py # connection over kubectl tunnel
30
+ ├── mycli/lexer.py # extends `MySqlLexer` from Pygments
31
+ ├── mycli/macos_keychain.py # macOS Keychain credentials preserving access controls
32
+ ├── mycli/main.py # processes CLI arguments
33
+ ├── mycli/main_modes/ # main execution paths
34
+ ├── mycli/main_modes/batch.py # `--batch` mode
35
+ ├── mycli/main_modes/checkup.py # `--checkup` mode
36
+ ├── mycli/main_modes/completions.py # `--completions` mode
37
+ ├── mycli/main_modes/execute.py # `--execute` mode
38
+ ├── mycli/main_modes/list_dsn.py # `--list-dsn` mode
39
+ ├── mycli/main_modes/repl.py # interactive REPL mode
40
+ ├── mycli/myclirc # project-level configuration file
41
+ ├── mycli/output.py # `OutputMixin` mixin for feedback and output of query results
42
+ ├── mycli/packages/ # application packages
43
+ ├── mycli/packages/batch_utils.py # utilities for `--batch` mode
44
+ ├── mycli/packages/cli_utils.py # utilities for parsing CLI arguments
45
+ ├── mycli/packages/completion_engine.py # implementation of completion suggestions
46
+ ├── mycli/packages/filepaths.py # utilities for files, including completion suggestions
47
+ ├── mycli/packages/hybrid_redirection.py # implementation of shell-style redirects
48
+ ├── mycli/packages/interactive_utils.py # utilities for confirming on destructive statements
49
+ ├── mycli/packages/key_binding_utils.py # handlers for key bindings and related special commands
50
+ ├── mycli/packages/polars_completion.py # completions for `.|` transforms
51
+ ├── mycli/packages/polars_transform.py # implements `.|` transforms
52
+ ├── mycli/packages/ptoolkit/ # extends prompt_toolkit
53
+ ├── mycli/packages/special/ # implementation of mycli special commands
54
+ ├── mycli/packages/sql_utils.py # utilities for parsing SQL statements
55
+ ├── mycli/packages/sqlresult.py # the `SQLResult` dataclass for holding responses
56
+ ├── mycli/packages/string_utils.py # generic string utilities
57
+ ├── mycli/packages/tabular_output/ # extends cli_helper with additional output formats
58
+ ├── mycli/password_sources.py # password sources and precedence
59
+ ├── mycli/resources/completions/ # shell completions for CLI interface
60
+ ├── mycli/ssh_tunnel.py # connecting over a tunnel with `--ssh-jump`
61
+ ├── mycli/schema_prefetcher.py # background prefetcher for multi-schema auto-completion
62
+ ├── mycli/sqlcompleter.py # offers SQL completions
63
+ ├── mycli/sqlexecute.py # runs SQL queries
64
+ ├── mycli/types.py # shared types
65
+ ├── mycli/vault.py # Vault integration
66
+ ├── test/features/ # behave tests
67
+ ├── test/myclirc # mycli configuration used for tests
68
+ ├── test/mylogin.cnf # `mylogin.cnf` example used for tests
69
+ ├── test/pytests/ # pytest tests
70
+ ├── test/pytests/conftest.py # pytest configuration
71
+ └── test/utils.py # shared utilities for tests
72
+
73
+ ## Development
74
+
75
+ ### Python
76
+
77
+ #### Python Dependency Management
78
+
79
+ This repo uses `uv` for dependency management. **Always** prefix Python
80
+ commands with `uv run`. Example:
81
+
82
+ ```bash
83
+ uv run -- python script.py
84
+ ```
85
+
86
+ #### Python Typing
87
+
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`.
90
+
91
+ Use lower-case type annotations such as `tuple`, not upper-case type
92
+ annotations such as `Tuple`.
93
+
94
+ Use `Type | None` instead of `Optional[Type]`.
95
+
96
+ #### Python Testing
97
+
98
+ Tests are coordinated by `tox`, and include both `pytest` and `behave` tests.
99
+ To run the full test suite, execute `uv run -- tox`.
100
+
101
+ #### Python Compatibility
102
+
103
+ Use Python features available from Python 3.10 through Python 3.14.
104
+ Compatibility with Python 3.9 is not needed.
105
+
106
+ #### Python Style
107
+
108
+ Import style: prefer `from package import name` over `import package.name as name`.
109
+
110
+ Quoting style: prefer single quotes for new code, but do not remove double quotes
111
+ from existing code.
112
+
113
+ #### Python Environment
114
+
115
+ * 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`
119
+
120
+ ### Git Workflows
121
+
122
+ #### Git Commit Messages
123
+
124
+ * Use the present tense.
125
+ * Keep the first line under 50 characters in length.
126
+ * Keep the second line blank.
127
+ * Keep all other lines under 72 characters in length.
128
+ * Reference issue numbers when available.
129
+
130
+ #### Generating PRs
131
+
132
+ When generating a PR, follow the instructions in `.github/PULL_REQUEST_TEMPLATE.md`:
133
+
134
+ * Add new author names to `mycli/AUTHORS`.
135
+ * Add a new entry to `changelog.md`.
136
+
137
+ ### Code Comments
138
+
139
+ Keep comments concise and direct. Use full sentences, ending with a period.
140
+
141
+ ### See Also
142
+
143
+ See also the file `CONTRIBUTING.md`.
@@ -0,0 +1 @@
1
+ See [AUTHORS](mycli/AUTHORS)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mycli
3
- Version: 2.25.1
3
+ Version: 2.25.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
@@ -27,7 +27,7 @@ Classifier: Topic :: Software Development
27
27
  Requires-Python: >=3.10
28
28
  Description-Content-Type: text/markdown
29
29
  License-File: LICENSE.txt
30
- License-File: AUTHORS.rst
30
+ License-File: AUTHORS.md
31
31
  Requires-Dist: click~=8.5.0
32
32
  Requires-Dist: clickdc~=0.1.1
33
33
  Requires-Dist: cryptography~=50.0.1
@@ -111,41 +111,52 @@ Release 2.0.0 has [breaking changes](https://github.com/dbcli/mycli/blob/v2.0.0/
111
111
  If you already know how to install Python packages, then you can install mycli
112
112
  via `pip`. This package is always up to date.
113
113
 
114
- You might need `sudo` on Linux.
115
-
116
114
  ```bash
117
115
  pip install --upgrade 'mycli[all]'
118
116
  ```
119
117
 
120
- or, on macOS (`pygments` is optional but recommended):
118
+ or, on macOS (`pygments` is optional):
121
119
 
122
120
  ```bash
123
121
  brew update && brew install mycli pygments
124
122
  ```
125
123
 
126
- or, on Debian or Ubuntu (`fzf` and `pygments` are optional but recommended):
124
+ or, on Debian or Ubuntu (`fzf` and `pygments` are optional):
127
125
 
128
126
  ```bash
129
- sudo apt-get install mycli fzf python3-pygments
127
+ apt-get install mycli fzf python3-pygments
130
128
  ```
131
129
 
132
- # Usage
130
+ ## Try Without Installing: uv
133
131
 
134
- See
132
+ ```bash
133
+ uv tool run 'mycli[all]' --help
134
+ ```
135
+
136
+ ## Try Without Installing: Docker
137
+
138
+ The images on Dockerhub are out of date! [ghcr.io](https://github.com/dbcli/mycli/pkgs/container/mycli) images are preferred. A sample database
139
+ is included:
135
140
 
136
141
  ```bash
137
- mycli --help
142
+ docker run --pull=always -it ghcr.io/dbcli/mycli:latest
143
+ ```
144
+
145
+ The same image works with macOS [container](https://github.com/apple/container):
146
+
147
+ ```bash
148
+ container run -it ghcr.io/dbcli/mycli:latest
138
149
  ```
139
150
 
140
151
  # Features
141
152
 
142
153
  * Auto-completion as you type for SQL keywords as well as tables, views, columns, enums, and more!
143
- * Fuzzy history search using [fzf](https://github.com/junegunn/fzf).
144
- * Output explorer using [fzf](https://github.com/junegunn/fzf) or other tools.
145
- * Syntax highlighting using [Pygments](https://pygments.org/).
146
154
  * Smart-completion suggests context-sensitive completion:
147
155
  - `SELECT * FROM `<kbd>tab</kbd> will only show table names.
148
156
  - `SELECT * FROM users WHERE `<kbd>tab</kbd> will only show column names.
157
+ * Fuzzy history search using [fzf](https://github.com/junegunn/fzf).
158
+ * Output explorer using [fzf](https://github.com/junegunn/fzf) or other tools.
159
+ * Syntax highlighting using [Pygments](https://pygments.org/).
149
160
  * Multiline queries.
150
161
  * Favorite queries with positional or named parameters using [Jinja](https://jinja.palletsprojects.com/en/stable/). Save a query using
151
162
  ```
@@ -156,8 +167,7 @@ mycli --help
156
167
  /f alias --key=value
157
168
  ```
158
169
  * Timing of SQL statements and table rendering.
159
- * Logging of every query and its results to a file (off by default).
160
- * Pretty printing of tabular data.
170
+ * Many output formats for tabular results.
161
171
  * Shell-style trailing redirects with `$>`, `$>>` and `$|` operators.
162
172
  * [Polars](https://pola.rs) dataframe [transforms and plots](https://github.com/dbcli/mycli/blob/main/doc/transforms.md) with `.|`, and Parquet saves with `.>`.
163
173
  * [Querying LLMs](https://www.mycli.net/llm) with context derived from your schema using `/llm`.
@@ -168,10 +178,19 @@ mycli --help
168
178
  Mycli creates a config file `~/.myclirc` on the first run; you can use the
169
179
  options in that file to configure the above features, and more.
170
180
 
171
- Some features are only exposed as [key bindings](https://github.com/dbcli/mycli/blob/main/doc/key_bindings.rst).
181
+ Some features are only exposed as [key bindings](https://github.com/dbcli/mycli/blob/main/doc/key_bindings.md).
182
+
183
+
184
+ # Usage
185
+
186
+ See
187
+
188
+ ```bash
189
+ mycli --help
190
+ ```
172
191
 
173
192
 
174
- # Contributions
193
+ # Contributing
175
194
 
176
195
  If you're interested in contributing to this project, first of all we would like
177
196
  to extend our heartfelt gratitude. We've written a small doc to describe how to
@@ -179,6 +198,7 @@ get mycli running in a development setup.
179
198
 
180
199
  https://github.com/dbcli/mycli/blob/main/CONTRIBUTING.md
181
200
 
201
+
182
202
  # Additional Install Instructions
183
203
 
184
204
  ## Shell Completions
@@ -203,8 +223,9 @@ loaded with `source`.
203
223
  ## Alternative Install Methods
204
224
 
205
225
  These are some alternative ways to install mycli that are not managed by our
206
- team but provided by OS package maintainers. OS packages could be considerably
207
- out of date.
226
+ team but provided by OS package maintainers.
227
+
228
+ **NOTE: OS packages could be considerably out of date.**
208
229
 
209
230
  If present, the `fzf` package can be used for fuzzy history search, and as an
210
231
  output "explorer" with the `\x` special command. `pygmentize` can be used for
@@ -227,7 +248,7 @@ using apt. The `fzf` and `python3-pygments` packages are optional but
227
248
  recommended:
228
249
 
229
250
  ```bash
230
- sudo apt-get install mycli fzf python3-pygments
251
+ apt-get install mycli fzf python3-pygments
231
252
  ```
232
253
 
233
254
  ### Fedora
@@ -236,15 +257,7 @@ Fedora has a package available for mycli; install it using dnf. The `fzf` and
236
257
  `python-pygments` packages are optional but recommended:
237
258
 
238
259
  ```bash
239
- sudo dnf install mycli fzf python-pygments
240
- ```
241
-
242
- ### Docker
243
-
244
- The images on Dockerhub are out of date. ghcr.io is preferred. Example:
245
-
246
- ```
247
- docker run --pull=always -it ghcr.io/dbcli/mycli:latest
260
+ dnf install mycli fzf python-pygments
248
261
  ```
249
262
 
250
263
  ### Windows
@@ -272,7 +285,7 @@ With WSL, you are probably using an Ubuntu distribution, in which case
272
285
  recommended dependencies can be installed by
273
286
 
274
287
  ```bash
275
- sudo apt-get install fzf python3-pygments
288
+ apt-get install fzf python3-pygments
276
289
  ```
277
290
 
278
291
  and mycli can be installed by `apt-get` or by `pip` (recommended):
@@ -39,41 +39,52 @@ Release 2.0.0 has [breaking changes](https://github.com/dbcli/mycli/blob/v2.0.0/
39
39
  If you already know how to install Python packages, then you can install mycli
40
40
  via `pip`. This package is always up to date.
41
41
 
42
- You might need `sudo` on Linux.
43
-
44
42
  ```bash
45
43
  pip install --upgrade 'mycli[all]'
46
44
  ```
47
45
 
48
- or, on macOS (`pygments` is optional but recommended):
46
+ or, on macOS (`pygments` is optional):
49
47
 
50
48
  ```bash
51
49
  brew update && brew install mycli pygments
52
50
  ```
53
51
 
54
- or, on Debian or Ubuntu (`fzf` and `pygments` are optional but recommended):
52
+ or, on Debian or Ubuntu (`fzf` and `pygments` are optional):
55
53
 
56
54
  ```bash
57
- sudo apt-get install mycli fzf python3-pygments
55
+ apt-get install mycli fzf python3-pygments
58
56
  ```
59
57
 
60
- # Usage
58
+ ## Try Without Installing: uv
61
59
 
62
- See
60
+ ```bash
61
+ uv tool run 'mycli[all]' --help
62
+ ```
63
+
64
+ ## Try Without Installing: Docker
65
+
66
+ The images on Dockerhub are out of date! [ghcr.io](https://github.com/dbcli/mycli/pkgs/container/mycli) images are preferred. A sample database
67
+ is included:
63
68
 
64
69
  ```bash
65
- mycli --help
70
+ docker run --pull=always -it ghcr.io/dbcli/mycli:latest
71
+ ```
72
+
73
+ The same image works with macOS [container](https://github.com/apple/container):
74
+
75
+ ```bash
76
+ container run -it ghcr.io/dbcli/mycli:latest
66
77
  ```
67
78
 
68
79
  # Features
69
80
 
70
81
  * Auto-completion as you type for SQL keywords as well as tables, views, columns, enums, and more!
71
- * Fuzzy history search using [fzf](https://github.com/junegunn/fzf).
72
- * Output explorer using [fzf](https://github.com/junegunn/fzf) or other tools.
73
- * Syntax highlighting using [Pygments](https://pygments.org/).
74
82
  * Smart-completion suggests context-sensitive completion:
75
83
  - `SELECT * FROM `<kbd>tab</kbd> will only show table names.
76
84
  - `SELECT * FROM users WHERE `<kbd>tab</kbd> will only show column names.
85
+ * Fuzzy history search using [fzf](https://github.com/junegunn/fzf).
86
+ * Output explorer using [fzf](https://github.com/junegunn/fzf) or other tools.
87
+ * Syntax highlighting using [Pygments](https://pygments.org/).
77
88
  * Multiline queries.
78
89
  * Favorite queries with positional or named parameters using [Jinja](https://jinja.palletsprojects.com/en/stable/). Save a query using
79
90
  ```
@@ -84,8 +95,7 @@ mycli --help
84
95
  /f alias --key=value
85
96
  ```
86
97
  * Timing of SQL statements and table rendering.
87
- * Logging of every query and its results to a file (off by default).
88
- * Pretty printing of tabular data.
98
+ * Many output formats for tabular results.
89
99
  * Shell-style trailing redirects with `$>`, `$>>` and `$|` operators.
90
100
  * [Polars](https://pola.rs) dataframe [transforms and plots](https://github.com/dbcli/mycli/blob/main/doc/transforms.md) with `.|`, and Parquet saves with `.>`.
91
101
  * [Querying LLMs](https://www.mycli.net/llm) with context derived from your schema using `/llm`.
@@ -96,10 +106,19 @@ mycli --help
96
106
  Mycli creates a config file `~/.myclirc` on the first run; you can use the
97
107
  options in that file to configure the above features, and more.
98
108
 
99
- Some features are only exposed as [key bindings](https://github.com/dbcli/mycli/blob/main/doc/key_bindings.rst).
109
+ Some features are only exposed as [key bindings](https://github.com/dbcli/mycli/blob/main/doc/key_bindings.md).
110
+
111
+
112
+ # Usage
113
+
114
+ See
115
+
116
+ ```bash
117
+ mycli --help
118
+ ```
100
119
 
101
120
 
102
- # Contributions
121
+ # Contributing
103
122
 
104
123
  If you're interested in contributing to this project, first of all we would like
105
124
  to extend our heartfelt gratitude. We've written a small doc to describe how to
@@ -107,6 +126,7 @@ get mycli running in a development setup.
107
126
 
108
127
  https://github.com/dbcli/mycli/blob/main/CONTRIBUTING.md
109
128
 
129
+
110
130
  # Additional Install Instructions
111
131
 
112
132
  ## Shell Completions
@@ -131,8 +151,9 @@ loaded with `source`.
131
151
  ## Alternative Install Methods
132
152
 
133
153
  These are some alternative ways to install mycli that are not managed by our
134
- team but provided by OS package maintainers. OS packages could be considerably
135
- out of date.
154
+ team but provided by OS package maintainers.
155
+
156
+ **NOTE: OS packages could be considerably out of date.**
136
157
 
137
158
  If present, the `fzf` package can be used for fuzzy history search, and as an
138
159
  output "explorer" with the `\x` special command. `pygmentize` can be used for
@@ -155,7 +176,7 @@ using apt. The `fzf` and `python3-pygments` packages are optional but
155
176
  recommended:
156
177
 
157
178
  ```bash
158
- sudo apt-get install mycli fzf python3-pygments
179
+ apt-get install mycli fzf python3-pygments
159
180
  ```
160
181
 
161
182
  ### Fedora
@@ -164,15 +185,7 @@ Fedora has a package available for mycli; install it using dnf. The `fzf` and
164
185
  `python-pygments` packages are optional but recommended:
165
186
 
166
187
  ```bash
167
- sudo dnf install mycli fzf python-pygments
168
- ```
169
-
170
- ### Docker
171
-
172
- The images on Dockerhub are out of date. ghcr.io is preferred. Example:
173
-
174
- ```
175
- docker run --pull=always -it ghcr.io/dbcli/mycli:latest
188
+ dnf install mycli fzf python-pygments
176
189
  ```
177
190
 
178
191
  ### Windows
@@ -200,7 +213,7 @@ With WSL, you are probably using an Ubuntu distribution, in which case
200
213
  recommended dependencies can be installed by
201
214
 
202
215
  ```bash
203
- sudo apt-get install fzf python3-pygments
216
+ apt-get install fzf python3-pygments
204
217
  ```
205
218
 
206
219
  and mycli can be installed by `apt-get` or by `pip` (recommended):
@@ -0,0 +1 @@
1
+ See [SPONSORS](mycli/SPONSORS)
@@ -1,3 +1,31 @@
1
+ 2.25.3 (2026/09/19)
2
+ ==============
3
+
4
+ Documentation
5
+ --------
6
+ * Add "try without installing" instructions to `README.md`.
7
+ * General `README.md` refinements.
8
+ * Convert remaining RST files to Markdown.
9
+ * Formatting in `AGENTS.md`.
10
+ * Revise transforms document to use employee sample database.
11
+
12
+
13
+ Internal
14
+ --------
15
+ * Naming and commentary in GitHub Actions.
16
+ * Build ARM Docker image in CI.
17
+ * Remove Python 3.10 from CI test matrix.
18
+ * Restore provenance/sbom to Docker image action.
19
+
20
+
21
+ 2.25.2 (2026/09/16)
22
+ ==============
23
+
24
+ Internal
25
+ --------
26
+ * Remove provenance/sbom from Docker image action.
27
+
28
+
1
29
  2.25.1 (2026/09/16)
2
30
  ==============
3
31