Files
MTGC/models.py

64 lines
2.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# models.py
from dataclasses import dataclass, field
from typing import Optional, List
@dataclass
class Card:
"""Represents an MTG card (subset of Scryfalls data), including both full image and thumbnail."""
id: str
name: str
mana_cost: Optional[str]
type_line: str
oracle_text: Optional[str]
set_name: str
rarity: str
image_url: Optional[str] # “normal” size or better
thumbnail_url: Optional[str] # small thumbnail
colors: List[str] # e.g. ["R"], ["W","U"], or [] for colorless
@classmethod
def from_scryfall_json(cls, data: dict) -> "Card":
image_uris = data.get("image_uris", {}) or {}
return cls(
id=data["id"],
name=data["name"],
mana_cost=data.get("mana_cost"),
type_line=data["type_line"],
oracle_text=data.get("oracle_text"),
set_name=data["set_name"],
rarity=data["rarity"],
image_url=image_uris.get("normal") ,
thumbnail_url=image_uris.get("small"),
colors=data.get("colors", []),
)
@dataclass
class Deck:
"""Keeps track of cards and quantities in a deck."""
name: str
cards: dict[str, int] = field(default_factory=dict)
# Example: {"Lightning Bolt": 4, "Island": 24, ...}
def add_card(self, card_name: str, qty: int = 1):
self.cards[card_name] = self.cards.get(card_name, 0) + qty
def remove_card(self, card_name: str, qty: int = 1):
if card_name in self.cards:
new_qty = self.cards[card_name] - qty
if new_qty > 0:
self.cards[card_name] = new_qty
else:
del self.cards[card_name]
def total_cards(self) -> int:
return sum(self.cards.values())
def to_dict(self) -> dict:
return {"name": self.name, "cards": self.cards}
@classmethod
def from_dict(cls, data: dict) -> "Deck":
deck = cls(name=data["name"])
deck.cards = data["cards"]
return deck