Final project commit: MTGJSON data integration and backend API
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
"""
|
||||
MTG Card Data Loader Trigger
|
||||
|
||||
Integrates with the card data loading process to automatically:
|
||||
1. Determine interactions for new cards
|
||||
2. Store interactions in the database
|
||||
3. Update interaction statistics
|
||||
4. Queue low-confidence interactions for review
|
||||
|
||||
This script is called after cards are loaded into the database.
|
||||
"""
|
||||
import json
|
||||
import logging
|
||||
import sys
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
# Add parent directory to path for imports
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
from interaction_pipeline import MTGInteractionPipeline
|
||||
|
||||
|
||||
# Configure logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def load_cards_from_file(file_path: str) -> list:
|
||||
"""
|
||||
Load cards from a JSON file.
|
||||
|
||||
Args:
|
||||
file_path: Path to JSON file containing card data
|
||||
|
||||
Returns:
|
||||
List of card dictionaries
|
||||
"""
|
||||
with open(file_path, 'r') as f:
|
||||
cards = json.load(f)
|
||||
|
||||
logger.info(f"Loaded {len(cards)} cards from {file_path}")
|
||||
return cards
|
||||
|
||||
|
||||
def trigger_interaction_processing(
|
||||
new_cards: list,
|
||||
set_code: str = None,
|
||||
db_url: str = None,
|
||||
min_confidence: float = 0.5,
|
||||
):
|
||||
"""
|
||||
Trigger interaction processing for new cards.
|
||||
|
||||
This function is called after cards are loaded into the database.
|
||||
|
||||
Args:
|
||||
new_cards: List of new card dictionaries
|
||||
set_code: Set code for the new cards
|
||||
db_url: Database URL (optional, uses default if not provided)
|
||||
min_confidence: Minimum confidence to auto-store interactions
|
||||
"""
|
||||
# Database URL from environment or default
|
||||
if not db_url:
|
||||
db_url = "postgresql+psycopg2://mtgonline:mtgonline_pass@172.18.0.2:5432/mtgdata"
|
||||
|
||||
logger.info("=" * 60)
|
||||
logger.info("MTG Card Interaction Processing Trigger")
|
||||
logger.info("=" * 60)
|
||||
logger.info(f"New cards: {len(new_cards)}")
|
||||
logger.info(f"Set code: {set_code or 'all sets'}")
|
||||
logger.info(f"Min confidence: {min_confidence}")
|
||||
logger.info("=" * 60)
|
||||
|
||||
# Initialize pipeline
|
||||
pipeline = MTGInteractionPipeline(db_url)
|
||||
|
||||
try:
|
||||
# Run rolling update
|
||||
pipeline.run_rolling_update(new_cards, set_code)
|
||||
|
||||
# Get statistics
|
||||
stats = pipeline.get_pipeline_stats()
|
||||
|
||||
# Log results
|
||||
logger.info("=" * 60)
|
||||
logger.info("Processing Complete")
|
||||
logger.info(f" Cards processed: {stats['cards_processed']}")
|
||||
logger.info(f" Interactions determined: {stats['interactions_determined']}")
|
||||
logger.info(f" Interactions stored: {stats['interactions_stored']}")
|
||||
logger.info(f" Interactions in review queue: {stats['interactions_review_queue']}")
|
||||
logger.info(f" Errors: {stats['errors']}")
|
||||
logger.info("=" * 60)
|
||||
|
||||
return stats
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error processing interactions: {e}")
|
||||
raise
|
||||
|
||||
finally:
|
||||
pipeline.close()
|
||||
|
||||
|
||||
def main():
|
||||
"""Main entry point."""
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Process interactions for new MTG cards"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--cards-file",
|
||||
type=str,
|
||||
help="Path to JSON file containing new cards",
|
||||
required=True,
|
||||
)
|
||||
parser.add_argument(
|
||||
"--set-code",
|
||||
type=str,
|
||||
help="Set code for the new cards",
|
||||
default=None,
|
||||
)
|
||||
parser.add_argument(
|
||||
"--db-url",
|
||||
type=str,
|
||||
help="Database URL (optional)",
|
||||
default=None,
|
||||
)
|
||||
parser.add_argument(
|
||||
"--min-confidence",
|
||||
type=float,
|
||||
help="Minimum confidence to auto-store interactions",
|
||||
default=0.5,
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Load cards from file
|
||||
new_cards = load_cards_from_file(args.cards_file)
|
||||
|
||||
# Trigger processing
|
||||
trigger_interaction_processing(
|
||||
new_cards=new_cards,
|
||||
set_code=args.set_code,
|
||||
db_url=args.db_url,
|
||||
min_confidence=args.min_confidence,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user