|
|
@ -24,12 +24,12 @@ def get_request_language_code(request=None, fallback="ru") -> str: |
|
|
query_params = getattr(request, "query_params", None) or getattr(request, "GET", None) |
|
|
query_params = getattr(request, "query_params", None) or getattr(request, "GET", None) |
|
|
if query_params: |
|
|
if query_params: |
|
|
lang = query_params.get("language_code") or query_params.get("lang") |
|
|
lang = query_params.get("language_code") or query_params.get("lang") |
|
|
if not lang: |
|
|
|
|
|
lang = getattr(request, "LANGUAGE_CODE", None) |
|
|
|
|
|
if not lang and hasattr(request, "headers"): |
|
|
if not lang and hasattr(request, "headers"): |
|
|
lang = request.headers.get("Accept-Language") |
|
|
lang = request.headers.get("Accept-Language") |
|
|
elif not lang and hasattr(request, "META"): |
|
|
|
|
|
|
|
|
if not lang and hasattr(request, "META"): |
|
|
lang = request.META.get("HTTP_ACCEPT_LANGUAGE") |
|
|
lang = request.META.get("HTTP_ACCEPT_LANGUAGE") |
|
|
|
|
|
if not lang: |
|
|
|
|
|
lang = getattr(request, "LANGUAGE_CODE", None) |
|
|
if lang: |
|
|
if lang: |
|
|
lang = lang.split(",")[0].split(";")[0].split("-")[0].strip().lower() |
|
|
lang = lang.split(",")[0].split(";")[0].split("-")[0].strip().lower() |
|
|
if not lang: |
|
|
if not lang: |
|
|
@ -1365,13 +1365,53 @@ class HadisReferenceSerializer(serializers.ModelSerializer): |
|
|
pub_src = edition.publisher_item.title if (getattr(edition, "publisher_item_id", None) and edition.publisher_item and edition.publisher_item.title) else edition.publisher |
|
|
pub_src = edition.publisher_item.title if (getattr(edition, "publisher_item_id", None) and edition.publisher_item and edition.publisher_item.title) else edition.publisher |
|
|
pub = get_localized_text(pub_src, request) if isinstance(pub_src, list) else pub_src |
|
|
pub = get_localized_text(pub_src, request) if isinstance(pub_src, list) else pub_src |
|
|
ed_title = get_localized_text(edition.title, request) if isinstance(getattr(edition, "title", None), list) else getattr(edition, "title", None) |
|
|
ed_title = get_localized_text(edition.title, request) if isinstance(getattr(edition, "title", None), list) else getattr(edition, "title", None) |
|
|
|
|
|
city_src = ( |
|
|
|
|
|
edition.city_of_publication_city.title |
|
|
|
|
|
if (getattr(edition, "city_of_publication_city_id", None) and edition.city_of_publication_city and edition.city_of_publication_city.title) |
|
|
|
|
|
else getattr(edition, "city_of_publication", None) |
|
|
|
|
|
) |
|
|
|
|
|
country_src = ( |
|
|
|
|
|
edition.country_of_publication_country.title |
|
|
|
|
|
if (getattr(edition, "country_of_publication_country_id", None) and edition.country_of_publication_country and edition.country_of_publication_country.title) |
|
|
|
|
|
else getattr(edition, "country_of_publication", None) |
|
|
|
|
|
) |
|
|
|
|
|
city = get_localized_text(city_src, request) if city_src else "" |
|
|
|
|
|
country = get_localized_text(country_src, request) if country_src else "" |
|
|
|
|
|
vol_count = edition.volumes.count() if hasattr(edition, "volumes") else 0 |
|
|
|
|
|
num_vols = vol_count if vol_count > 0 else edition.number_of_volumes |
|
|
|
|
|
|
|
|
|
|
|
def _serialize_contributor(c): |
|
|
|
|
|
name = get_localized_text(c.name, request) if isinstance(getattr(c, "name", None), list) else (getattr(c, "name", None) or "") |
|
|
|
|
|
author_obj = getattr(c, "author", None) |
|
|
|
|
|
author_data = None |
|
|
|
|
|
if author_obj: |
|
|
|
|
|
author_data = { |
|
|
|
|
|
"id": author_obj.id, |
|
|
|
|
|
"slug": author_obj.slug, |
|
|
|
|
|
"name": get_localized_text(author_obj.name, request) if isinstance(author_obj.name, list) else (author_obj.name or ""), |
|
|
|
|
|
} |
|
|
|
|
|
return { |
|
|
|
|
|
"id": c.id, |
|
|
|
|
|
"name": name, |
|
|
|
|
|
"slug": author_obj.slug if (author_obj and author_obj.slug) else getattr(c, "slug", None), |
|
|
|
|
|
"author_id": getattr(c, "author_id", None), |
|
|
|
|
|
"author": author_data, |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
researchers = [_serialize_contributor(r) for r in edition.researchers.all()] if hasattr(edition, "researchers") else [] |
|
|
|
|
|
editors = [_serialize_contributor(e) for e in edition.editors.all()] if hasattr(edition, "editors") else [] |
|
|
|
|
|
|
|
|
return { |
|
|
return { |
|
|
"id": edition.id, |
|
|
"id": edition.id, |
|
|
"title": ed_title or "", |
|
|
"title": ed_title or "", |
|
|
"edition_number": edition.edition_number, |
|
|
"edition_number": edition.edition_number, |
|
|
"publisher": pub or "", |
|
|
"publisher": pub or "", |
|
|
|
|
|
"publication_place": {"city": city or "", "country": country or ""}, |
|
|
"year_of_publication": edition.year_of_publication or "", |
|
|
"year_of_publication": edition.year_of_publication or "", |
|
|
"number_of_volumes": edition.number_of_volumes, |
|
|
|
|
|
|
|
|
"number_of_volumes": num_vols, |
|
|
|
|
|
"source_url": getattr(edition, "source_url", None) or "", |
|
|
|
|
|
"researchers": researchers, |
|
|
|
|
|
"editors": editors, |
|
|
} |
|
|
} |
|
|
return None |
|
|
return None |
|
|
|
|
|
|
|
|
@ -1927,13 +1967,53 @@ class BaseDetailedReferenceSerializer(serializers.ModelSerializer): |
|
|
pub_src = edition.publisher_item.title if (getattr(edition, "publisher_item_id", None) and edition.publisher_item and edition.publisher_item.title) else edition.publisher |
|
|
pub_src = edition.publisher_item.title if (getattr(edition, "publisher_item_id", None) and edition.publisher_item and edition.publisher_item.title) else edition.publisher |
|
|
pub = get_localized_text(pub_src, request) if isinstance(pub_src, list) else pub_src |
|
|
pub = get_localized_text(pub_src, request) if isinstance(pub_src, list) else pub_src |
|
|
ed_title = get_localized_text(edition.title, request) if isinstance(getattr(edition, "title", None), list) else getattr(edition, "title", None) |
|
|
ed_title = get_localized_text(edition.title, request) if isinstance(getattr(edition, "title", None), list) else getattr(edition, "title", None) |
|
|
|
|
|
city_src = ( |
|
|
|
|
|
edition.city_of_publication_city.title |
|
|
|
|
|
if (getattr(edition, "city_of_publication_city_id", None) and edition.city_of_publication_city and edition.city_of_publication_city.title) |
|
|
|
|
|
else getattr(edition, "city_of_publication", None) |
|
|
|
|
|
) |
|
|
|
|
|
country_src = ( |
|
|
|
|
|
edition.country_of_publication_country.title |
|
|
|
|
|
if (getattr(edition, "country_of_publication_country_id", None) and edition.country_of_publication_country and edition.country_of_publication_country.title) |
|
|
|
|
|
else getattr(edition, "country_of_publication", None) |
|
|
|
|
|
) |
|
|
|
|
|
city = get_localized_text(city_src, request) if city_src else "" |
|
|
|
|
|
country = get_localized_text(country_src, request) if country_src else "" |
|
|
|
|
|
vol_count = edition.volumes.count() if hasattr(edition, "volumes") else 0 |
|
|
|
|
|
num_vols = vol_count if vol_count > 0 else edition.number_of_volumes |
|
|
|
|
|
|
|
|
|
|
|
def _serialize_contributor(c): |
|
|
|
|
|
name = get_localized_text(c.name, request) if isinstance(getattr(c, "name", None), list) else (getattr(c, "name", None) or "") |
|
|
|
|
|
author_obj = getattr(c, "author", None) |
|
|
|
|
|
author_data = None |
|
|
|
|
|
if author_obj: |
|
|
|
|
|
author_data = { |
|
|
|
|
|
"id": author_obj.id, |
|
|
|
|
|
"slug": author_obj.slug, |
|
|
|
|
|
"name": get_localized_text(author_obj.name, request) if isinstance(author_obj.name, list) else (author_obj.name or ""), |
|
|
|
|
|
} |
|
|
|
|
|
return { |
|
|
|
|
|
"id": c.id, |
|
|
|
|
|
"name": name, |
|
|
|
|
|
"slug": author_obj.slug if (author_obj and author_obj.slug) else getattr(c, "slug", None), |
|
|
|
|
|
"author_id": getattr(c, "author_id", None), |
|
|
|
|
|
"author": author_data, |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
researchers = [_serialize_contributor(r) for r in edition.researchers.all()] if hasattr(edition, "researchers") else [] |
|
|
|
|
|
editors = [_serialize_contributor(e) for e in edition.editors.all()] if hasattr(edition, "editors") else [] |
|
|
|
|
|
|
|
|
return { |
|
|
return { |
|
|
"id": edition.id, |
|
|
"id": edition.id, |
|
|
"title": ed_title or "", |
|
|
"title": ed_title or "", |
|
|
"edition_number": edition.edition_number, |
|
|
"edition_number": edition.edition_number, |
|
|
"publisher": pub or "", |
|
|
"publisher": pub or "", |
|
|
|
|
|
"publication_place": {"city": city or "", "country": country or ""}, |
|
|
"year_of_publication": edition.year_of_publication or "", |
|
|
"year_of_publication": edition.year_of_publication or "", |
|
|
"number_of_volumes": edition.number_of_volumes, |
|
|
|
|
|
|
|
|
"number_of_volumes": num_vols, |
|
|
|
|
|
"source_url": getattr(edition, "source_url", None) or "", |
|
|
|
|
|
"researchers": researchers, |
|
|
|
|
|
"editors": editors, |
|
|
} |
|
|
} |
|
|
return None |
|
|
return None |
|
|
|
|
|
|
|
|
|