Skip to content

Commit 262cf22

Browse files
committed
Merge branch 'main' of https://github.com/dataease/SQLBot
2 parents 9d6feef + a83f40e commit 262cf22

File tree

2 files changed

+80
-55
lines changed

2 files changed

+80
-55
lines changed

backend/apps/datasource/api/datasource.py

Lines changed: 66 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import asyncio
12
import hashlib
23
import os
34
import uuid
@@ -38,22 +39,34 @@ async def get_datasource(session: SessionDep, id: int):
3839

3940
@router.post("/check")
4041
async def check(session: SessionDep, ds: CoreDatasource):
41-
return check_status(session, ds, True)
42+
def inner():
43+
return check_status(session, ds, True)
44+
45+
return await asyncio.to_thread(inner)
4246

4347

4448
@router.post("/add", response_model=CoreDatasource)
4549
async def add(session: SessionDep, trans: Trans, user: CurrentUser, ds: CreateDatasource):
46-
return create_ds(session, trans, user, ds)
50+
def inner():
51+
return create_ds(session, trans, user, ds)
52+
53+
return await asyncio.to_thread(inner)
4754

4855

4956
@router.post("/chooseTables/{id}")
5057
async def choose_tables(session: SessionDep, id: int, tables: List[CoreTable]):
51-
chooseTables(session, id, tables)
58+
def inner():
59+
chooseTables(session, id, tables)
60+
61+
await asyncio.to_thread(inner)
5262

5363

5464
@router.post("/update", response_model=CoreDatasource)
5565
async def update(session: SessionDep, trans: Trans, user: CurrentUser, ds: CoreDatasource):
56-
return update_ds(session, trans, user, ds)
66+
def inner():
67+
return update_ds(session, trans, user, ds)
68+
69+
return await asyncio.to_thread(inner)
5770

5871

5972
@router.post("/delete/{id}", response_model=CoreDatasource)
@@ -82,7 +95,10 @@ async def get_fields(session: SessionDep, id: int, table_name: str):
8295

8396
@router.post("/execSql/{id}/{sql}")
8497
async def exec_sql(session: SessionDep, id: int, sql: str):
85-
return execSql(session, id, sql)
98+
def inner():
99+
return execSql(session, id, sql)
100+
101+
return await asyncio.to_thread(inner)
86102

87103

88104
@router.post("/tableList/{id}")
@@ -111,17 +127,23 @@ async def edit_field(session: SessionDep, field: CoreField):
111127

112128

113129
@router.post("/previewData/{id}")
114-
async def edit_local(session: SessionDep, current_user: CurrentUser, id: int, data: TableObj):
115-
try:
116-
return preview(session, current_user, id, data)
117-
except Exception as e:
118-
SQLBotLogUtil.error(f"Preview failed: {e}")
119-
raise HTTPException(status_code=500, detail=f'Preview Failed: {e.args}')
130+
async def preview_data(session: SessionDep, current_user: CurrentUser, id: int, data: TableObj):
131+
def inner():
132+
try:
133+
return preview(session, current_user, id, data)
134+
except Exception as e:
135+
SQLBotLogUtil.error(f"Preview failed: {e}")
136+
raise HTTPException(status_code=500, detail=f'Preview Failed: {e.args}')
137+
138+
return await asyncio.to_thread(inner)
120139

121140

122141
@router.post("/fieldEnum/{id}")
123142
async def field_enum(session: SessionDep, id: int):
124-
return fieldEnum(session, id)
143+
def inner():
144+
return fieldEnum(session, id)
145+
146+
return await asyncio.to_thread(inner)
125147

126148

127149
@router.post("/uploadExcel")
@@ -136,32 +158,12 @@ async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
136158
with open(save_path, "wb") as f:
137159
f.write(await file.read())
138160

