sqlnbfmt 0.1.7__tar.gz → 0.1.8__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.
- {sqlnbfmt-0.1.7/sqlnbfmt.egg-info → sqlnbfmt-0.1.8}/PKG-INFO +2 -1
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/pyproject.toml +3 -2
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/sqlnbfmt/formatter.py +4 -0
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8/sqlnbfmt.egg-info}/PKG-INFO +2 -1
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/sqlnbfmt.egg-info/requires.txt +1 -0
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/tests/test_formatter.py +43 -7
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/LICENSE +0 -0
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/README.md +0 -0
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/setup.cfg +0 -0
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/sqlnbfmt/__init__.py +0 -0
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/sqlnbfmt.egg-info/SOURCES.txt +0 -0
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/sqlnbfmt.egg-info/dependency_links.txt +0 -0
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/sqlnbfmt.egg-info/entry_points.txt +0 -0
- {sqlnbfmt-0.1.7 → sqlnbfmt-0.1.8}/sqlnbfmt.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sqlnbfmt
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.8
|
|
4
4
|
Summary: A tool to format SQL code in Jupyter notebooks.
|
|
5
5
|
Author-email: Qing <qingye779@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -10,6 +10,7 @@ Requires-Python: >=3.12
|
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
12
12
|
Requires-Dist: astor>=0.8.1
|
|
13
|
+
Requires-Dist: black>=24.10.0
|
|
13
14
|
Requires-Dist: nbformat>=5.10.4
|
|
14
15
|
Requires-Dist: pyyaml>=6.0.2
|
|
15
16
|
Requires-Dist: sqlglot>=25.27.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sqlnbfmt"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.8"
|
|
4
4
|
description = "A tool to format SQL code in Jupyter notebooks."
|
|
5
5
|
authors = [
|
|
6
6
|
{ name = "Qing", email = "qingye779@gmail.com" }
|
|
@@ -14,6 +14,7 @@ classifiers = [
|
|
|
14
14
|
]
|
|
15
15
|
dependencies = [
|
|
16
16
|
"astor>=0.8.1",
|
|
17
|
+
"black>=24.10.0",
|
|
17
18
|
"nbformat>=5.10.4",
|
|
18
19
|
"pyyaml>=6.0.2",
|
|
19
20
|
"sqlglot>=25.27.0",
|
|
@@ -38,4 +39,4 @@ markers = [
|
|
|
38
39
|
]
|
|
39
40
|
|
|
40
41
|
[tool.setuptools.package-data]
|
|
41
|
-
sqlnbfmt = [".pre-commit-hooks.yaml"]
|
|
42
|
+
sqlnbfmt = [".pre-commit-hooks.yaml"]
|
|
@@ -7,6 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
from typing import Set, Optional, Dict, Union, Tuple
|
|
8
8
|
|
|
9
9
|
import astor
|
|
10
|
+
import black
|
|
10
11
|
import nbformat
|
|
11
12
|
import yaml
|
|
12
13
|
from sqlglot import parse_one, errors
|
|
@@ -484,6 +485,9 @@ def process_notebook(
|
|
|
484
485
|
if formatter.changed:
|
|
485
486
|
# Use astor to convert AST back to source code
|
|
486
487
|
formatted_code = astor.to_source(new_tree)
|
|
488
|
+
# Now format with black
|
|
489
|
+
formatted_code = black.format_str(formatted_code, mode=black.FileMode())
|
|
490
|
+
|
|
487
491
|
if formatted_code != original_code:
|
|
488
492
|
cell.source = formatted_code
|
|
489
493
|
changed = True
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sqlnbfmt
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.8
|
|
4
4
|
Summary: A tool to format SQL code in Jupyter notebooks.
|
|
5
5
|
Author-email: Qing <qingye779@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -10,6 +10,7 @@ Requires-Python: >=3.12
|
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
12
12
|
Requires-Dist: astor>=0.8.1
|
|
13
|
+
Requires-Dist: black>=24.10.0
|
|
13
14
|
Requires-Dist: nbformat>=5.10.4
|
|
14
15
|
Requires-Dist: pyyaml>=6.0.2
|
|
15
16
|
Requires-Dist: sqlglot>=25.27.0
|
|
@@ -45,7 +45,8 @@ WHERE
|
|
|
45
45
|
# Test Case 2: SELECT Query with F-String and Variable
|
|
46
46
|
(
|
|
47
47
|
[nbf.new_code_cell('''table_name = "users"\nquery = f"select * from {table_name}"''')],
|
|
48
|
-
[nbf.new_code_cell('''table_name =
|
|
48
|
+
[nbf.new_code_cell('''table_name = "users"
|
|
49
|
+
query = f"""
|
|
49
50
|
SELECT
|
|
50
51
|
*
|
|
51
52
|
FROM {table_name}
|
|
@@ -54,7 +55,8 @@ FROM {table_name}
|
|
|
54
55
|
# Test Case 3: Multi-line SELECT Query with Variables
|
|
55
56
|
(
|
|
56
57
|
[nbf.new_code_cell('''columns = "id, name"\nquery = f"select {columns} from users where active = 1"''')],
|
|
57
|
-
[nbf.new_code_cell('''columns =
|
|
58
|
+
[nbf.new_code_cell('''columns = "id, name"
|
|
59
|
+
query = f"""
|
|
58
60
|
SELECT
|
|
59
61
|
{columns}
|
|
60
62
|
FROM users
|
|
@@ -70,18 +72,26 @@ WHERE
|
|
|
70
72
|
# Test Case 5: SQL Query with Cell Magic Command
|
|
71
73
|
(
|
|
72
74
|
[nbf.new_code_cell('''%%sql\nselect * from users where active = 1''')],
|
|
73
|
-
[nbf.new_code_cell('''%%sql
|
|
75
|
+
[nbf.new_code_cell('''%%sql
|
|
76
|
+
SELECT
|
|
77
|
+
*
|
|
78
|
+
FROM users
|
|
79
|
+
WHERE
|
|
80
|
+
active = 1''')],
|
|
74
81
|
),
|
|
75
|
-
# Test Case 6: INSERT Query with Variables (
|
|
82
|
+
# Test Case 6: INSERT Query with Variables (Remains Unchanged)
|
|
76
83
|
(
|
|
77
84
|
[nbf.new_code_cell('''table_name = "users"\ncolumns = "(id, name)"\nvalues = "(1, 'Alice')"\nquery = f"insert into {table_name} {columns} values {values}"''')],
|
|
78
|
-
|
|
79
|
-
|
|
85
|
+
[nbf.new_code_cell('''table_name = "users"
|
|
86
|
+
columns = "(id, name)"
|
|
87
|
+
values = "(1, 'Alice')"
|
|
88
|
+
query = f"insert into {table_name} {columns} values {values}"''')],
|
|
80
89
|
),
|
|
81
90
|
# Test Case 7: UPDATE Query with Variables
|
|
82
91
|
(
|
|
83
92
|
[nbf.new_code_cell('''table_name = "users"\nquery = f"update {table_name} set active = 0 where id = 1"''')],
|
|
84
|
-
[nbf.new_code_cell('''table_name =
|
|
93
|
+
[nbf.new_code_cell('''table_name = "users"
|
|
94
|
+
query = f"""
|
|
85
95
|
UPDATE {table_name} SET active = 0
|
|
86
96
|
WHERE
|
|
87
97
|
id = 1
|
|
@@ -136,6 +146,32 @@ SELECT
|
|
|
136
146
|
FROM users
|
|
137
147
|
"""''')],
|
|
138
148
|
),
|
|
149
|
+
# Test Case 13: In-function SQL Query
|
|
150
|
+
(
|
|
151
|
+
[nbf.new_code_cell('''pd.read_sql("""select id, name from users where active = 1""")''')],
|
|
152
|
+
[nbf.new_code_cell('''pd.read_sql(
|
|
153
|
+
"""
|
|
154
|
+
SELECT
|
|
155
|
+
id,
|
|
156
|
+
name
|
|
157
|
+
FROM users
|
|
158
|
+
WHERE
|
|
159
|
+
active = 1
|
|
160
|
+
"""
|
|
161
|
+
)''')],
|
|
162
|
+
),
|
|
163
|
+
# Test Case 14: In-function SQL Query with F-String
|
|
164
|
+
(
|
|
165
|
+
[nbf.new_code_cell('''table_name = "users"\npd.read_sql(f"select * from {table_name}")''')],
|
|
166
|
+
[nbf.new_code_cell('''table_name = "users"
|
|
167
|
+
pd.read_sql(
|
|
168
|
+
f"""
|
|
169
|
+
SELECT
|
|
170
|
+
*
|
|
171
|
+
FROM {table_name}
|
|
172
|
+
"""
|
|
173
|
+
)''')],
|
|
174
|
+
),
|
|
139
175
|
])
|
|
140
176
|
def test_sql_formatter(temp_nb_path, logger, input_cells, expected_cells):
|
|
141
177
|
# Create a new notebook
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|