paper-dynasty-card-creation/scripts/update_scouting.py
Cal Corum 0a17745389 Run black and ruff across entire codebase
Standardize formatting with black and apply ruff auto-fixes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 14:24:33 -05:00

86 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Quick scouting update script for Paper Dynasty.
This script runs from the card-creation directory and:
1. Runs scouting_batters.py to generate batting reports
2. Runs scouting_pitchers.py to generate pitching reports
3. Uploads generated CSV files to database server via SSH
Usage:
cd /mnt/NV2/Development/paper-dynasty/card-creation
uv run scripts/update_scouting.py
"""
import subprocess
import sys
from pathlib import Path
import logging
logging.basicConfig(level=logging.INFO, format="%(message)s")
logger = logging.getLogger(__name__)
def run_command(cmd: list[str], description: str) -> bool:
"""Run a command and return success status."""
logger.info(f"{description}...")
try:
subprocess.run(cmd, check=True, cwd=Path(__file__).parent.parent)
logger.info(f"{description} complete")
return True
except subprocess.CalledProcessError as e:
logger.error(f"{description} failed: {e}")
return False
def main():
"""Execute the scouting update workflow."""
logger.info("=" * 60)
logger.info("Paper Dynasty - Scouting Update")
logger.info("=" * 60)
# Step 1: Generate batting scouting
if not run_command(
["uv", "run", "scouting_batters.py"], "Generating batting scouting reports"
):
return 1
# Step 2: Generate pitching scouting
if not run_command(
["uv", "run", "scouting_pitchers.py"], "Generating pitching scouting reports"
):
return 1
# Step 3: Verify files exist
scouting_dir = Path(__file__).parent.parent / "scouting"
required_files = [
"batting-basic.csv",
"batting-ratings.csv",
"pitching-basic.csv",
"pitching-ratings.csv",
]
logger.info("→ Verifying generated files...")
missing = [f for f in required_files if not (scouting_dir / f).exists()]
if missing:
logger.error(f"✗ Missing files: {', '.join(missing)}")
return 1
logger.info(f"✓ All {len(required_files)} files verified")
# Step 4: Upload to database server
files_to_upload = [str(scouting_dir / f) for f in required_files]
if not run_command(
["scp", *files_to_upload, "akamai:/root/container-data/paper-dynasty/storage/"],
"Uploading files to database server",
):
return 1
logger.info("=" * 60)
logger.info("✓ Scouting update complete!")
logger.info("=" * 60)
return 0
if __name__ == "__main__":
sys.exit(main())