""" Export Utilities - Handle various export formats """ import json import csv import io from typing import Dict, List from datetime import datetime def save_json_file(data: Dict, prefix: str = "export") -> str: """ Save data to JSON file and return filepath. Args: data: Data to save prefix: Filename prefix Returns: Path to saved file """ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"{prefix}_{timestamp}.json" with open(filename, 'w', encoding='utf-8') as f: json.dump(data, f, indent=2, ensure_ascii=False) return filename def survey_to_csv(survey_data: Dict) -> str: """ Convert survey to CSV format (one row per question). Args: survey_data: Survey dictionary Returns: Path to CSV file """ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"survey_{timestamp}.csv" with open(filename, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) # Write header writer.writerow(['Question ID', 'Question Text', 'Type', 'Options', 'Required', 'Help Text']) # Write questions for q in survey_data.get('questions', []): writer.writerow([ q.get('id', ''), q.get('question_text', ''), q.get('question_type', ''), '; '.join(q.get('options', [])) if q.get('options') else '', 'Yes' if q.get('required', False) else 'No', q.get('help_text', '') ]) return filename def responses_to_csv(responses: List[Dict], filename_prefix: str = "responses") -> str: """ Convert responses to CSV format. Args: responses: List of response dictionaries filename_prefix: Prefix for filename Returns: Path to CSV file """ if not responses: return None timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"{filename_prefix}_{timestamp}.csv" # Get all unique keys from all responses all_keys = set() for response in responses: if isinstance(response, dict): all_keys.update(response.keys()) fieldnames = sorted(all_keys) with open(filename, 'w', newline='', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=fieldnames) writer.writeheader() for response in responses: if isinstance(response, dict): writer.writerow(response) return filename def analysis_to_markdown_file(analysis_report: str, prefix: str = "analysis_report") -> str: """ Save analysis report to markdown file. Args: analysis_report: Markdown formatted report prefix: Filename prefix Returns: Path to markdown file """ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"{prefix}_{timestamp}.md" with open(filename, 'w', encoding='utf-8') as f: f.write(analysis_report) return filename def create_survey_package(survey_data: Dict) -> Dict[str, str]: """ Create a complete package of survey files (JSON, CSV, etc.). Args: survey_data: Survey dictionary Returns: Dictionary mapping format to filepath """ package = {} # Save JSON package['json'] = save_json_file(survey_data, "survey") # Save CSV package['csv'] = survey_to_csv(survey_data) return package