Creating a program to allow me to better manage my Magic cards and even make decks from it.

This commit is contained in:
2025-06-03 17:00:24 -04:00
commit b537a2f844
10 changed files with 1388 additions and 0 deletions

60
models.py Normal file
View File

@ -0,0 +1,60 @@
# models.py
from dataclasses import dataclass, field
from typing import Optional, List
@dataclass
class Card:
"""Represents an MTG card (subset of Scryfalls data), including color identity."""
id: str
name: str
mana_cost: Optional[str]
type_line: str
oracle_text: Optional[str]
set_name: str
rarity: str
image_url: Optional[str]
colors: List[str] # e.g. ["R"], ["W","U"], or [] for colorless
@classmethod
def from_scryfall_json(cls, data: dict) -> "Card":
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=data.get("image_uris", {}).get("normal"),
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