Jacks & Cavaliers replaced in Earthman deck w. Maids & Jacks; numerals or numbers + symbols added to cards; migrations made in apps.epic to rename cards; _tarot_fan.html partial updated accordingly
This commit is contained in:
82
src/apps/epic/migrations/0011_rename_earthman_court_cards.py
Normal file
82
src/apps/epic/migrations/0011_rename_earthman_court_cards.py
Normal file
@@ -0,0 +1,82 @@
|
||||
"""
|
||||
Data migration: rename Earthman court cards at positions 11 and 12.
|
||||
|
||||
Old naming (from 0010): Jack (11) / Cavalier (12)
|
||||
New naming: Maid (11) / Jack (12)
|
||||
|
||||
Must rename 11 → Maid first so the "jack-of-*-em" slugs are free
|
||||
before the 12s claim them.
|
||||
"""
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
SUITS = ["Wands", "Cups", "Swords", "Coins"]
|
||||
|
||||
|
||||
def rename_court_cards(apps, schema_editor):
|
||||
TarotCard = apps.get_model("epic", "TarotCard")
|
||||
DeckVariant = apps.get_model("epic", "DeckVariant")
|
||||
|
||||
earthman = DeckVariant.objects.filter(slug="earthman").first()
|
||||
if not earthman:
|
||||
return
|
||||
|
||||
# Step 1: Jack (11) → Maid — frees up jack-of-*-em slugs
|
||||
for suit in SUITS:
|
||||
suit_slug = suit.lower()
|
||||
TarotCard.objects.filter(
|
||||
deck_variant=earthman, number=11, slug=f"jack-of-{suit_slug}-em"
|
||||
).update(
|
||||
name=f"Maid of {suit}",
|
||||
slug=f"maid-of-{suit_slug}-em",
|
||||
)
|
||||
|
||||
# Step 2: Cavalier (12) → Jack — takes the now-free jack-of-*-em slugs
|
||||
for suit in SUITS:
|
||||
suit_slug = suit.lower()
|
||||
TarotCard.objects.filter(
|
||||
deck_variant=earthman, number=12, slug=f"cavalier-of-{suit_slug}-em"
|
||||
).update(
|
||||
name=f"Jack of {suit}",
|
||||
slug=f"jack-of-{suit_slug}-em",
|
||||
)
|
||||
|
||||
|
||||
def reverse_court_cards(apps, schema_editor):
|
||||
TarotCard = apps.get_model("epic", "TarotCard")
|
||||
DeckVariant = apps.get_model("epic", "DeckVariant")
|
||||
|
||||
earthman = DeckVariant.objects.filter(slug="earthman").first()
|
||||
if not earthman:
|
||||
return
|
||||
|
||||
# Step 1: Jack (12) → Cavalier — frees up jack-of-*-em slugs
|
||||
for suit in SUITS:
|
||||
suit_slug = suit.lower()
|
||||
TarotCard.objects.filter(
|
||||
deck_variant=earthman, number=12, slug=f"jack-of-{suit_slug}-em"
|
||||
).update(
|
||||
name=f"Cavalier of {suit}",
|
||||
slug=f"cavalier-of-{suit_slug}-em",
|
||||
)
|
||||
|
||||
# Step 2: Maid (11) → Jack
|
||||
for suit in SUITS:
|
||||
suit_slug = suit.lower()
|
||||
TarotCard.objects.filter(
|
||||
deck_variant=earthman, number=11, slug=f"maid-of-{suit_slug}-em"
|
||||
).update(
|
||||
name=f"Jack of {suit}",
|
||||
slug=f"jack-of-{suit_slug}-em",
|
||||
)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("epic", "0010_seed_deck_variants_and_earthman"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(rename_court_cards, reverse_code=reverse_court_cards),
|
||||
]
|
||||
@@ -233,6 +233,38 @@ class TarotCard(models.Model):
|
||||
ordering = ["deck_variant", "arcana", "suit", "number"]
|
||||
unique_together = [("deck_variant", "slug")]
|
||||
|
||||
@staticmethod
|
||||
def _to_roman(n):
|
||||
if n == 0:
|
||||
return '0'
|
||||
val = [50, 40, 10, 9, 5, 4, 1]
|
||||
syms = ['L','XL','X','IX','V','IV','I']
|
||||
result = ''
|
||||
for v, s in zip(val, syms):
|
||||
while n >= v:
|
||||
result += s
|
||||
n -= v
|
||||
return result
|
||||
|
||||
@property
|
||||
def corner_rank(self):
|
||||
if self.arcana == self.MAJOR:
|
||||
return self._to_roman(self.number)
|
||||
court = {11: 'M', 12: 'J', 13: 'Q', 14: 'K'}
|
||||
return court.get(self.number, str(self.number))
|
||||
|
||||
@property
|
||||
def suit_icon(self):
|
||||
if self.arcana == self.MAJOR:
|
||||
return ''
|
||||
return {
|
||||
self.WANDS: 'fa-wand-sparkles',
|
||||
self.CUPS: 'fa-trophy',
|
||||
self.SWORDS: 'fa-gun',
|
||||
self.COINS: 'fa-sack-dollar',
|
||||
self.PENTACLES: 'fa-sack-dollar',
|
||||
}.get(self.suit, '')
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
Reference in New Issue
Block a user