From 8b44475892a7e0b6797a273140846aafdb29b7e6 Mon Sep 17 00:00:00 2001 From: Saqib Ansari Date: Sat, 16 Nov 2024 14:05:06 +0530 Subject: [PATCH] fix: cannot upload csv files --- insights/api/__init__.py | 12 +++++++++--- .../insights_data_source_v3/connectors/duckdb.py | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/insights/api/__init__.py b/insights/api/__init__.py index 3d80309c..ef78532c 100644 --- a/insights/api/__init__.py +++ b/insights/api/__init__.py @@ -8,6 +8,9 @@ from frappe.rate_limiter import rate_limit from insights.decorators import insights_whitelist, validate_type +from insights.insights.doctype.insights_data_source_v3.connectors.duckdb import ( + get_duckdb_connection, +) from insights.insights.doctype.insights_data_source_v3.ibis_utils import ( get_columns_from_schema, ) @@ -149,9 +152,12 @@ def import_csv_data(filename: str): uploads.save(ignore_permissions=True) ds = frappe.get_doc("Insights Data Source v3", "uploads") - db = ds._get_ibis_backend() + db = get_duckdb_connection(ds, read_only=False) - table = db.read_csv(file_path, table_name=table_name) - db.create_table(table_name, table, overwrite=True) + try: + table = db.read_csv(file_path, table_name=table_name) + db.create_table(table_name, table, overwrite=True) + finally: + db.disconnect() InsightsTablev3.bulk_create(ds.name, [table_name]) diff --git a/insights/insights/doctype/insights_data_source_v3/connectors/duckdb.py b/insights/insights/doctype/insights_data_source_v3/connectors/duckdb.py index 458211f2..294b5ca7 100644 --- a/insights/insights/doctype/insights_data_source_v3/connectors/duckdb.py +++ b/insights/insights/doctype/insights_data_source_v3/connectors/duckdb.py @@ -7,7 +7,7 @@ from frappe.utils import get_files_path -def get_duckdb_connection(data_source): +def get_duckdb_connection(data_source, read_only=True): path = os.path.realpath(get_files_path(is_private=1)) path = os.path.join(path, f"{data_source.database_name}.duckdb") - return ibis.duckdb.connect(path, read_only=True) + return ibis.duckdb.connect(path, read_only=read_only)