64 lines
1.5 KiB
Python
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]))
|