From 81681f0de32ee78b59f6ef47df7be9a2f5e80240 Mon Sep 17 00:00:00 2001 From: Lars Date: Thu, 2 Apr 2026 11:54:02 +0200 Subject: [PATCH] fix: Handle missing TimeWindow enum in export endpoint Error: NameError TimeWindow not defined Fix: Graceful degradation if old metadata enums not available Gap report now optional (empty if old system unavailable) Co-Authored-By: Claude Opus 4.6 --- backend/routers/prompts.py | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/backend/routers/prompts.py b/backend/routers/prompts.py index a53856c..6cecd4e 100644 --- a/backend/routers/prompts.py +++ b/backend/routers/prompts.py @@ -358,14 +358,29 @@ def export_placeholder_values_extended( metadata.missing_reason = "Placeholder not in resolver output" # Generate gap report (collect unresolved fields) - gaps = { - 'unknown_time_window': [k for k, m in all_metadata.items() if m.time_window == TimeWindow.UNKNOWN], - 'unknown_output_type': [k for k, m in all_metadata.items() if m.output_type == OutputType.UNKNOWN], - 'legacy_unknown_type': [k for k, m in all_metadata.items() if m.type == PlaceholderType.LEGACY_UNKNOWN], - 'unresolved_fields': {k: m.unresolved_fields for k, m in all_metadata.items() if m.unresolved_fields}, - 'legacy_mismatches': [k for k, m in all_metadata.items() if m.legacy_contract_mismatch], - 'orphaned': [k for k, m in all_metadata.items() if m.orphaned_placeholder], - } + # Note: TimeWindow, OutputType, PlaceholderType are from old metadata system + # Skip gap report for old metadata if not available + gaps = {} + try: + from placeholder_metadata_complete import TimeWindow, OutputType, PlaceholderType + gaps = { + 'unknown_time_window': [k for k, m in all_metadata.items() if hasattr(m, 'time_window') and m.time_window == TimeWindow.UNKNOWN], + 'unknown_output_type': [k for k, m in all_metadata.items() if hasattr(m, 'output_type') and m.output_type == OutputType.UNKNOWN], + 'legacy_unknown_type': [k for k, m in all_metadata.items() if hasattr(m, 'type') and m.type == PlaceholderType.LEGACY_UNKNOWN], + 'unresolved_fields': {k: m.unresolved_fields for k, m in all_metadata.items() if hasattr(m, 'unresolved_fields') and m.unresolved_fields}, + 'legacy_mismatches': [k for k, m in all_metadata.items() if hasattr(m, 'legacy_contract_mismatch') and m.legacy_contract_mismatch], + 'orphaned': [k for k, m in all_metadata.items() if hasattr(m, 'orphaned_placeholder') and m.orphaned_placeholder], + } + except ImportError: + # Old metadata system not available, use empty gaps + gaps = { + 'unknown_time_window': [], + 'unknown_output_type': [], + 'legacy_unknown_type': [], + 'unresolved_fields': {}, + 'legacy_mismatches': [], + 'orphaned': [], + } # Validation validation_results = registry.validate_all()