3 changed files with 186 additions and 2 deletions
-
183apps/hadis/management/commands/populate_book_reference.py
-
2apps/hadis/models/hadis.py
-
3entrypoint.sh
@ -0,0 +1,183 @@ |
|||
""" |
|||
Django Management Command: populate_book_references |
|||
|
|||
Creates 10 Islamic Hadith BookReference objects with related images. |
|||
Usage: python manage.py populate_book_references |
|||
""" |
|||
|
|||
import os |
|||
import random |
|||
from django.core.management.base import BaseCommand |
|||
from django.core.files import File |
|||
from django.conf import settings |
|||
from apps.hadis.models import BookReference, BookReferenceImage |
|||
|
|||
class Command(BaseCommand): |
|||
help = 'Create 10 Islamic Hadith BookReference objects with images' |
|||
|
|||
def handle(self, *args, **options): |
|||
# --------------------------------------------------------- |
|||
# 1. CLEANUP: Delete existing data |
|||
# --------------------------------------------------------- |
|||
self.stdout.write(self.style.WARNING('Deleting existing BookReferences...')) |
|||
count = BookReference.objects.all().delete()[0] |
|||
self.stdout.write(self.style.SUCCESS(f'✓ Deleted {count} existing records.')) |
|||
|
|||
# --------------------------------------------------------- |
|||
# 2. SETUP PATHS |
|||
# --------------------------------------------------------- |
|||
base_dir = settings.BASE_DIR |
|||
seeds_path = os.path.join(base_dir, 'seeds', 'images') |
|||
|
|||
# We will cycle through book1.png to book5.png |
|||
image_filenames = [f'book{i}.png' for i in range(1, 6)] |
|||
|
|||
# Verify directory exists |
|||
if not os.path.exists(seeds_path): |
|||
self.stdout.write(self.style.ERROR(f"Directory not found: {seeds_path}")) |
|||
return |
|||
|
|||
# --------------------------------------------------------- |
|||
# 3. DEFINE DATA (10 Islamic Hadith Books) |
|||
# --------------------------------------------------------- |
|||
references_data = [ |
|||
{ |
|||
"title_en": "Sahih al-Bukhari", |
|||
"title_fa": "صحیح بخاری", |
|||
"desc": "One of the most authentic collections of Hadith in Sunni Islam.", |
|||
"publisher": "Darussalam", |
|||
"year": "846", |
|||
"vol": "9" |
|||
}, |
|||
{ |
|||
"title_en": "Al-Kafi", |
|||
"title_fa": "الکافی", |
|||
"desc": "The most significant collection of Shia Hadith by Kulayni.", |
|||
"publisher": "Dar al-Kutub al-Islamiyya", |
|||
"year": "941", |
|||
"vol": "8" |
|||
}, |
|||
{ |
|||
"title_en": "Sahih Muslim", |
|||
"title_fa": "صحیح مسلم", |
|||
"desc": "Considered the second most authentic book after Bukhari.", |
|||
"publisher": "Dar-us-Salam", |
|||
"year": "875", |
|||
"vol": "7" |
|||
}, |
|||
{ |
|||
"title_en": "Nahj al-Balagha", |
|||
"title_fa": "نهج البلاغه", |
|||
"desc": "A collection of sermons, letters, and sayings of Imam Ali (AS).", |
|||
"publisher": "Ansariyan Publications", |
|||
"year": "1010", |
|||
"vol": "1" |
|||
}, |
|||
{ |
|||
"title_en": "Sunan Abu Dawood", |
|||
"title_fa": "سنن ابوداوود", |
|||
"desc": "A collection of Hadith focusing on legal matters (Fiqh).", |
|||
"publisher": "Maktabah al-Assriya", |
|||
"year": "888", |
|||
"vol": "5" |
|||
}, |
|||
{ |
|||
"title_en": "Man La Yahduruhu al-Faqih", |
|||
"title_fa": "من لا یحضره الفقیه", |
|||
"desc": "For him who is not in the presence of a jurisprudent - Shia collection.", |
|||
"publisher": "Jami'at al-Mudarisin", |
|||
"year": "991", |
|||
"vol": "4" |
|||
}, |
|||
{ |
|||
"title_en": "Jami` at-Tirmidhi", |
|||
"title_fa": "جامع ترمذی", |
|||
"desc": "Known for categorizing Hadith by authenticity (Sahih, Hasan, Da'if).", |
|||
"publisher": "Dar al-Gharb al-Islami", |
|||
"year": "892", |
|||
"vol": "6" |
|||
}, |
|||
{ |
|||
"title_en": "Tahdhib al-Ahkam", |
|||
"title_fa": "تهذیب الاحکام", |
|||
"desc": "A classic Shia Hadith collection by Shaykh Tusi.", |
|||
"publisher": "Dar al-Adwa", |
|||
"year": "1067", |
|||
"vol": "10" |
|||
}, |
|||
{ |
|||
"title_en": "Sunan an-Nasa'i", |
|||
"title_fa": "سنن نسائی", |
|||
"desc": "Highly regarded collection with very few weak hadiths.", |
|||
"publisher": "Dar al-Ma'rifa", |
|||
"year": "915", |
|||
"vol": "6" |
|||
}, |
|||
{ |
|||
"title_en": "Bihar al-Anwar", |
|||
"title_fa": "بحار الانوار", |
|||
"desc": "The most comprehensive collection of Shia traditions by Majlisi.", |
|||
"publisher": "Al-Wafa", |
|||
"year": "1698", |
|||
"vol": "110" |
|||
} |
|||
] |
|||
|
|||
# --------------------------------------------------------- |
|||
# 4. CREATE RECORDS |
|||
# --------------------------------------------------------- |
|||
self.stdout.write("Starting creation process...") |
|||
|
|||
for index, data in enumerate(references_data): |
|||
try: |
|||
# A. Create the BookReference |
|||
book_ref = BookReference.objects.create( |
|||
title=[ |
|||
{"language_code": "en", "text": data["title_en"]}, |
|||
{"language_code": "fa", "text": data["title_fa"]} |
|||
], |
|||
description=[ |
|||
{"language_code": "en", "text": data["desc"]}, |
|||
{"language_code": "fa", "text": f"توضیحات درباره {data['title_fa']}"} |
|||
], |
|||
language=[ |
|||
{"language_code": "en", "text": "Arabic/English"}, |
|||
{"language_code": "fa", "text": "عربی/فارسی"} |
|||
], |
|||
isbn=f"978-{random.randint(100,999)}-{random.randint(1000,9999)}-{index}", |
|||
volume=data["vol"], |
|||
year_of_publication=data["year"], |
|||
number_page=random.randint(300, 1500), |
|||
# Slug is handled by model .save() method automatically |
|||
publisher=[ |
|||
{"language_code": "en", "text": data["publisher"]}, |
|||
{"language_code": "fa", "text": data["publisher"]} |
|||
], |
|||
rate=round(random.uniform(4.0, 5.0), 2) |
|||
) |
|||
|
|||
# B. Create and Save the Image (BookReferenceImage) |
|||
# Cycle through images: 0->book1, 1->book2... 5->book1 |
|||
img_name = image_filenames[index % len(image_filenames)] |
|||
img_path = os.path.join(seeds_path, img_name) |
|||
|
|||
if os.path.exists(img_path): |
|||
with open(img_path, 'rb') as f: |
|||
# Create the Image object |
|||
ref_image = BookReferenceImage( |
|||
book_reference=book_ref, |
|||
order=0, |
|||
description=[{"language_code": "en", "text": f"Cover of {data['title_en']}"}] |
|||
) |
|||
# Save file content (THIS COPIES IT TO MEDIA VOLUME) |
|||
ref_image.image.save(img_name, File(f), save=True) |
|||
else: |
|||
self.stdout.write(self.style.WARNING(f"Image not found: {img_name}")) |
|||
|
|||
self.stdout.write(self.style.SUCCESS(f"✓ Created: {data['title_en']}")) |
|||
|
|||
except Exception as e: |
|||
self.stdout.write(self.style.ERROR(f"Error creating {data['title_en']}: {e}")) |
|||
|
|||
self.stdout.write(self.style.SUCCESS('\n==========================================')) |
|||
self.stdout.write(self.style.SUCCESS(f'Successfully populated {len(references_data)} BookReferences!')) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue