Files
wiki-tcg/backend/give_card.py
2026-03-26 00:51:25 +01:00

64 lines
1.5 KiB
Python

"""
Give a user a specific card generated from a Wikipedia page title.
Usage:
python give_card.py <username> <page_title>
Example:
python give_card.py nikolaj "Marie Curie"
"""
import sys
import asyncio
from dotenv import load_dotenv
load_dotenv()
from database import SessionLocal
from models import User as UserModel, Card as CardModel
from card import _get_specific_card_async
import uuid
async def main(username: str, page_title: str) -> None:
db = SessionLocal()
try:
user = db.query(UserModel).filter(UserModel.username == username).first()
if not user:
print(f"Error: user '{username}' not found")
sys.exit(1)
print(f"Generating card for '{page_title}'...")
card = await _get_specific_card_async(page_title)
if not card:
print(f"Error: could not generate a card for '{page_title}'")
sys.exit(1)
db_card = CardModel(
id=uuid.uuid4(),
user_id=user.id,
name=card.name,
image_link=card.image_link or None,
card_rarity=card.card_rarity.name,
card_type=card.card_type.name,
text=card.text or None,
attack=card.attack,
defense=card.defense,
cost=card.cost,
)
db.add(db_card)
db.commit()
print(f"Gave '{card.name}' ({card.card_rarity.name} {card.card_type.name}) to {username}")
print(f" ATK {card.attack} DEF {card.defense} Cost {card.cost}")
finally:
db.close()
if __name__ == "__main__":
if len(sys.argv) != 3:
print(__doc__)
sys.exit(1)
asyncio.run(main(sys.argv[1], sys.argv[2]))