Browse Source

sync hadises api updated.

master
Mohsen Taba 5 months ago
parent
commit
ebd896a34b
  1. 45
      apps/hadis/serializers/hadis.py

45
apps/hadis/serializers/hadis.py

@ -1,7 +1,9 @@
from rest_framework import serializers
from django.utils.translation import gettext_lazy as _
from rest_framework.fields import SerializerMethodField
from urllib3 import request
from .category import LocalizedField
from .category import get_localized_text
from ..models import (
Hadis, HadisStatus, HadisTag, HadisTransmitter,
@ -33,36 +35,23 @@ class HadisCollectionListSerializer(serializers.ModelSerializer):
class HadisSyncSerializer(serializers.ModelSerializer):
"""Serializer for syncing all hadis data (grouped fields)"""
translations = serializers.SerializerMethodField()
detail = serializers.SerializerMethodField()
narrators = serializers.SerializerMethodField()
explanations = serializers.SerializerMethodField()
corrections = serializers.SerializerMethodField()
title =LocalizedField()
title_narrator = LocalizedField()
translation = LocalizedField()
class Meta:
model = Hadis
fields = [
# header (no-extend)
'id', 'number', 'category_id', 'title', 'title_narrator', 'text', 'translations',
'id', 'number', 'category_id', 'title', 'title_narrator', 'text', 'translation',
# grouped sections
'detail', 'narrators', 'explanations', 'corrections',
]
def get_translations(self, obj):
"""Get all translations as {lang: text}"""
# translations_dict = {}
# if obj.translation and isinstance(obj.translation, list):
# for tr in obj.translation:
# if isinstance(tr, dict):
# lang_code = tr.get('language_code')
# title = tr.get('title')
# if lang_code:
# translations_dict[lang_code] = title
# return translations_dict
return obj.translation
def get_detail(self, obj):
"""Detail group: address, status, share, links, tags, references, reference_images"""
request = self.context.get('request')
@ -72,12 +61,12 @@ class HadisSyncSerializer(serializers.ModelSerializer):
if obj.hadis_status:
status_block = {
'id': obj.hadis_status.id,
'title': obj.hadis_status.title,
'title': get_localized_text(obj.hadis_status.title,request),
'color': obj.hadis_status.color
}
# tags
tags_block = [{'id': tag.id, 'title': tag.title} for tag in obj.tags.all()]
tags_block = [{'id': tag.id, 'title': get_localized_text(tag.title,request)} for tag in obj.tags.all()]
# references and reference images
references_block = []
@ -86,8 +75,8 @@ class HadisSyncSerializer(serializers.ModelSerializer):
book = reference.book_reference
references_block.append({
'id': reference.id,
'title': book.title if book else None,
'authors': [{'id': a.id, 'name': a.name} for a in book.authors.all()] if book else [],
'title': get_localized_text(book.title,request) if book else None,
'authors': [{'id': a.id, 'name': get_localized_text(a.name,request)} for a in book.authors.all()] if book else [],
'description': book.description if book else None,
})
for img in reference.images.all().order_by('priority'):
@ -101,9 +90,9 @@ class HadisSyncSerializer(serializers.ModelSerializer):
})
return {
'address': obj.address,
'address': get_localized_text(obj.address,request),
'hadis_status': status_block,
'status_text': obj.hadis_status_text,
'status_text':get_localized_text(obj.hadis_status_text,request) ,
'share_link': obj.share_link,
'links': obj.links,
'tags': tags_block,
@ -118,10 +107,10 @@ class HadisSyncSerializer(serializers.ModelSerializer):
t = transmitter_rel.transmitter
transmitters_data.append({
'id': t.id,
'name': t.full_name,
'name': get_localized_text(t.full_name,request),
'reliability': t.reliability,
'layer_level': transmitter_rel.narrator_layer.number if transmitter_rel.narrator_layer else None,
'layer_name': transmitter_rel.narrator_layer.name if transmitter_rel.narrator_layer else None,
'layer_name': get_localized_text(transmitter_rel.narrator_layer.name,request) if transmitter_rel.narrator_layer else None,
'is_gap': transmitter_rel.is_gap,
'birth_year_hijri': t.birth_year_hijri,
'death_year_hijri': t.death_year_hijri,
@ -129,13 +118,13 @@ class HadisSyncSerializer(serializers.ModelSerializer):
})
return {
'description': getattr(obj, 'description', None),
'description': get_localized_text(obj.description,request),
'transmitters': transmitters_data
}
def get_explanations(self, obj):
"""Explanations group"""
return obj.explanation
return get_localized_text(obj.explanation,request)
def get_corrections(self, obj):
"""Corrections group"""
@ -143,9 +132,9 @@ class HadisSyncSerializer(serializers.ModelSerializer):
for correction in obj.hadiscorrection_set.all():
corrections_data.append({
'id': correction.id,
'title': correction.title,
'description': correction.description,
'translation': correction.translation,
'title': get_localized_text(correction.title,request),
'description': get_localized_text(correction.description,request),
'translation': get_localized_text(correction.translation,request),
'share_link': correction.share_link,
})
return corrections_data

Loading…
Cancel
Save