""" Django management command to seed mock data for hadith transmitters and related models. Place this file in: yourapp/management/commands/seed_transmitters.py Usage: python manage.py seed_transmitters python manage.py seed_transmitters --clear """ import json from django.core.management.base import BaseCommand from django.utils.text import slugify from apps.hadis.models.transmitter import ( NarratorLayer, Transmitters, HadisTransmitter, TransmitterOpinion, TransmitterOriginalText ) class Command(BaseCommand): help = 'Seed the database with mock hadith transmitter data' def add_arguments(self, parser): parser.add_argument( '--clear', action='store_true', help='Clear existing data before seeding', ) def handle(self, *args, **options): if options['clear']: self.stdout.write(self.style.WARNING('Clearing existing transmitter data...')) TransmitterOriginalText.objects.all().delete() TransmitterOpinion.objects.all().delete() HadisTransmitter.objects.all().delete() Transmitters.objects.all().delete() NarratorLayer.objects.all().delete() self.stdout.write(self.style.SUCCESS('Data cleared successfully!')) # Step 1: Create Narrator Layers (Tabaqat) self.stdout.write(self.style.SUCCESS('\n📚 Creating Narrator Layers...')) layers_data = [ { "name": "Sahaba (Companions)", "number": 1, "description": "The companions of Prophet Muhammad (PBUH) who heard directly from him." }, { "name": "Tabi'un (Successors)", "number": 2, "description": "Narrators who lived after the Prophet's era and heard from the companions." }, { "name": "Taba' Tabi'in (Followers of Successors)", "number": 3, "description": "Narrators who heard from the Successors." }, { "name": "Later Generations", "number": 4, "description": "Narrators from later Islamic centuries, known for their scholarship." }, { "name": "Modern Era Scholars", "number": 5, "description": "Contemporary scholars who have specialized knowledge of hadith narration." }, ] layers = {} for layer_data in layers_data: layer, created = NarratorLayer.objects.get_or_create( number=layer_data['number'], defaults={ 'name': layer_data['name'], 'description': layer_data['description'], 'slug': slugify(layer_data['name']) } ) layers[layer_data['number']] = layer status = '✓ Created' if created else '• Updated' self.stdout.write(f"{status}: {layer.name} (Layer {layer.number})") # Step 2: Create Transmitters (Hadith Narrators) self.stdout.write(self.style.SUCCESS('\n👥 Creating Transmitters...')) transmitters_data = [ { "full_name": "Abu Hurayrah", "kunya": "Abu Hurayrah", "known_as": "Abd al-Rahman ibn Sakhr", "nickname": "Father of the Kitten", "origin": "Yamama, Arabia", "lived_in": "Medina, Syria", "died_in": "Medina", "birth_year_hijri": 7, "death_year_hijri": 58, "age_at_death": 78, "generation": 1, "reliability": "very_reliable", "madhhab": "sunni", "in_sahih_muslim": True, "in_sahih_bukhari": True, "description": "One of the most prolific hadith narrators, reported 5,374 ahadith.", "narrator_layer": 1, }, { "full_name": "Aisha bint Abu Bakr", "kunya": "Umm al-Mu'minin", "known_as": "Mother of the Believers", "nickname": "Al-Siddiqa", "origin": "Medina", "lived_in": "Medina", "died_in": "Medina", "birth_year_hijri": None, "death_year_hijri": 58, "age_at_death": 66, "generation": 1, "reliability": "very_reliable", "madhhab": "sunni", "in_sahih_muslim": True, "in_sahih_bukhari": True, "description": "Wife of the Prophet Muhammad (PBUH), a major source of hadith about daily life.", "narrator_layer": 1, }, { "full_name": "Jabir ibn Abdullah al-Ansari", "kunya": "Abu Abdullah", "known_as": "Jabir", "nickname": "Al-Ansari", "origin": "Medina", "lived_in": "Medina", "died_in": "Medina", "birth_year_hijri": 10, "death_year_hijri": 74, "age_at_death": 94, "generation": 1, "reliability": "very_reliable", "madhhab": "sunni", "in_sahih_muslim": True, "in_sahih_bukhari": True, "description": "One of the long-lived companions, reported numerous ahadith on various topics.", "narrator_layer": 1, }, { "full_name": "Imam Malik ibn Anas", "kunya": "Abu Abdullah", "known_as": "Malik", "nickname": "Imam of Imams", "origin": "Medina", "lived_in": "Medina", "died_in": "Medina", "birth_year_hijri": 93, "death_year_hijri": 179, "age_at_death": 86, "generation": 3, "reliability": "very_reliable", "madhhab": "maliki", "in_sahih_muslim": True, "in_sahih_bukhari": True, "description": "Founder of the Maliki school of Islamic jurisprudence, compiler of Al-Muwatta.", "narrator_layer": 3, }, { "full_name": "Al-Qasim ibn Muhammad", "kunya": "Abu Muhammad", "known_as": "Al-Qasim", "nickname": "Son of the Rightly Guided", "origin": "Medina", "lived_in": "Medina", "died_in": "Medina", "birth_year_hijri": 38, "death_year_hijri": 106, "age_at_death": 68, "generation": 2, "reliability": "reliable", "madhhab": "sunni", "in_sahih_muslim": True, "in_sahih_bukhari": True, "description": "Son of Amir al-Mu'minin, known for his knowledge of Islamic jurisprudence.", "narrator_layer": 2, }, { "full_name": "Urwa ibn al-Zubayr", "kunya": "Abu Abdullah", "known_as": "Urwa", "nickname": "The Jurist", "origin": "Medina", "lived_in": "Medina, Mecca", "died_in": "Medina", "birth_year_hijri": 23, "death_year_hijri": 94, "age_at_death": 71, "generation": 2, "reliability": "very_reliable", "madhhab": "sunni", "in_sahih_muslim": True, "in_sahih_bukhari": True, "description": "Prominent Tabi'un scholar and transmitter of hadith from Aisha.", "narrator_layer": 2, }, { "full_name": "Abdullah ibn Abbas", "kunya": "Abu Abbas", "known_as": "Ibn Abbas", "nickname": "Hibr al-Ummah (The Learned Scholar of the Nation)", "origin": "Medina", "lived_in": "Medina, Mecca, Basra", "died_in": "Taif", "birth_year_hijri": 3, "death_year_hijri": 68, "age_at_death": 71, "generation": 1, "reliability": "very_reliable", "madhhab": "sunni", "in_sahih_muslim": True, "in_sahih_bukhari": True, "description": "Cousin of the Prophet (PBUH), famous for Quranic exegesis and hadith knowledge.", "narrator_layer": 1, }, { "full_name": "Nafi' (Mawla of Ibn Umar)", "kunya": "Abu Abdullah", "known_as": "Nafi'", "nickname": "The Freed Slave", "origin": "Ethiopia", "lived_in": "Medina", "died_in": "Medina", "birth_year_hijri": 25, "death_year_hijri": 117, "age_at_death": 92, "generation": 2, "reliability": "very_reliable", "madhhab": "sunni", "in_sahih_muslim": True, "in_sahih_bukhari": True, "description": "Freed slave of Abdullah ibn Umar, transmitted numerous hadith from him.", "narrator_layer": 2, }, { "full_name": "Imam Ahmad ibn Hanbal", "kunya": "Abu Abdullah", "known_as": "Ahmad", "nickname": "Shaykh al-Islam", "origin": "Khorasan", "lived_in": "Baghdad", "died_in": "Baghdad", "birth_year_hijri": 164, "death_year_hijri": 241, "age_at_death": 77, "generation": 4, "reliability": "very_reliable", "madhhab": "hanbali", "in_sahih_muslim": False, "in_sahih_bukhari": False, "description": "Founder of the Hanbali school, compiler of Musnad Ahmad with 40,000+ hadith.", "narrator_layer": 3, }, { "full_name": "Sufyan ibn Uyayna", "kunya": "Abu Muhammad", "known_as": "Sufyan", "nickname": "Amir al-Mu'minin fil-Hadith", "origin": "Kufa", "lived_in": "Mecca, Kufa", "died_in": "Mecca", "birth_year_hijri": 107, "death_year_hijri": 198, "age_at_death": 91, "generation": 3, "reliability": "very_reliable", "madhhab": "shafii", "in_sahih_muslim": True, "in_sahih_bukhari": True, "description": "Great hadith scholar and judge, known for his exceptional memory.", "narrator_layer": 3, }, ] transmitters = {} for trans_data in transmitters_data: narrator_layer_num = trans_data.pop('narrator_layer') narrator_layer = layers.get(narrator_layer_num) transmitter, created = Transmitters.objects.get_or_create( full_name=trans_data['full_name'], defaults=trans_data ) transmitters[trans_data['full_name']] = transmitter status = '✓ Created' if created else '• Updated' self.stdout.write(f"{status}: {transmitter.full_name}") # Step 3: Create Transmitter Opinions self.stdout.write(self.style.SUCCESS('\n💬 Creating Transmitter Opinions...')) opinions_data = [ { "transmitter_name": "Abu Hurayrah", "scholar_name": "Imam al-Bukhari", "opinion_text": "Abu Hurayrah is one of the most reliable narrators with a perfect memory and integrity.", "status": "confirmed" }, { "transmitter_name": "Abu Hurayrah", "scholar_name": "Imam Muslim", "opinion_text": "His narrations are authentic and widely accepted in the Islamic jurisprudence.", "status": "confirmed" }, { "transmitter_name": "Aisha bint Abu Bakr", "scholar_name": "Imam al-Bukhari", "opinion_text": "The Mother of the Believers is the most reliable source for hadith about the Prophet's household.", "status": "confirmed" }, { "transmitter_name": "Jabir ibn Abdullah al-Ansari", "scholar_name": "Ibn Hajar al-Asqalani", "opinion_text": "His longevity allowed him to transmit from many companions and successors.", "status": "confirmed" }, { "transmitter_name": "Imam Malik ibn Anas", "scholar_name": "Imam ash-Shafi'i", "opinion_text": "Malik is among the most knowledgeable of the Medinese scholars in jurisprudence.", "status": "confirmed" }, { "transmitter_name": "Imam Malik ibn Anas", "scholar_name": "Imam Ahmad ibn Hanbal", "opinion_text": "Malik's narrations form the basis of sound Islamic jurisprudence.", "status": "confirmed" }, { "transmitter_name": "Al-Qasim ibn Muhammad", "scholar_name": "Ibn Hajar al-Asqalani", "opinion_text": "Al-Qasim is a trustworthy narrator from the Tabi'un generation with reliable traditions.", "status": "confirmed" }, { "transmitter_name": "Urwa ibn al-Zubayr", "scholar_name": "Imam al-Bukhari", "opinion_text": "Urwa is among the most knowledgeable about the traditions of the Prophet's household.", "status": "confirmed" }, { "transmitter_name": "Abdullah ibn Abbas", "scholar_name": "Imam at-Tirmidhi", "opinion_text": "Ibn Abbas has exceptional knowledge in Quranic interpretation and hadith narration.", "status": "confirmed" }, { "transmitter_name": "Nafi' (Mawla of Ibn Umar)", "scholar_name": "Imam Muslim", "opinion_text": "Nafi' is one of the most reliable freed slaves who transmitted authentic traditions.", "status": "confirmed" }, { "transmitter_name": "Imam Ahmad ibn Hanbal", "scholar_name": "Ibn Hajar al-Asqalani", "opinion_text": "Ahmad ibn Hanbal's knowledge of hadith is unparalleled in his era.", "status": "confirmed" }, { "transmitter_name": "Sufyan ibn Uyayna", "scholar_name": "Imam al-Bukhari", "opinion_text": "Sufyan is a highly reliable hadith scholar with exceptional memory.", "status": "confirmed" }, ] for opinion_data in opinions_data: transmitter_name = opinion_data.pop('transmitter_name') transmitter = transmitters.get(transmitter_name) if transmitter: opinion, created = TransmitterOpinion.objects.get_or_create( transmitter=transmitter, scholar_name=opinion_data['scholar_name'], defaults=opinion_data ) if created: self.stdout.write( self.style.SUCCESS( f"✓ Opinion added: {opinion_data['scholar_name']} on {transmitter_name}" ) ) # Step 4: Create Original Texts self.stdout.write(self.style.SUCCESS('\n📜 Creating Transmitter Original Texts...')) original_texts_data = [ { "transmitter_name": "Abu Hurayrah", "title": "His Narration on Zakat", "text": "حدثنا أبو هريرة قال: قال رسول الله صلى الله عليه وسلم: من آمن بالله واليوم الآخر فليؤد الزكاة", "translation": [ {"language_code": "en", "text": "Abu Hurayrah narrated: The Messenger of Allah (PBUH) said: Whoever believes in Allah and the Last Day, let him pay the Zakat (alms)."}, {"language_code": "ar", "text": "أبو هريرة: من آمن بالله واليوم الآخر فليؤد الزكاة"} ], "share_link": "https://hadith.example.com/abu-hurayrah/zakat-1" }, { "transmitter_name": "Aisha bint Abu Bakr", "title": "Her Account of the Prophet's Night Prayer", "text": "قالت عائشة: كان النبي صلى الله عليه وسلم يقوم الليل فيصلي ثلاث عشرة ركعة", "translation": [ {"language_code": "en", "text": "Aisha said: The Prophet (PBUH) used to pray at night thirteen rak'ahs."}, {"language_code": "ar", "text": "عائشة: كان النبي يقوم الليل بثلاث عشرة ركعة"} ], "share_link": "https://hadith.example.com/aisha/night-prayer-1" }, { "transmitter_name": "Jabir ibn Abdullah al-Ansari", "title": "The Farewell Hajj Narration", "text": "قال جابر: خرجنا مع رسول الله صلى الله عليه وسلم في حجة الوداع", "translation": [ {"language_code": "en", "text": "Jabir narrated: We went out with the Messenger of Allah (PBUH) for the Farewell Hajj."}, {"language_code": "ar", "text": "جابر: خرجنا مع رسول الله في حجة الوداع"} ], "share_link": "https://hadith.example.com/jabir/farewell-hajj-1" }, { "transmitter_name": "Imam Malik ibn Anas", "title": "Narration on Purity and Prayer", "text": "قال مالك: الطهارة شرط من شروط الصلاة", "translation": [ {"language_code": "en", "text": "Malik said: Purification is a condition for the validity of prayer."}, {"language_code": "ar", "text": "مالك: الطهارة من شروط صحة الصلاة"} ], "share_link": "https://hadith.example.com/malik/purity-1" }, { "transmitter_name": "Abdullah ibn Abbas", "title": "His Commentary on Divine Justice", "text": "قال ابن عباس: إن الله تعالى عدل لا يظلم أحدا", "translation": [ {"language_code": "en", "text": "Ibn Abbas said: Truly Allah is Just and does not oppress anyone."}, {"language_code": "ar", "text": "ابن عباس: الله عدل لا يظلم أحدا"} ], "share_link": "https://hadith.example.com/ibn-abbas/justice-1" }, { "transmitter_name": "Sufyan ibn Uyayna", "title": "Teaching on Knowledge Seeking", "text": "قال سفيان بن عيينة: طلب العلم فريضة على كل مسلم", "translation": [ {"language_code": "en", "text": "Sufyan ibn Uyayna said: Seeking knowledge is an obligation for every Muslim."}, {"language_code": "ar", "text": "سفيان: طلب العلم فريضة على كل مسلم"} ], "share_link": "https://hadith.example.com/sufyan/knowledge-1" }, ] for text_data in original_texts_data: transmitter_name = text_data.pop('transmitter_name') transmitter = transmitters.get(transmitter_name) if transmitter: original_text, created = TransmitterOriginalText.objects.get_or_create( transmitter=transmitter, title=text_data['title'], defaults=text_data ) if created: self.stdout.write( self.style.SUCCESS( f"✓ Original text added: {text_data['title']} by {transmitter_name}" ) ) # Step 5: Create Hadis Transmitters (Chain of narration) self.stdout.write(self.style.SUCCESS('\n⛓️ Creating Hadis Transmitters (Chains)...')) # Sample hadis IDs to use (you can have any ID from 1800 to 1852) hadis_ids = list(range(1800, 1853)) # Create chains for different hadis chains_data = [ { "hadis_id": hadis_ids[0], "chain": [ {"transmitter_name": "Abu Hurayrah", "order": 1, "layer": 1, "status": "reliable"}, {"transmitter_name": "Imam Malik ibn Anas", "order": 2, "layer": 3, "status": "reliable"}, ] }, { "hadis_id": hadis_ids[1], "chain": [ {"transmitter_name": "Aisha bint Abu Bakr", "order": 1, "layer": 1, "status": "reliable"}, {"transmitter_name": "Urwa ibn al-Zubayr", "order": 2, "layer": 2, "status": "reliable"}, {"transmitter_name": "Imam Malik ibn Anas", "order": 3, "layer": 3, "status": "reliable"}, ] }, { "hadis_id": hadis_ids[2], "chain": [ {"transmitter_name": "Jabir ibn Abdullah al-Ansari", "order": 1, "layer": 1, "status": "reliable"}, {"transmitter_name": "Al-Qasim ibn Muhammad", "order": 2, "layer": 2, "status": "reliable"}, {"transmitter_name": "Sufyan ibn Uyayna", "order": 3, "layer": 3, "status": "reliable"}, ] }, { "hadis_id": hadis_ids[3], "chain": [ {"transmitter_name": "Abdullah ibn Abbas", "order": 1, "layer": 1, "status": "reliable"}, {"transmitter_name": "Nafi' (Mawla of Ibn Umar)", "order": 2, "layer": 2, "status": "reliable"}, {"transmitter_name": "Imam Ahmad ibn Hanbal", "order": 3, "layer": 3, "status": "reliable"}, ] }, { "hadis_id": hadis_ids[4], "chain": [ {"transmitter_name": "Abu Hurayrah", "order": 1, "layer": 1, "status": "reliable"}, {"transmitter_name": "Sufyan ibn Uyayna", "order": 2, "layer": 3, "status": "reliable"}, ] }, { "hadis_id": hadis_ids[5], "chain": [ {"transmitter_name": "Aisha bint Abu Bakr", "order": 1, "layer": 1, "status": "reliable"}, {"transmitter_name": "Al-Qasim ibn Muhammad", "order": 2, "layer": 2, "status": "reliable"}, ] }, { "hadis_id": hadis_ids[6], "chain": [ {"transmitter_name": "Jabir ibn Abdullah al-Ansari", "order": 1, "layer": 1, "status": "reliable"}, {"transmitter_name": "Nafi' (Mawla of Ibn Umar)", "order": 2, "layer": 2, "status": "reliable"}, {"transmitter_name": "Imam Malik ibn Anas", "order": 3, "layer": 3, "status": "reliable"}, {"transmitter_name": "Sufyan ibn Uyayna", "order": 4, "layer": 3, "status": "reliable"}, ] }, { "hadis_id": hadis_ids[7], "chain": [ {"transmitter_name": "Abdullah ibn Abbas", "order": 1, "layer": 1, "status": "reliable"}, {"transmitter_name": "Urwa ibn al-Zubayr", "order": 2, "layer": 2, "status": "reliable"}, {"transmitter_name": "Imam Ahmad ibn Hanbal", "order": 3, "layer": 3, "status": "reliable"}, ] }, { "hadis_id": hadis_ids[8], "chain": [ {"transmitter_name": "Abu Hurayrah", "order": 1, "layer": 1, "status": "reliable"}, {"transmitter_name": "Al-Qasim ibn Muhammad", "order": 2, "layer": 2, "status": "reliable"}, {"transmitter_name": "Imam Malik ibn Anas", "order": 3, "layer": 3, "status": "reliable"}, {"transmitter_name": "Sufyan ibn Uyayna", "order": 4, "layer": 3, "status": "reliable"}, ] }, { "hadis_id": hadis_ids[9], "chain": [ {"transmitter_name": "Aisha bint Abu Bakr", "order": 1, "layer": 1, "status": "reliable"}, {"transmitter_name": "Nafi' (Mawla of Ibn Umar)", "order": 2, "layer": 2, "status": "reliable"}, ] }, ] hadis_transmitter_count = 0 for chain_data in chains_data: hadis_id = chain_data['hadis_id'] chain = chain_data['chain'] for item in chain: transmitter = transmitters.get(item['transmitter_name']) layer = layers.get(item['layer']) if transmitter and layer: hadis_trans, created = HadisTransmitter.objects.get_or_create( hadis_id=hadis_id, transmitter=transmitter, order=item['order'], defaults={ 'narrator_layer': layer, 'status': item['status'], 'is_gap': False } ) if created: hadis_transmitter_count += 1 self.stdout.write( self.style.SUCCESS( f"✓ Chain link: Hadis {hadis_id} <- {item['transmitter_name']} (Order {item['order']})" ) ) self.stdout.write( self.style.SUCCESS( f'\n✓ Successfully seeded transmitter data!' ) ) self._print_summary(transmitters, hadis_transmitter_count) def _print_summary(self, transmitters, hadis_transmitter_count): """Print a summary of created data""" self.stdout.write("\n" + "="*70) self.stdout.write(self.style.SUCCESS("TRANSMITTER DATABASE SUMMARY")) self.stdout.write("="*70) layers_count = NarratorLayer.objects.count() transmitters_count = Transmitters.objects.count() opinions_count = TransmitterOpinion.objects.count() original_texts_count = TransmitterOriginalText.objects.count() self.stdout.write(f"📚 Narrator Layers: {layers_count}") self.stdout.write(f"👥 Total Transmitters: {transmitters_count}") self.stdout.write(f"💬 Transmitter Opinions: {opinions_count}") self.stdout.write(f"📜 Original Texts: {original_texts_count}") self.stdout.write(f"⛓️ Hadis Transmitter Chains: {hadis_transmitter_count}") self.stdout.write("\n" + "="*70) self.stdout.write(self.style.WARNING("Notable Transmitters Created:")) self.stdout.write("="*70) for name in list(transmitters.keys())[:5]: self.stdout.write(f" • {name}") self.stdout.write(f" ... and {max(0, len(transmitters) - 5)} more") self.stdout.write("="*70 + "\n")