@@ -59,10 +59,11 @@ def execute_pipeline(
5959 cleaning_config : dict [str , Any ] | None = None ,
6060 validation_config : dict [str , Any ] | None = None ,
6161 normalize : bool = False ,
62+ df_raw : pd .DataFrame | None = None ,
6263) -> PipelineResult :
6364 """
6465 Execute the unified 5-step DataPrep Pipeline:
65- 1. Ingestion
66+ 1. Ingestion (skipped if df_raw is provided)
6667 2. Validation (Before)
6768 3. Cleaning
6869 4. Transformation
@@ -77,6 +78,7 @@ def execute_pipeline(
7778 cleaning_config: Optional cleaning settings dict override.
7879 validation_config: Optional validation threshold dict override.
7980 normalize: Whether to apply min-max normalization to numeric columns.
81+ df_raw: Optional in-memory raw DataFrame to bypass file ingestion.
8082
8183 Returns:
8284 PipelineResult with execution status, DataFrames, reports, and execution time.
@@ -95,26 +97,29 @@ def execute_pipeline(
9597
9698 # ── STEP 1: INGEST ──────────────────────────────────────────────────────
9799 logger .info ("[1/5] INGESTION" )
98- try :
99- if file_format == "excel" :
100- df_raw = load_excel (input_path )
101- elif file_format == "api" :
102- if not api_url :
103- err_msg = "API URL required when format is 'api'"
104- logger .error (err_msg )
105- return PipelineResult (success = False , error_message = err_msg )
106- df_raw = load_json_api (api_url )
107- else :
108- df_raw = load_csv (input_path )
109- except FileNotFoundError as e :
110- err_msg = f"Input file not found: { e } "
111- logger .error (err_msg )
112- logger .error ("Run 'python generate_dataset.py' first to create test data." )
113- return PipelineResult (success = False , error_message = err_msg )
114- except Exception as e :
115- err_msg = f"Ingestion error: { e } "
116- logger .error (err_msg , exc_info = True )
117- return PipelineResult (success = False , error_message = err_msg )
100+ if df_raw is None :
101+ try :
102+ if file_format == "excel" :
103+ df_raw = load_excel (input_path )
104+ elif file_format == "api" :
105+ if not api_url :
106+ err_msg = "API URL required when format is 'api'"
107+ logger .error (err_msg )
108+ return PipelineResult (success = False , error_message = err_msg )
109+ df_raw = load_json_api (api_url )
110+ else :
111+ df_raw = load_csv (input_path )
112+ except FileNotFoundError as e :
113+ err_msg = f"Input file not found: { e } "
114+ logger .error (err_msg )
115+ logger .error ("Run 'python generate_dataset.py' first to create test data." )
116+ return PipelineResult (success = False , error_message = err_msg )
117+ except Exception as e :
118+ err_msg = f"Ingestion error: { e } "
119+ logger .error (err_msg , exc_info = True )
120+ return PipelineResult (success = False , error_message = err_msg )
121+ else :
122+ logger .info (f"Using in-memory DataFrame ({ len (df_raw ):,} rows)" )
118123
119124 try :
120125 # ── STEP 2: VALIDATE (BEFORE) ─────────────────────────────────────────
0 commit comments