mycli 2.27.0__tar.gz → 2.28.1__tar.gz

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