|
|
|
@ -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 |
|
|
|
|