16
16
from pathlib import Path
17
17
18
18
from data_formulator .db_manager import db_manager
19
- from data_formulator .data_loader .external_data_loader import ExternalDataLoader
20
- from data_formulator .data_loader .mysql_data_loader import MySQLDataLoader
21
- from data_formulator .data_loader .kusto_data_loader import KustoDataLoader
19
+ from data_formulator .data_loader import DATA_LOADERS
22
20
23
21
import re
24
22
from typing import Tuple
@@ -701,6 +699,9 @@ def sanitize_db_error_message(error: Exception) -> Tuple[str, int]:
701
699
# File errors
702
700
r"No such file" : ("File not found" , 404 ),
703
701
r"Permission denied" : ("Access denied" , 403 ),
702
+
703
+ # Data loader errors
704
+ r"Entity ID" : ("Entity ID not found" , 500 ),
704
705
}
705
706
706
707
# Check if error matches any safe pattern
@@ -715,34 +716,20 @@ def sanitize_db_error_message(error: Exception) -> Tuple[str, int]:
715
716
return "An unexpected error occurred" , 500
716
717
717
718
718
-
719
- available_data_loaders = {
720
- 'mysql' : MySQLDataLoader ,
721
- 'kusto' : KustoDataLoader
722
- }
723
-
724
- @tables_bp .route ('/data-loader/list-params' , methods = ['POST' ])
725
- def data_loader_list_params ():
726
- """List params for a data loader"""
719
+ @tables_bp .route ('/data-loader/list-data-loaders' , methods = ['GET' ])
720
+ def data_loader_list_data_loaders ():
721
+ """List all available data loaders"""
727
722
728
723
try :
729
- data = request .get_json ()
730
- data_loader_type = data .get ('data_loader_type' )
731
-
732
- if data_loader_type not in available_data_loaders :
733
- return jsonify ({"status" : "error" , "message" : f"Invalid data loader type. Must be one of: { ', ' .join (available_data_loaders .keys ())} " }), 400
734
-
735
- data_loader = available_data_loaders [data_loader_type ]
736
-
737
- params = data_loader .list_params ()
738
-
739
724
return jsonify ({
740
725
"status" : "success" ,
741
- "params" : params
726
+ "data_loaders" : {
727
+ name : data_loader .list_params ()
728
+ for name , data_loader in DATA_LOADERS .items ()
729
+ }
742
730
})
743
-
744
731
except Exception as e :
745
- logger .error (f"Error listing params for data loader : { str (e )} " )
732
+ logger .error (f"Error listing data loaders : { str (e )} " )
746
733
safe_msg , status_code = sanitize_db_error_message (e )
747
734
return jsonify ({
748
735
"status" : "error" ,
@@ -758,11 +745,11 @@ def data_loader_list_tables():
758
745
data_loader_type = data .get ('data_loader_type' )
759
746
data_loader_params = data .get ('data_loader_params' )
760
747
761
- if data_loader_type not in available_data_loaders :
762
- return jsonify ({"status" : "error" , "message" : f"Invalid data loader type. Must be one of: { ', ' .join (available_data_loaders .keys ())} " }), 400
748
+ if data_loader_type not in DATA_LOADERS :
749
+ return jsonify ({"status" : "error" , "message" : f"Invalid data loader type. Must be one of: { ', ' .join (DATA_LOADERS .keys ())} " }), 400
763
750
764
751
with db_manager .connection (session ['session_id' ]) as duck_db_conn :
765
- data_loader = available_data_loaders [data_loader_type ](data_loader_params , duck_db_conn )
752
+ data_loader = DATA_LOADERS [data_loader_type ](data_loader_params , duck_db_conn )
766
753
tables = data_loader .list_tables ()
767
754
768
755
return jsonify ({
@@ -772,7 +759,7 @@ def data_loader_list_tables():
772
759
773
760
except Exception as e :
774
761
logger .error (f"Error listing tables from data loader: { str (e )} " )
775
- print (traceback .format_exc ())
762
+ # print(traceback.format_exc())
776
763
safe_msg , status_code = sanitize_db_error_message (e )
777
764
return jsonify ({
778
765
"status" : "error" ,
@@ -790,11 +777,11 @@ def data_loader_ingest_data():
790
777
data_loader_params = data .get ('data_loader_params' )
791
778
table_name = data .get ('table_name' )
792
779
793
- if data_loader_type not in available_data_loaders :
794
- return jsonify ({"status" : "error" , "message" : f"Invalid data loader type. Must be one of: { ', ' .join (available_data_loaders .keys ())} " }), 400
780
+ if data_loader_type not in DATA_LOADERS :
781
+ return jsonify ({"status" : "error" , "message" : f"Invalid data loader type. Must be one of: { ', ' .join (DATA_LOADERS .keys ())} " }), 400
795
782
796
783
with db_manager .connection (session ['session_id' ]) as duck_db_conn :
797
- data_loader = available_data_loaders [data_loader_type ](data_loader_params , duck_db_conn )
784
+ data_loader = DATA_LOADERS [data_loader_type ](data_loader_params , duck_db_conn )
798
785
data_loader .ingest_data (table_name )
799
786
800
787
return jsonify ({
0 commit comments