@@ -298,7 +298,8 @@ def get_training_set_from_view(self, training_view: str, features: Union[List[Fe
298298 r = make_request (self ._FS_URL , Endpoints .TRAINING_SET_FROM_VIEW , RequestType .POST , self ._basic_auth , { "view" : training_view },
299299 { "features" : features , "start_time" : start_time , "end_time" : end_time })
300300 sql = r ["sql" ]
301- tvw = r ["training_view" ]
301+ tvw = TrainingView (** r ["training_view" ])
302+ features = [Feature (** f ) for f in r ["features" ]]
302303
303304 # Link this to mlflow for model deployment
304305 if self .mlflow_ctx and not return_sql :
@@ -443,8 +444,8 @@ def describe_feature_sets(self) -> None:
443444
444445 print ('Available feature sets' )
445446 for desc in r :
446- fset = FeatureSet (** desc [ "feature_set" ])
447- features = [ Feature (** feature ) for feature in desc [ "features" ]]
447+ features = [ Feature (** feature ) for feature in desc . pop ( 'features' )]
448+ fset = FeatureSet (** desc )
448449 print ('-' * 23 )
449450 self ._feature_set_describe (fset , features )
450451
@@ -466,8 +467,8 @@ def describe_feature_set(self, schema_name: str, table_name: str) -> None:
466467 if not descs : raise SpliceMachineException (
467468 f"Feature Set { schema_name } .{ table_name } not found. Check name and try again." )
468469 desc = descs [0 ]
469- fset = FeatureSet (** desc [ "feature_set" ])
470- features = [ Feature (** feature ) for feature in desc [ "features" ]]
470+ features = [ Feature (** feature ) for feature in desc . pop ( "features" )]
471+ fset = FeatureSet (** desc )
471472 self ._feature_set_describe (fset , features )
472473
473474 def _feature_set_describe (self , fset : FeatureSet , features : List [Feature ]):
@@ -487,8 +488,8 @@ def describe_training_views(self) -> None:
487488
488489 print ('Available training views' )
489490 for desc in r :
490- tcx = TrainingView (** desc [ "training_view" ])
491- features = [ Feature (** f ) for f in desc [ "features" ]]
491+ features = [ Feature (** f ) for f in desc . pop ( 'features' )]
492+ tcx = TrainingView (** desc )
492493 print ('-' * 23 )
493494 self ._training_view_describe (tcx , features )
494495
@@ -504,8 +505,8 @@ def describe_training_view(self, training_view: str) -> None:
504505 descs = r
505506 if not descs : raise SpliceMachineException (f"Training view { training_view } not found. Check name and try again." )
506507 desc = descs [0 ]
507- tcx = TrainingView (** desc [ 'training_view' ])
508- feats = [ Feature (** f ) for f in desc [ 'features' ]]
508+ feats = [ Feature (** f ) for f in desc . pop ( 'features' )]
509+ tcx = TrainingView (** desc )
509510 self ._training_view_describe (tcx , feats )
510511
511512 def _training_view_describe (self , tcx : TrainingView , feats : List [Feature ]):
@@ -533,16 +534,19 @@ def get_training_set_from_deployment(self, schema_name: str, table_name: str):
533534
534535 r = make_request (self ._FS_URL , Endpoints .TRAINING_SET_FROM_DEPLOYMENT , RequestType .GET , self ._basic_auth ,
535536 { "schema" : schema_name , "table" : table_name })
536- metadata = r ["metadata" ]
537537
538- sql = r ["sql" ]
539- features = metadata ['FEATURES' ].split (',' )
540- tv_name = metadata ['NAME' ]
541- start_time = metadata ['TRAINING_SET_START_TS' ]
542- end_time = metadata ['TRAINING_SET_END_TS' ]
538+ metadata = r ['metadata' ]
539+ sql = r ['sql' ]
540+
541+ tv_name = metadata ['name' ]
542+ start_time = metadata ['training_set_start_ts' ]
543+ end_time = metadata ['training_set_end_ts' ]
544+
545+ tv = TrainingView (** r ['training_view' ]) if 'training_view' in r else None
546+ features = [Feature (** f ) for f in r ['features' ]]
543547
544548 if self .mlflow_ctx :
545- self .link_training_set_to_mlflow (features , start_time , end_time , tv_name )
549+ self .link_training_set_to_mlflow (features , start_time , end_time , tv )
546550 return self .splice_ctx .df (sql )
547551
548552 def remove_feature (self , name : str ):
@@ -556,6 +560,28 @@ def remove_feature(self, name: str):
556560 """
557561 make_request (self ._FS_URL , Endpoints .FEATURES , RequestType .DELETE , self ._basic_auth , { "name" : name })
558562
563+ def get_deployments (self , schema_name : str = None , table_name : str = None , training_set : str = None ):
564+ """
565+ Returns a list of all (or specified) available deployments
566+ :param schema_name: model schema name
567+ :param table_name: model table name
568+ :param training_set: training set name
569+ :return: List[Deployment] the list of Deployments as dicts
570+ """
571+ return make_request (self ._FS_URL , Endpoints .DEPLOYMENTS , RequestType .GET , self ._basic_auth ,
572+ { 'schema' : schema_name , 'table' : table_name , 'name' : training_set })
573+
574+ def get_training_set_features (self , training_set : str = None ):
575+ """
576+ Returns a list of all features from an available Training Set, as well as details about that Training Set
577+ :param training_set: training set name
578+ :return: TrainingSet as dict
579+ """
580+ r = make_request (self ._FS_URL , Endpoints .TRAINING_SET_FEATURES , RequestType .GET , self ._basic_auth ,
581+ { 'name' : training_set })
582+ r ['features' ] = [Feature (** f ) for f in r ['features' ]]
583+ return r
584+
559585 def _retrieve_model_data_sets (self , schema_name : str , table_name : str ):
560586 """
561587 Returns the training set dataframe and model table dataframe for a given deployed model.
@@ -790,6 +816,7 @@ def link_training_set_to_mlflow(self, features: Union[List[Feature], List[str]],
790816
791817 self .mlflow_ctx ._active_training_set : TrainingSet = ts
792818 ts ._register_metadata (self .mlflow_ctx )
819+
793820
794821 def set_feature_store_url (self , url : str ):
795822 self ._FS_URL = url
0 commit comments