CP_Assessment_engine/scripts/batch_post_process.py
2026-02-10 12:59:40 +05:30

90 lines
2.8 KiB
Python

"""
Batch Post-Processor: Colors all domain files with omission (green) and reverse-scored (red) headers
"""
import sys
import io
from pathlib import Path
# Fix Windows console encoding
if sys.platform == 'win32':
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
BASE_DIR = Path(__file__).resolve().parent.parent
OUTPUT_DIR = BASE_DIR / "output" / "full_run"
MAPPING_FILE = BASE_DIR / "data" / "AllQuestions.xlsx"
# Import post_processor function
sys.path.insert(0, str(BASE_DIR / "scripts"))
from post_processor import post_process_file
def batch_post_process():
"""Post-process all domain files"""
print("=" * 80)
print("🎨 BATCH POST-PROCESSING: Coloring Headers")
print("=" * 80)
print()
if not MAPPING_FILE.exists():
print(f"❌ ERROR: Mapping file not found: {MAPPING_FILE}")
return False
# Domain files to process
domain_files = {
'adolescense': [
'Personality_14-17.xlsx',
'Grit_14-17.xlsx',
'Emotional_Intelligence_14-17.xlsx',
'Vocational_Interest_14-17.xlsx',
'Learning_Strategies_14-17.xlsx'
],
'adults': [
'Personality_18-23.xlsx',
'Grit_18-23.xlsx',
'Emotional_Intelligence_18-23.xlsx',
'Vocational_Interest_18-23.xlsx',
'Learning_Strategies_18-23.xlsx'
]
}
total_files = 0
processed_files = 0
failed_files = []
for age_group, files in domain_files.items():
print(f"📂 Processing {age_group.upper()} files...")
print("-" * 80)
for file_name in files:
total_files += 1
file_path = OUTPUT_DIR / age_group / "5_domain" / file_name
if not file_path.exists():
print(f" ⚠️ SKIP: {file_name} (file not found)")
failed_files.append((file_name, "File not found"))
continue
try:
print(f" 🎨 Processing: {file_name}")
post_process_file(str(file_path), str(MAPPING_FILE))
processed_files += 1
print()
except Exception as e:
print(f" ❌ ERROR processing {file_name}: {e}")
failed_files.append((file_name, str(e)))
print()
print("=" * 80)
print(f"✅ BATCH POST-PROCESSING COMPLETE")
print(f" Processed: {processed_files}/{total_files} files")
if failed_files:
print(f" Failed: {len(failed_files)} files")
for file_name, error in failed_files:
print(f" - {file_name}: {error}")
print("=" * 80)
return len(failed_files) == 0
if __name__ == "__main__":
success = batch_post_process()
sys.exit(0 if success else 1)