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.
- {harlequin-2.3.0 → harlequin-2.4.1}/CHANGELOG.md +15 -1
- {harlequin-2.3.0 → harlequin-2.4.1}/PKG-INFO +17 -6
- {harlequin-2.3.0 → harlequin-2.4.1}/pyproject.toml +26 -7
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/data_catalog/database_tree.py +1 -1
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/export.py +2 -2
- {harlequin-2.3.0 → harlequin-2.4.1}/.gitignore +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/LICENSE +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/README.md +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/__main__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/actions.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/adapter.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/app.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/app.tcss +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/app_base.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/autocomplete/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/autocomplete/completers.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/autocomplete/completion.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/autocomplete/constants.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/bindings.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/cache.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/catalog.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/catalog_cache.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/cli.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/colors.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/code_editor.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/confirm_modal.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/data_catalog/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/data_catalog/file_tree.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/data_catalog/s3_tree.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/data_catalog/tree.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/debug_info.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/error_modal.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/export_screen.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/help_screen.md +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/help_screen.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/history_screen.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/results_viewer.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/components/run_query_bar.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/config.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/config_wizard.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/copy_formats.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/copy_widgets.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/driver.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/editor_cache.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/exception.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/global.tcss +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/history.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/keymap.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/keys_app.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/keys_app.tcss +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/locale_manager.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/messages.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/options.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/plugins.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/py.typed +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/transaction_mode.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin/windows_timezone.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/adapter.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/catalog.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/cli_options.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/completions.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/interactions.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_duckdb/py.typed +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/adapter.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/catalog.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/cli_options.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/completions.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/interactions.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.1}/src/harlequin_sqlite/py.typed +0 -0
- {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.
|
|
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
|
+
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
|
-
|
|
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.
|
|
21
|
-
Requires-Dist: textual-fastdatatable==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.
|
|
5
|
-
requires-python = ">=3.10
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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"
|
|
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)
|
|
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)
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|