66"""
77
88from pydantic import BaseModel , Field , field_validator
9- from typing import List , Optional , Dict , Any
9+ from typing import List , Optional , Dict , Any , Literal
1010from datetime import datetime
11+ from enum import Enum
12+
13+
14+ # Transformation types enum
15+ class TransformationType (str , Enum ):
16+ """Supported transformation types."""
17+ ENCODE = "encode"
18+ SCALE = "scale"
19+ IMPUTE = "impute"
20+ DROP_MISSING = "drop_missing"
21+ FILTER = "filter"
22+ AGGREGATE = "aggregate"
23+ DERIVE = "derive"
24+ NORMALIZE = "normalize"
25+ STANDARDIZE = "standardize"
26+ ONE_HOT_ENCODE = "one_hot_encode"
27+ LABEL_ENCODE = "label_encode"
28+ FILL_MISSING = "fill_missing"
29+ DROP_DUPLICATES = "drop_duplicates"
30+ OUTLIER_REMOVAL = "outlier_removal"
1131
1232
1333# Request Schemas
@@ -24,12 +44,7 @@ class TransformationStepRequest(BaseModel):
2444 @classmethod
2545 def validate_transformation_type (cls , v : str ) -> str :
2646 """Validate transformation_type is one of supported types."""
27- allowed_types = {
28- 'encode' , 'scale' , 'impute' , 'drop_missing' ,
29- 'filter' , 'aggregate' , 'derive' , 'normalize' ,
30- 'standardize' , 'one_hot_encode' , 'label_encode' ,
31- 'fill_missing' , 'drop_duplicates' , 'outlier_removal'
32- }
47+ allowed_types = {t .value for t in TransformationType }
3348 if v not in allowed_types :
3449 raise ValueError (f"transformation_type must be one of { allowed_types } , got: { v } " )
3550 return v
@@ -143,3 +158,111 @@ class TransformationDeleteResponse(BaseModel):
143158 status : str = Field (..., description = "Delete status" )
144159 config_id : str = Field (..., description = "Deleted configuration ID" )
145160 message : str = Field (..., description = "Success message" )
161+
162+
163+ # Additional schemas for transformation pipeline
164+
165+ class TransformationPipelineRequest (BaseModel ):
166+ """Request schema for transformation pipeline."""
167+
168+ dataset_id : str = Field (..., description = "Dataset ID" )
169+ transformations : List [TransformationStepRequest ] = Field (..., description = "Transformation steps" )
170+ save_as_recipe : bool = Field (default = False , description = "Save as recipe" )
171+ recipe_name : Optional [str ] = Field (None , description = "Recipe name" )
172+ recipe_description : Optional [str ] = Field (None , description = "Recipe description" )
173+
174+
175+ class RecipeStepRequest (BaseModel ):
176+ """Request schema for recipe step."""
177+
178+ type : str = Field (..., description = "Transformation type" )
179+ parameters : Dict [str , Any ] = Field (default_factory = dict )
180+ description : Optional [str ] = None
181+
182+
183+ class RecipeCreateRequest (BaseModel ):
184+ """Request schema for creating recipe."""
185+
186+ name : str = Field (..., description = "Recipe name" )
187+ description : Optional [str ] = None
188+ steps : List [RecipeStepRequest ] = Field (..., description = "Recipe steps" )
189+ dataset_id : Optional [str ] = None
190+ is_public : bool = Field (default = False )
191+ tags : List [str ] = Field (default_factory = list )
192+
193+
194+ class RecipeResponse (BaseModel ):
195+ """Response schema for recipe."""
196+
197+ id : str
198+ name : str
199+ description : Optional [str ] = None
200+ user_id : str
201+ steps : List [Dict [str , Any ]] = Field (default_factory = list )
202+ created_at : datetime
203+ updated_at : datetime
204+ is_public : bool = False
205+ tags : List [str ] = Field (default_factory = list )
206+ usage_count : int = 0
207+ rating : float = 0.0
208+
209+
210+ class RecipeListResponse (BaseModel ):
211+ """Response schema for recipe list."""
212+
213+ recipes : List [RecipeResponse ] = Field (default_factory = list )
214+ total : int
215+ page : int
216+ per_page : int
217+
218+
219+ class RecipeApplyRequest (BaseModel ):
220+ """Request schema for applying recipe."""
221+
222+ dataset_id : str = Field (..., description = "Dataset ID" )
223+
224+
225+ class RecipeExportRequest (BaseModel ):
226+ """Request schema for exporting recipe."""
227+
228+ language : str = Field (default = "python" , description = "Export language" )
229+
230+
231+ class RecipeExportResponse (BaseModel ):
232+ """Response schema for recipe export."""
233+
234+ recipe_name : str
235+ language : str
236+ code : str
237+
238+
239+ class AutoCleanRequest (BaseModel ):
240+ """Request schema for auto-clean operation."""
241+
242+ dataset_id : str = Field (..., description = "Dataset ID" )
243+ options : Dict [str , Any ] = Field (default_factory = dict )
244+
245+
246+ class TransformationSuggestionResponse (BaseModel ):
247+ """Response schema for transformation suggestions."""
248+
249+ suggestions : List [Dict [str , Any ]] = Field (default_factory = list )
250+ data_quality_score : float
251+ critical_issues : List [str ] = Field (default_factory = list )
252+
253+
254+ class ValidationRequest (BaseModel ):
255+ """Request schema for validation."""
256+
257+ dataset_id : str = Field (..., description = "Dataset ID" )
258+ transformations : List [TransformationStepRequest ] = Field (..., description = "Transformations to validate" )
259+
260+
261+ class ValidationResponse (BaseModel ):
262+ """Response schema for validation."""
263+
264+ is_valid : bool
265+ errors : List [str ] = Field (default_factory = list )
266+ warnings : List [str ] = Field (default_factory = list )
267+ info : List [str ] = Field (default_factory = list )
268+ suggestions : List [str ] = Field (default_factory = list )
0 commit comments