139-
sheets = []
140-
with get_data_engine() as conn:
141-
if filename.endswith(".csv"):
142-
df = pd.read_csv(save_path)
143-
tableName = f"sheet1_{hashlib.sha256(uuid.uuid4().bytes).hexdigest()[:10]}"
144-
sheets.append({"tableName": tableName, "tableComment": ""})
145-
column_len = len(df.dtypes)
146-
fields = []
147-
for i in range(column_len):
148-
# build fields
149-
fields.append({"name": df.columns[i], "type": str(df.dtypes[i]), "relType": ""})
150-
# create table
151-
create_table(conn, tableName, fields)
152-
153-
data = [
154-
{df.columns[i]: None if pd.isna(row[i]) else (int(row[i]) if "int" in str(df.dtypes[i]) else row[i])
155-
for i in range(len(row))}
156-
for row in df.values
157-
]
158-
# insert data
159-
insert_data(conn, tableName, fields, data)
160-
else:
161-
df_sheets = pd.read_excel(save_path, sheet_name=None)
162-
# build columns and data to insert db
163-
for sheet_name, df in df_sheets.items():
164-
tableName = f"{sheet_name}_{hashlib.sha256(uuid.uuid4().bytes).hexdigest()[:10]}"
161+
def inner():
162+
sheets = []
163+
with get_data_engine() as conn:
164+
if filename.endswith(".csv"):
165+
df = pd.read_csv(save_path)
166+
tableName = f"sheet1_{hashlib.sha256(uuid.uuid4().bytes).hexdigest()[:10]}"
165167
sheets.append({"tableName": tableName, "tableComment": ""})
166168
column_len = len(df.dtypes)
167169
fields = []
@@ -178,6 +180,29 @@ async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
178180
]
179181
# insert data
180182
insert_data(conn, tableName, fields, data)
181-
182-
os.remove(save_path)
183-
return {"filename": filename, "sheets": sheets}
183+
else:
184+
df_sheets = pd.read_excel(save_path, sheet_name=None)
185+
# build columns and data to insert db
186+
for sheet_name, df in df_sheets.items():
187+
tableName = f"{sheet_name}_{hashlib.sha256(uuid.uuid4().bytes).hexdigest()[:10]}"
188+
sheets.append({"tableName": tableName, "tableComment": ""})
189+
column_len = len(df.dtypes)
190+
fields = []
191+
for i in range(column_len):
192+
# build fields
193+
fields.append({"name": df.columns[i], "type": str(df.dtypes[i]), "relType": ""})
194+
# create table
195+
create_table(conn, tableName, fields)
196+
197+
data = [
198+
{df.columns[i]: None if pd.isna(row[i]) else (int(row[i]) if "int" in str(df.dtypes[i]) else row[i])
199+
for i in range(len(row))}
200+
for row in df.values
201+
]
202+
# insert data
203+
insert_data(conn, tableName, fields, data)
204+
205+
os.remove(save_path)
206+
return {"filename": filename, "sheets": sheets}
207+
208+
return await asyncio.to_thread(inner)

frontend/src/i18n/en.json

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@
146146
"local_excelcsv": "Local Excel/CSV",
147147
"pieces_in_total": "Showing {ms} records",
148148
"test_connection": "Test Connection",
149-
"check": "check",
149+
"check": "Check",
150150
"connection_success": "Connection Successful",
151151
"connection_failed": "Connection Failed, Please Check Configuration",
152152
"Search Datasource": "Search Datasource",
@@ -378,7 +378,7 @@
378378
"2_dashboards": "{msg} dashboards",
379379
"smart_data_centers": "{msg} smart data centers",
380380
"confirm_to_delete": "After the data source is deleted, the related questions can no longer be asked and the charts in the dashboard cannot be displayed normally. Please operate with caution!",
381-
"id_account_to_add": "Search user ID/account to add",
381+
"id_account_to_add": "Search name/account",
382382
"find_user": "Find user",
383383
"add_successfully": "Add successfully",
384384
"member_management": "Member management",
@@ -389,10 +389,10 @@
389389
"permission": {
390390
"search_rule_group": "Search rule group",
391391
"add_rule_group": "Add rule group",
392-
"permission_rule": "Permission rule",
392+
"permission_rule": "Permission rules",
393393
"restricted_user": "Restricted user",
394-
"set_rule": "Set rule",
395-
"set_user": "Set user",
394+
"set_rule": "Setup rule",
395+
"set_user": "Setup user",
396396
"2": "{msg}",
397397
"238_people": "{msg} people",
398398
"no_permission_rule": "No permission rule",
@@ -406,8 +406,8 @@
406406
"select_restricted_user": "Select restricted user",
407407
"rule_group_1": "Delete rule group: {msg}?",
408408
"no_rule": "No rule",
409-
"row_permission": "Row permission",
410-
"column_permission": "Column permission",
409+
"row_permission": "Row perm",
410+
"column_permission": "Column perm",
411411
"rule_rule_1": "Delete rule: {msg}?",
412412
"no_content": "No content",
413413
"edit_column_permission": "Edit column permission",
@@ -457,14 +457,14 @@
457457
"support_is_required": "Applicable to scenarios where data verification is not required, just embed the embedded code into the third party code, no additional support is required",
458458
"data_permissions_etc": "Applicable to scenarios where data verification is required, requiring the third party system to provide data source interface, user interface data permissions, etc.",
459459
"create_basic_application": "Create basic application",
460-
"set_data_source": "Set data source",
460+
"set_data_source": "Data source settings",
461461
"basic_information": "Basic information",
462462
"application_name": "Application name",
463463
"application_description": "Application description",
464464
"cross_domain_settings": "Cross-domain settings",
465465
"third_party_address": "Please enter the embedded third party address",
466-
"set_to_private": "Set to private",
467-
"set_to_public": "Set to public",
466+
"set_to_private": "Set as private",
467+
"set_to_public": "Set as public",
468468
"public": "Public",
469469
"private": "Private",
470470
"creating_advanced_applications": "Creating Advanced Applications",
@@ -508,10 +508,10 @@
508508
"type": "Chart Type",
509509
"chart_type": {
510510
"table": "Detail Table",
511-
"bar": "Bar Chart",
512-
"column": "Column Chart",
513-
"line": "Line Chart",
514-
"pie": "Pie Chart"
511+
"bar": "Bar",
512+
"column": "Column",
513+
"line": "Line",
514+
"pie": "Pie"
515515
},
516516
"show_sql": "View SQL",
517517
"export_to": "Export As",

0 commit comments

Comments
 (0)