Generate a training dataset using get_historical_features and return as JSON (downloadable).
(request: TrainingExportRequest)
| 654 | |
| 655 | @rest_app.post("/training-dataset/export") |
| 656 | def export_training_dataset(request: TrainingExportRequest): |
| 657 | """Generate a training dataset using get_historical_features and return as JSON (downloadable).""" |
| 658 | try: |
| 659 | from datetime import datetime, timezone |
| 660 | |
| 661 | entity_df = pd.DataFrame(request.entity_df) |
| 662 | |
| 663 | if "event_timestamp" not in entity_df.columns: |
| 664 | if request.end_date: |
| 665 | ts = pd.Timestamp(request.end_date, tz="UTC") |
| 666 | else: |
| 667 | ts = pd.Timestamp(datetime.now(timezone.utc)) |
| 668 | entity_df["event_timestamp"] = ts |
| 669 | |
| 670 | fs = store.get_feature_service(request.feature_service) |
| 671 | training_df = store.get_historical_features( |
| 672 | entity_df=entity_df, |
| 673 | features=fs, |
| 674 | ).to_df() |
| 675 | |
| 676 | result = training_df.to_dict(orient="records") |
| 677 | for row in result: |
| 678 | for k, v in row.items(): |
| 679 | if pd.isna(v): |
| 680 | row[k] = None |
| 681 | elif hasattr(v, "isoformat"): |
| 682 | row[k] = v.isoformat() |
| 683 | |
| 684 | return { |
| 685 | "data": result, |
| 686 | "columns": list(training_df.columns), |
| 687 | "row_count": len(training_df), |
| 688 | "feature_service": request.feature_service, |
| 689 | } |
| 690 | except Exception: |
| 691 | logger.exception("Training dataset export failed") |
| 692 | return _safe_error_response("Training dataset export") |
| 693 | |
| 694 | @rest_app.get("/webhook/config/{label_view_name}") |
| 695 | def webhook_config(label_view_name: str): |
nothing calls this directly
no test coverage detected