Manglify_Backend / db /test_functions /create_data.py
Ying Jiang
good luck
ee75ec9
Raw History Blame Contribute Delete
4.3 kB
"""
Insert sample data into the database for testing.
Run from backend: python -m db.test_functions.create_data
Requires DATABASE_URL in backend/.env.
Uses umbrella Manga + Chapters. Optional external_manga_id (MangaDex series id)
on save_panels_translation stores MangaDex series id.
"""
import db
# Demo external ids (MangaDex uses UUID strings; local can use legacy-* from DB or omit)
NARUTO_MANGADEX_ID = "931b3112-7b75-43e4-a13f-908f0a251ae2" # example placeholder UUID
def _slug(title: str) -> str:
s = title.strip().lower().replace(" ", "_")
return "".join(ch for ch in s if ch.isalnum() or ch == "_")
def _bubbles(
manga_title: str,
chapter_number: float,
page_number: int,
*pairs: tuple[str, str],
) -> list[dict]:
"""Create fake panels from (original, translated) pairs."""
slug = _slug(manga_title)
result = []
for i, (orig, trans) in enumerate(pairs):
result.append({
"bubble_index": i,
# Page coordinate space (example values)
"width": 1080,
"height": 1522,
# Globally unique demo URLs (matches global uniqueness on panel_url).
"panel_url": (
"https://example.invalid/panels/"
f"{slug}/ch{chapter_number:g}/p{page_number}/b{i}.jpg"
),
"x1": 120.0 + i * 18,
"y1": 140.0 + i * 55,
"x2": 420.0 + i * 18,
"y2": 260.0 + i * 55,
"original_text": orig,
"translated_text": trans,
})
return result
def seed():
db.init_db()
# Umbrella manga 1: One Piece — MangaDex provider (example seed)
db.save_panels_translation(
manga_title="One Piece",
chapter_number=1.0,
page_number=1,
panels=_bubbles(
"One Piece",
1.0,
1,
("海賊王に俺はなる!", "I'm gonna be King of the Pirates!"),
),
language_code="en",
)
db.save_panels_translation(
manga_title="One Piece",
chapter_number=1.0,
page_number=2,
panels=_bubbles(
"One Piece",
1.0,
2,
("麦わらのルフィ", "Monkey D. Luffy"),
("ゼファ", "Zeff"),
),
language_code="en",
)
db.save_panels_translation(
manga_title="One Piece",
chapter_number=2.0,
page_number=1,
panels=_bubbles(
"One Piece",
2.0,
1,
("冒険の始まり", "The adventure begins"),
),
language_code="en",
)
# Umbrella manga 2: Naruto — MangaDex series id stored on Manga via external_manga_id
db.save_panels_translation(
manga_title="Naruto",
chapter_number=1.0,
page_number=1,
panels=_bubbles(
"Naruto",
1.0,
1,
("忍たま乱太郎", "Ninja Academy"),
("うずまきナルト", "Uzumaki Naruto"),
),
language_code="en",
external_manga_id=NARUTO_MANGADEX_ID,
)
print("Seed data inserted.\n")
# --- Queries: umbrella manga (no provider on Manga row) ---
mangas = db.list_mangas(order_by="updated_at", order_desc=True)
print("=== list_mangas (umbrella) ===")
for m in mangas:
print(f" id={m.id} title={m.manga_title!r} updated_at={m.updated_at}")
# --- Chapters are scoped by provider: same title can exist per source ---
print("\n=== list_chapters('One Piece') ===")
for c in db.list_chapters("One Piece"):
print(f" ch.id={c.id} ch={c.chapter_number} updated={c.updated_at}")
print("\n=== list_chapters('Naruto') ===")
for c in db.list_chapters("Naruto"):
print(f" ch.id={c.id} ch={c.chapter_number} updated={c.updated_at}")
print("\n=== MangaDex external_manga_id mapping ===")
print(" Stored on manga.mangadex_manga_id")
# Sample panel query
panels = db.get_chapter_panels("One Piece", 1.0)
print("\n=== get_chapter_panels('One Piece', 1.0) ===")
print(f" panel count: {len(panels)}")
if panels:
p0 = panels[0]
print(f" first: page={p0.page_number} translated={p0.translated_text!r}")
if __name__ == "__main__":
seed()