Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 22 additions & 13 deletions geonode/indexing/api/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from rest_framework.filters import BaseFilterBackend

from geonode.indexing.models import ResourceIndex
from geonode.metadata.multilang.utils import get_2letters_languages, get_pg_language
from geonode.metadata.multilang.utils import get_2letters_languages, get_pg_language, get_default_language


logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -45,18 +45,27 @@ def validate_lang(search_lang):
if search_index not in settings.METADATA_INDEXES:
raise serializers.ValidationError(f"Unknown index '{search_index}'")

search_lang = request.query_params.get("search_lang", None)
if search_lang:
search_lang = validate_lang(search_lang)
if not search_lang:
search_lang = get_language_from_request(request)[:2]
search_lang = validate_lang(search_lang)

lang_filter = Q(lang__isnull=True)
if search_lang:
lang_filter = lang_filter | Q(lang=search_lang)

pg_lang = get_pg_language(search_lang)
if any(field in settings.METADATA_INDEXES[search_index] for field in settings.MULTILANG_FIELDS):
# We have at least one field in the index that is multilang

# first option: get a language as query param
search_lang = validate_lang(request.query_params.get("search_lang"))
if not search_lang:
# 2nd option: check standard config: http headers, cookies
lang_from_request = get_language_from_request(request)
if lang_from_request:
search_lang = validate_lang(lang_from_request[:2])
if not search_lang:
# fallback: just take the default lang
logger.info("search language not found, forcing default")
search_lang = get_default_language()

pg_lang = get_pg_language(search_lang)
lang_filter = Q(lang=search_lang)

else: # the index has no multilang entry
pg_lang = get_pg_language(None)
lang_filter = Q(lang__isnull=True)

queryset = queryset.filter(
pk__in=Subquery(
Expand Down
2 changes: 1 addition & 1 deletion geonode/indexing/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def update_index(self, resource_id, jsoninstance: dict):

if all(field in non_ml_fields for field in index_fields):
# this index is not localized
pg_lang = multi.get_pg_language(multi.get_default_language())
pg_lang = multi.get_pg_language(None)
logger.debug(
f"Creating non localized index - resource:{resource_id} index name:{index_name} default lang:{pg_lang}"
)
Expand Down
Loading