from django.db import migrations MAJOR_ARCANA = [ (0, "The Fool", "the-fool", ["beginnings", "spontaneity", "freedom"], ["recklessness", "naivety", "risk"]), (1, "The Magician", "the-magician", ["willpower", "skill", "resourcefulness"], ["manipulation", "untapped potential", "deceit"]), (2, "The High Priestess", "the-high-priestess", ["intuition", "mystery", "inner knowledge"], ["secrets", "disconnection", "withdrawal"]), (3, "The Empress", "the-empress", ["fertility", "abundance", "nurturing"], ["dependence", "smothering", "creative block"]), (4, "The Emperor", "the-emperor", ["authority", "structure", "stability"], ["rigidity", "domination", "inflexibility"]), (5, "The Hierophant", "the-hierophant", ["tradition", "conformity", "institutions"], ["rebellion", "unconventionality", "challenge"]), (6, "The Lovers", "the-lovers", ["love", "harmony", "choice"], ["disharmony", "imbalance", "misalignment"]), (7, "The Chariot", "the-chariot", ["control", "willpower", "victory"], ["aggression", "lack of direction", "defeat"]), (8, "Strength", "strength", ["courage", "patience", "compassion"], ["self-doubt", "weakness", "insecurity"]), (9, "The Hermit", "the-hermit", ["introspection", "guidance", "solitude"], ["isolation", "loneliness", "withdrawal"]), (10, "Wheel of Fortune", "wheel-of-fortune", ["change", "cycles", "fate"], ["bad luck", "resistance", "clinging to control"]), (11, "Justice", "justice", ["fairness", "truth", "cause and effect"], ["injustice", "dishonesty", "avoidance"]), (12, "The Hanged Man", "the-hanged-man", ["pause", "surrender", "new perspective"], ["stalling", "resistance", "indecision"]), (13, "Death", "death", ["endings", "transition", "transformation"], ["fear of change", "stagnation", "resistance"]), (14, "Temperance", "temperance", ["balance", "patience", "moderation"], ["imbalance", "excess", "lack of harmony"]), (15, "The Devil", "the-devil", ["bondage", "materialism", "shadow self"], ["detachment", "freedom", "releasing control"]), (16, "The Tower", "the-tower", ["sudden change", "upheaval", "revelation"], ["avoidance", "fear of change", "delaying disaster"]), (17, "The Star", "the-star", ["hope", "renewal", "inspiration"], ["despair", "insecurity", "hopelessness"]), (18, "The Moon", "the-moon", ["illusion", "fear", "the unconscious"], ["confusion", "misinterpretation", "clarity"]), (19, "The Sun", "the-sun", ["positivity", "success", "vitality"], ["negativity", "depression", "sadness"]), (20, "Judgement", "judgement", ["reflection", "reckoning", "absolution"], ["self-doubt", "lack of self-awareness", "loathing"]), (21, "The World", "the-world", ["completion", "integration", "accomplishment"], ["incompletion", "no closure", "shortcuts"]), ] MINOR_SUITS = [ ("WANDS", "wands"), ("CUPS", "cups"), ("SWORDS", "swords"), ("PENTACLES", "pentacles"), ] MINOR_NAMES = [ (1, "Ace", "ace"), (2, "Two", "two"), (3, "Three", "three"), (4, "Four", "four"), (5, "Five", "five"), (6, "Six", "six"), (7, "Seven", "seven"), (8, "Eight", "eight"), (9, "Nine", "nine"), (10, "Ten", "ten"), (11, "Page", "page"), (12, "Knight", "knight"), (13, "Queen", "queen"), (14, "King", "king"), ] # Keywords: [suit][number-1] → (upright_list, reversed_list) MINOR_KEYWORDS = { "WANDS": [ (["inspiration", "new venture", "spark"], ["delays", "lack of motivation", "false start"]), (["planning", "progress", "decisions"], ["impatience", "lack of planning", "hesitation"]), (["expansion", "foresight", "enterprise"], ["obstacles", "lack of foresight", "delays"]), (["celebration", "harmony", "homecoming"], ["lack of support", "transience", "home conflicts"]), (["conflict", "competition", "tension"], ["avoiding conflict", "compromise", "truce"]), (["victory", "recognition", "progress"], ["excess pride", "lack of recognition", "fall"]), (["challenge", "courage", "competition"], ["anxiety", "giving up", "overwhelmed"]), (["rapid action", "adventure", "change"], ["haste", "scattered energy", "delays"]), (["resilience", "persistence", "last stand"], ["exhaustion", "giving up", "surrender"]), (["completion", "celebration", "travel"], ["burdens", "oppression", "carrying too much"]), (["exploration", "enthusiasm", "adventure"], ["hasty decisions", "scattered energy", "immaturity"]), (["energy", "passion", "adventure"], ["scattered energy", "frustration", "aggression"]), (["confidence", "independence", "courage"], ["selfishness", "jealousy", "insecurity"]), (["big picture", "leadership", "vision"], ["impulsiveness", "haste", "overconfidence"]), ], "CUPS": [ (["new feelings", "intuition", "opportunity"], ["blocked creativity", "emptiness", "hesitation"]), (["partnership", "unity", "celebration"], ["imbalance", "broken bonds", "misalignment"]), (["creativity", "community", "abundance"], ["independence", "isolation", "looking inward"]), (["contemplation", "apathy", "reevaluation"], ["withdrawal", "boredom", "seeking motivation"]), (["loss", "grief", "disappointment"], ["acceptance", "moving on", "forgiveness"]), (["nostalgia", "reunion", "joy"], ["living in the past", "naivety", "unrealistic"]), (["illusion", "fantasy", "wishful thinking"], ["alignment", "clarity", "sobriety"]), (["disappointment", "abandonment", "walking away"], ["hopelessness", "aimlessness", "stagnation"]), (["contentment", "fulfilment", "satisfaction"], ["inner happiness", "materialism", "indulgence"]), (["divine love", "bliss", "fulfilment"], ["inner happiness", "alignment", "personal values"]), (["sensitivity", "creativity", "intuition"], ["insecurity", "emotional immaturity", "creative blocks"]), (["compassion", "romanticism", "diplomacy"], ["moodiness", "emotional manipulation", "deception"]), (["compassion", "empathy", "nurturing"], ["emotional insecurity", "over-giving", "neglect"]), (["emotional maturity", "diplomacy", "wisdom"], ["manipulation", "moodiness", "coldness"]), ], "SWORDS": [ (["raw power", "breakthrough", "clarity"], ["confusion", "brutality", "mental chaos"]), (["difficult choices", "stalemate", "truce"], ["indecision", "lies", "confusion"]), (["heartbreak", "sorrow", "grief"], ["recovery", "forgiveness", "moving on"]), (["rest", "restoration", "retreat"], ["restlessness", "burnout", "illness"]), (["defeat", "change", "transition"], ["resistance to change", "inability to move"]), (["victory", "success", "ambition"], ["an eye for an eye", "dishonour", "manipulation"]), (["deception", "trickery", "tactics"], ["imposter syndrome", "coming clean", "rethinking"]), (["restriction", "isolation", "imprisonment"], ["self-limiting beliefs", "inner critic", "opening up"]), (["anxiety", "worry", "fear"], ["recovery from anxiety", "inner turmoil", "secrets"]), (["ruin", "painful endings", "loss"], ["recovery", "regeneration", "resisting an end"]), (["new ideas", "mental agility", "curiosity"], ["manipulation", "all talk no action", "ruthlessness"]), (["action", "impulsiveness", "ambition"], ["no direction", "disregard for consequences"]), (["clarity", "directness", "structure"], ["coldness", "cruelty", "manipulation"]), (["mental clarity", "truth", "authority"], ["abuse of power", "manipulation", "coldness"]), ], "PENTACLES": [ (["opportunity", "new venture", "manifestation"], ["lost opportunity", "lack of planning", "scarcity"]), (["juggling resources", "flexibility", "fun"], ["imbalance", "disorganisation", "overwhelm"]), (["teamwork", "building", "apprenticeship"], ["lack of teamwork", "disharmony", "misalignment"]), (["stability", "security", "conservation"], ["greed", "stinginess", "possessiveness"]), (["isolation", "insecurity", "worry"], ["recovery from loss", "overcoming hardship"]), (["generosity", "charity", "community"], ["strings attached", "power dynamics", "inequality"]), (["hard work", "perseverance", "diligence"], ["lack of reward", "laziness", "low quality"]), (["apprenticeship", "education", "skill"], ["perfectionism", "misdirected activity", "misuse"]), (["abundance", "luxury", "self-sufficiency"], ["overindulgence", "superficiality", "materialism"]), (["wealth", "financial security", "achievement"], ["financial failure", "greed", "lost success"]), (["ambition", "diligence", "management"], ["underhandedness", "greediness", "unethical"]), (["hard work", "productivity", "routine"], ["laziness", "obsession with work", "burnout"]), (["nurturing", "practical", "abundance"], ["financial dependence", "smothering", "insecurity"]), (["abundance", "prosperity", "security"], ["greed", "indulgence", "sensual obsession"]), ], } def seed_tarot_cards(apps, schema_editor): TarotCard = apps.get_model("epic", "TarotCard") # Major Arcana for number, name, slug, upright, reversed_ in MAJOR_ARCANA: TarotCard.objects.create( name=name, arcana="MAJOR", suit=None, number=number, slug=slug, keywords_upright=upright, keywords_reversed=reversed_, ) # Minor Arcana for suit_code, suit_slug in MINOR_SUITS: for number, rank_name, rank_slug in MINOR_NAMES: upright, reversed_ = MINOR_KEYWORDS[suit_code][number - 1] TarotCard.objects.create( name=f"{rank_name} of {suit_code.capitalize()}", arcana="MINOR", suit=suit_code, number=number, slug=f"{rank_slug}-of-{suit_slug}", keywords_upright=upright, keywords_reversed=reversed_, ) def unseed_tarot_cards(apps, schema_editor): TarotCard = apps.get_model("epic", "TarotCard") TarotCard.objects.all().delete() class Migration(migrations.Migration): dependencies = [ ("epic", "0007_tarotcard_tarotdeck"), ] operations = [ migrations.RunPython(seed_tarot_cards, reverse_code=unseed_tarot_cards), ]