harlequin 2.3.0__tar.gz → 2.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {harlequin-2.3.0 → harlequin-2.4.0}/CHANGELOG.md +8 -1
- {harlequin-2.3.0 → harlequin-2.4.0}/PKG-INFO +17 -6
- {harlequin-2.3.0 → harlequin-2.4.0}/pyproject.toml +26 -7
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/export.py +2 -2
- {harlequin-2.3.0 → harlequin-2.4.0}/.gitignore +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/LICENSE +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/README.md +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/__main__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/actions.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/adapter.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/app.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/app.tcss +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/app_base.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/autocomplete/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/autocomplete/completers.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/autocomplete/completion.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/autocomplete/constants.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/bindings.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/cache.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/catalog.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/catalog_cache.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/cli.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/colors.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/code_editor.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/confirm_modal.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/data_catalog/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/data_catalog/database_tree.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/data_catalog/file_tree.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/data_catalog/s3_tree.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/data_catalog/tree.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/debug_info.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/error_modal.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/export_screen.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/help_screen.md +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/help_screen.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/history_screen.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/results_viewer.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/components/run_query_bar.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/config.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/config_wizard.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/copy_formats.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/copy_widgets.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/driver.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/editor_cache.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/exception.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/global.tcss +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/history.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/keymap.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/keys_app.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/keys_app.tcss +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/locale_manager.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/messages.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/options.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/plugins.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/py.typed +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/transaction_mode.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin/windows_timezone.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_duckdb/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_duckdb/adapter.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_duckdb/catalog.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_duckdb/cli_options.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_duckdb/completions.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_duckdb/interactions.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_duckdb/py.typed +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_sqlite/__init__.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_sqlite/adapter.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_sqlite/catalog.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_sqlite/cli_options.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_sqlite/completions.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_sqlite/interactions.py +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_sqlite/py.typed +0 -0
- {harlequin-2.3.0 → harlequin-2.4.0}/src/harlequin_vscode/__init__.py +0 -0
|
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [2.4.0] - 2025-10-29
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
- 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.
|
|
12
|
+
|
|
7
13
|
## [2.3.0] - 2025-10-24
|
|
8
14
|
|
|
9
15
|
### Breaking Changes
|
|
@@ -845,7 +851,8 @@ All notable changes to this project will be documented in this file.
|
|
|
845
851
|
|
|
846
852
|
- Use the DuckDB CLI.
|
|
847
853
|
|
|
848
|
-
[unreleased]: https://github.com/tconbeer/harlequin/compare/2.
|
|
854
|
+
[unreleased]: https://github.com/tconbeer/harlequin/compare/2.4.0...HEAD
|
|
855
|
+
[2.4.0]: https://github.com/tconbeer/harlequin/compare/2.3.0...2.4.0
|
|
849
856
|
[2.3.0]: https://github.com/tconbeer/harlequin/compare/2.2.1...2.3.0
|
|
850
857
|
[2.2.1]: https://github.com/tconbeer/harlequin/compare/2.2.0...2.2.1
|
|
851
858
|
[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.0
|
|
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.0"
|
|
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
|
|
|
@@ -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
|
|
File without changes
|