"""
Absfuyu: Tarot
--------------
Tarot stuff
Version: 5.1.0
Date updated: 10/03/2025 (dd/mm/yyyy)
Usage:
------
>>> tarot_deck = Tarot()
>>> print(tarot_deck.random_card())
"""
# Module level
# ---------------------------------------------------------------------------
__all__ = ["Tarot", "TarotCard"]
# Library
# ---------------------------------------------------------------------------
import random
from absfuyu.core import BaseClass, versionadded
from absfuyu.logger import logger
from absfuyu.pkg_data import DataList, DataLoader
# Class
# ---------------------------------------------------------------------------
[docs]
@versionadded("2.6.0")
class TarotCard:
"""Tarot card"""
def __init__(
self,
name: str,
rank: int,
suit: str,
meanings: dict[str, list[str]],
keywords: list[str],
fortune_telling: list[str],
) -> None:
self.name = name.title()
self.rank = rank
self.suit = suit
self.meanings = meanings
self.keywords = keywords
self.fortune_telling = fortune_telling
def __str__(self) -> str:
return f"{self.__class__.__name__}({self.name})"
def __repr__(self) -> str:
return self.__str__()
[docs]
@versionadded("2.6.0")
class Tarot(BaseClass):
"""Tarot data"""
def __init__(self) -> None:
self.data_location = DataList.TAROT
def __str__(self) -> str:
return f"{self.__class__.__name__}()"
@property
def tarot_deck(self) -> list[TarotCard]:
"""
Load pickled tarot data
:rtype: list[TarotCard]
"""
tarot_data: list = DataLoader(self.data_location).load()
logger.debug(f"{len(tarot_data)} tarot cards loaded")
return [
TarotCard(
name=x["name"],
rank=x["rank"],
suit=x["suit"],
meanings=x["meanings"],
keywords=x["keywords"],
fortune_telling=x["fortune_telling"],
)
for x in tarot_data
]
[docs]
def random_card(self) -> TarotCard:
"""
Pick a random tarot card
Returns
-------
TarotCard
Random Tarot card
"""
return random.choice(self.tarot_deck)