harlequin 2.3.0__tar.gz → 2.4.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 (74) hide show
  1. {harlequin-2.3.0 → harlequin-2.4.1}/CHANGELOG.md +15 -1
  2. {harlequin-2.3.0 → harlequin-2.4.1}/PKG-INFO +17 -6
  3. {harlequin-2.3.0 → harlequin-2.4.1}/pyproject.toml +26 -7
  4. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/data_catalog/database_tree.py +1 -1
  5. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/export.py +2 -2
  6. {harlequin-2.3.0 → harlequin-2.4.1}/.gitignore +0 -0
  7. {harlequin-2.3.0 → harlequin-2.4.1}/LICENSE +0 -0
  8. {harlequin-2.3.0 → harlequin-2.4.1}/README.md +0 -0
  9. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/__init__.py +0 -0
  10. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/__main__.py +0 -0
  11. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/actions.py +0 -0
  12. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/adapter.py +0 -0
  13. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/app.py +0 -0
  14. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/app.tcss +0 -0
  15. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/app_base.py +0 -0
  16. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/autocomplete/__init__.py +0 -0
  17. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/autocomplete/completers.py +0 -0
  18. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/autocomplete/completion.py +0 -0
  19. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/autocomplete/constants.py +0 -0
  20. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/bindings.py +0 -0
  21. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/cache.py +0 -0
  22. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/catalog.py +0 -0
  23. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/catalog_cache.py +0 -0
  24. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/cli.py +0 -0
  25. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/colors.py +0 -0
  26. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/__init__.py +0 -0
  27. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/code_editor.py +0 -0
  28. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/confirm_modal.py +0 -0
  29. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/data_catalog/__init__.py +0 -0
  30. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/data_catalog/file_tree.py +0 -0
  31. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/data_catalog/s3_tree.py +0 -0
  32. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/data_catalog/tree.py +0 -0
  33. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/debug_info.py +0 -0
  34. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/error_modal.py +0 -0
  35. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/export_screen.py +0 -0
  36. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/help_screen.md +0 -0
  37. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/help_screen.py +0 -0
  38. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/history_screen.py +0 -0
  39. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/results_viewer.py +0 -0
  40. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/run_query_bar.py +0 -0
  41. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/config.py +0 -0
  42. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/config_wizard.py +0 -0
  43. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/copy_formats.py +0 -0
  44. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/copy_widgets.py +0 -0
  45. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/driver.py +0 -0
  46. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/editor_cache.py +0 -0
  47. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/exception.py +0 -0
  48. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/global.tcss +0 -0
  49. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/history.py +0 -0
  50. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/keymap.py +0 -0
  51. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/keys_app.py +0 -0
  52. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/keys_app.tcss +0 -0
  53. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/locale_manager.py +0 -0
  54. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/messages.py +0 -0
  55. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/options.py +0 -0
  56. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/plugins.py +0 -0
  57. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/py.typed +0 -0
  58. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/transaction_mode.py +0 -0
  59. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/windows_timezone.py +0 -0
  60. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/__init__.py +0 -0
  61. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/adapter.py +0 -0
  62. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/catalog.py +0 -0
  63. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/cli_options.py +0 -0
  64. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/completions.py +0 -0
  65. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/interactions.py +0 -0
  66. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/py.typed +0 -0
  67. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/__init__.py +0 -0
  68. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/adapter.py +0 -0
  69. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/catalog.py +0 -0
  70. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/cli_options.py +0 -0
  71. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/completions.py +0 -0
  72. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/interactions.py +0 -0
  73. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/py.typed +0 -0
  74. {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_vscode/__init__.py +0 -0
@@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [2.4.1] - 2025-10-30
8
+
9
+ ### Bug Fixes
10
+
11
+ - Fixes a bug that was preventing the Database Catalog from being populated on Python 3.12+ ([#883](https://github.com/tconbeer/harlequin/issues/883) - thank you [@alex-lucem](https://github.com/alex-lucem)!).
12
+
13
+ ## [2.4.0] - 2025-10-29
14
+
15
+ ### Features
16
+
17
+ - Adds support for Python 3.14 for most Harlequin users ([#852](https://github.com/tconbeer/harlequin/issues/852), [#879](https://github.com/tconbeer/harlequin/pull/879), [#880](https://github.com/tconbeer/harlequin/pull/880) - thank you [@smartinussen](https://github.com/smartinussen) and especially [@branchvincent](https://github.com/branchvincent)!). **NOTE:** The `databricks` extra will not install the Databricks adapter on Python 3.14; Databricks users should continue to use Python 3.10-3.13. uv makes that easy with `uv tool install --python 3.13 'harlequin[databricks]'` See [this issue](https://github.com/alexmalins/harlequin-databricks/issues/23) for more information.
18
+
7
19
  ## [2.3.0] - 2025-10-24
8
20
 
9
21
  ### Breaking Changes
@@ -845,7 +857,9 @@ All notable changes to this project will be documented in this file.
845
857
 
846
858
  - Use the DuckDB CLI.
847
859
 
848
- [unreleased]: https://github.com/tconbeer/harlequin/compare/2.3.0...HEAD
860
+ [unreleased]: https://github.com/tconbeer/harlequin/compare/2.4.1...HEAD
861
+ [2.4.1]: https://github.com/tconbeer/harlequin/compare/2.4.0...2.4.1
862
+ [2.4.0]: https://github.com/tconbeer/harlequin/compare/2.3.0...2.4.0
849
863
  [2.3.0]: https://github.com/tconbeer/harlequin/compare/2.2.1...2.3.0
850
864
  [2.2.1]: https://github.com/tconbeer/harlequin/compare/2.2.0...2.2.1
851
865
  [2.2.0]: https://github.com/tconbeer/harlequin/compare/2.1.3...2.2.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: harlequin
3
- Version: 2.3.0
3
+ Version: 2.4.1
4
4
  Summary: The SQL IDE for Your Terminal.
5
5
  Project-URL: Homepage, https://harlequin.sh
6
6
  Project-URL: Documentation, https://harlequin.sh/docs/getting-started/index
@@ -11,14 +11,25 @@ Author-email: Ted Conbeer <tconbeer@users.noreply.github.com>
11
11
  License-Expression: MIT
12
12
  License-File: LICENSE
13
13
  Keywords: harlequin,ide,sql,textual,tui
14
- Requires-Python: <3.14,>=3.10
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Operating System :: MacOS :: MacOS X
16
+ Classifier: Operating System :: Microsoft :: Windows
17
+ Classifier: Operating System :: POSIX :: Linux
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Requires-Python: >=3.10
15
24
  Requires-Dist: click==8.1.8
16
- Requires-Dist: duckdb>=0.8.0
25
+ Requires-Dist: duckdb>=0.8.0; python_version < '3.14'
26
+ Requires-Dist: duckdb>=1.4.2.dev0; python_version >= '3.14'
27
+ Requires-Dist: pandas>=2.3; python_version >= '3.14'
17
28
  Requires-Dist: platformdirs<5.0,>=3.10
18
29
  Requires-Dist: questionary==2.0.1
19
30
  Requires-Dist: rich-click==1.8.5
20
- Requires-Dist: shandy-sqlfmt>=0.19.0
21
- Requires-Dist: textual-fastdatatable==0.13.0
31
+ Requires-Dist: shandy-sqlfmt>=0.28.2
32
+ Requires-Dist: textual-fastdatatable==0.14.0
22
33
  Requires-Dist: textual-textarea==0.17.2
23
34
  Requires-Dist: textual==6.4.0
24
35
  Requires-Dist: tomlkit<0.14.0,>=0.12.5
@@ -29,7 +40,7 @@ Requires-Dist: harlequin-bigquery; extra == 'bigquery'
29
40
  Provides-Extra: cassandra
30
41
  Requires-Dist: harlequin-cassandra; extra == 'cassandra'
31
42
  Provides-Extra: databricks
32
- Requires-Dist: harlequin-databricks; extra == 'databricks'
43
+ Requires-Dist: harlequin-databricks; (python_version < '3.14') and extra == 'databricks'
33
44
  Provides-Extra: mysql
34
45
  Requires-Dist: harlequin-mysql; extra == 'mysql'
35
46
  Provides-Extra: nebulagraph
@@ -1,8 +1,8 @@
1
1
  [project]
2
2
 
3
3
  name = "harlequin"
4
- version = "2.3.0"
5
- requires-python = ">=3.10,<3.14"
4
+ version = "2.4.1"
5
+ requires-python = ">=3.10"
6
6
  description = "The SQL IDE for Your Terminal."
7
7
  authors = [
8
8
  { name = "Ted Conbeer", email = "tconbeer@users.noreply.github.com" }
@@ -10,10 +10,21 @@ authors = [
10
10
  license = "MIT"
11
11
  readme = "README.md"
12
12
  keywords = ["sql", "tui", "ide", "textual", "harlequin"]
13
+ classifiers = [
14
+ "Development Status :: 4 - Beta",
15
+ "Operating System :: MacOS :: MacOS X",
16
+ "Operating System :: Microsoft :: Windows",
17
+ "Operating System :: POSIX :: Linux",
18
+ "Programming Language :: Python :: 3.10",
19
+ "Programming Language :: Python :: 3.11",
20
+ "Programming Language :: Python :: 3.12",
21
+ "Programming Language :: Python :: 3.13",
22
+ "Programming Language :: Python :: 3.14",
23
+ ]
13
24
  dependencies = [
14
25
  # textual and component libraries
15
26
  "textual==6.4.0",
16
- "textual-fastdatatable==0.13.0",
27
+ "textual-fastdatatable==0.14.0",
17
28
  "textual-textarea==0.17.2",
18
29
 
19
30
  # click
@@ -21,11 +32,15 @@ dependencies = [
21
32
  "rich-click==1.8.5",
22
33
 
23
34
  # other deps
24
- "duckdb>=0.8.0",
25
- "shandy-sqlfmt>=0.19.0",
35
+ "duckdb>=0.8.0; python_version < '3.14'",
36
+ "shandy-sqlfmt>=0.28.2",
26
37
  "platformdirs>=3.10,<5.0",
27
38
  "tomlkit>=0.12.5,<0.14.0",
28
39
  "questionary==2.0.1",
40
+
41
+ # ensure we install from wheels
42
+ "duckdb>=1.4.2.dev0; python_version >= '3.14'",
43
+ "pandas>=2.3; python_version >= '3.14'",
29
44
  ]
30
45
 
31
46
 
@@ -37,7 +52,11 @@ mysql = ["harlequin-mysql"]
37
52
  odbc = ["harlequin-odbc"]
38
53
  bigquery = ["harlequin-bigquery"]
39
54
  trino = ["harlequin-trino"]
40
- databricks = ["harlequin-databricks"]
55
+ # databricks-sql-connector pins numpy to 2.2, which has to be
56
+ # built from source on python 3.14. Rather than forcing all
57
+ # 3.14 users to build numpy from source, make databricks
58
+ # unavailable on 3.14
59
+ databricks = ["harlequin-databricks; python_version < '3.14'"]
41
60
  adbc = ["harlequin-adbc"]
42
61
  cassandra = ["harlequin-cassandra"]
43
62
  nebulagraph = ["harlequin-nebulagraph"]
@@ -63,7 +82,7 @@ test = [
63
82
  "pytest-textual-snapshot @ https://github.com/tconbeer/pytest-textual-snapshot.git#main",
64
83
  "boto3==1.34.22",
65
84
  # extension tests require consistent version of duckdb.
66
- "duckdb==1.1.1",
85
+ "duckdb==1.4.2.dev23",
67
86
  "flaky>=3.8.1",
68
87
  ]
69
88
 
@@ -305,7 +305,7 @@ class DatabaseTree(HarlequinTree[CatalogItem], inherit_bindings=False):
305
305
  key=lambda catalog_item: catalog_item.label,
306
306
  )
307
307
 
308
- @work(name="_database_tree_background_loader", exclusive=True)
308
+ @work(name="_database_tree_background_loader")
309
309
  async def _loader(self) -> None:
310
310
  """Background loading queue processor."""
311
311
  worker = get_current_worker()
@@ -64,7 +64,7 @@ def _export_csv(
64
64
  if "header" not in kwargs:
65
65
  kwargs["header"] = False
66
66
  try:
67
- relation = duckdb.arrow(data) # type: ignore[arg-type]
67
+ relation = duckdb.arrow(data)
68
68
  relation.write_csv(file_name=dest_path, **kwargs)
69
69
  except (duckdb.Error, OSError) as e:
70
70
  raise HarlequinCopyError(
@@ -81,7 +81,7 @@ def _export_parquet(
81
81
  import duckdb
82
82
 
83
83
  try:
84
- relation = duckdb.arrow(data) # type: ignore[arg-type]
84
+ relation = duckdb.arrow(data)
85
85
  relation.write_parquet(
86
86
  file_name=dest_path, compression=kwargs.get("compression")
87
87
  )
File without changes
File without changes
File without changes