Skip to content

Commit edcf953

Browse files
committed
[Fixes #13800] Refact metadata i18n mechanism - use new gettext
1 parent f53b942 commit edcf953

File tree

8 files changed

+26
-37
lines changed

8 files changed

+26
-37
lines changed

geonode/base/i18n.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,12 @@ class LabelResolver:
128128
CACHE_KEY_LABELS = "labels"
129129

130130
def gettext(self, key, lang=None, fallback=True):
131+
"""
132+
Return the translated text in the label Thesaurus, falling back to the PO/MO translation.
133+
If fallback=False only search in the label Thesaurus, and may return None if not found
134+
"""
131135
lang = lang or get_language()
136+
# TODO: implement the OVR search
132137
return self.get_labels(lang).get(key, None) or (_(key) if fallback else None)
133138

134139
def get_labels(self, lang):

geonode/metadata/handlers/abstract.py

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,8 @@
2323

2424
from typing_extensions import deprecated
2525

26-
from django.utils.translation import gettext as _
27-
2826
from geonode.base.models import ResourceBase
29-
from geonode.base.i18n import OVR_SUFFIX
30-
from geonode.metadata.manager import CONTEXT_KEY_LABELS
27+
from geonode.base.i18n import OVR_SUFFIX, labelResolver
3128

3229
logger = logging.getLogger(__name__)
3330

@@ -163,37 +160,26 @@ def _set_error(errors: dict, path: list, msg: str):
163160

164161
@staticmethod
165162
def localize_message(context: dict, msg_code: str, msg_info: dict):
166-
msg_loc: str = MetadataHandler._get_tkl_labels(context, None, msg_code)
163+
msg_loc: str = labelResolver.gettext(msg_code)
167164
if msg_loc:
168165
tokens = defaultdict(lambda: "N/A", msg_info or {})
169166
return msg_loc.format_map(tokens)
170167
else:
171168
logger.warning(f"Missing i18n entry for key '{msg_code}' -- info is {msg_info}")
172169
return f"{msg_code}:{msg_info}"
173170

174-
@staticmethod
175-
def _localize_label(context, lang: str, text: str):
176-
# TODO: deprecate and use LabelResolver.gettext(...fallback=true)
177-
label = MetadataHandler._get_tkl_labels(context, lang, text)
178-
return label or _(text)
179-
180-
@staticmethod
181-
def _get_tkl_labels(context, lang: str | None, text: str):
182-
# TODO: deprecate and use LabelResolver.gettext(...fallback=false)
183-
return context.get(CONTEXT_KEY_LABELS, {}).get(text, None)
184-
185171
@staticmethod
186172
def _localize_subschema_labels(context, subschema: dict, lang: str, property_name: str = None):
187173
for annotation_name, synt in (
188174
("title", ""),
189175
("description", "__descr"),
190176
):
191-
if ovr := MetadataHandler._get_tkl_labels(context, lang, f"{property_name}{synt}{OVR_SUFFIX}"):
177+
if ovr := labelResolver.gettext(f"{property_name}{synt}{OVR_SUFFIX}", lang, fallback=False):
192178
subschema[annotation_name] = ovr
193179
elif annotation_name in subschema:
194-
subschema[annotation_name] = MetadataHandler._localize_label(context, lang, subschema[annotation_name])
180+
subschema[annotation_name] = labelResolver.gettext(subschema[annotation_name], lang)
195181
elif property_name: # arrays may not have a name
196-
label = MetadataHandler._get_tkl_labels(context, lang, f"{property_name}{synt}")
182+
label = labelResolver.gettext(f"{property_name}{synt}", lang, fallback=False)
197183
if label:
198184
subschema[annotation_name] = label
199185

geonode/metadata/handlers/contact.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from django.contrib.auth import get_user_model
2525
from django.utils.translation import gettext as _
2626

27+
from geonode.base.i18n import labelResolver
2728
from geonode.metadata.handlers.abstract import MetadataHandler
2829
from geonode.people import Roles
2930
from geonode.resource.manager import resource_manager
@@ -66,7 +67,7 @@ def update_schema(self, jsonschema, context, lang=None):
6667
if role.is_multivalue:
6768
contact = {
6869
"type": "array",
69-
"title": self._localize_label(context, lang, role.label) + card,
70+
"title": labelResolver.gettext(role.label, lang) + card,
7071
"minItems": minitems,
7172
"items": {
7273
"type": "object",
@@ -86,7 +87,7 @@ def update_schema(self, jsonschema, context, lang=None):
8687
else:
8788
contact = {
8889
"type": "object",
89-
"title": self._localize_label(context, lang, role.label) + card,
90+
"title": labelResolver.gettext(role.label, lang) + card,
9091
"properties": {
9192
"id": {
9293
"type": "string",

geonode/metadata/handlers/sparse.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
from geonode.metadata.exceptions import UnsetFieldException
2727
from geonode.metadata.models import SparseField
2828

29-
from geonode.base.i18n import get_localized_tkeywords
29+
from geonode.base.i18n import get_localized_tkeywords, labelResolver
3030

3131
logger = logging.getLogger(__name__)
3232

@@ -78,7 +78,7 @@ def _recurse_localization(self, context, schema, lang, field_name=None):
7878
self._recurse_localization(context, subschema, lang, prop_name)
7979
for item in schema.get("oneOf", []):
8080
if title := item.get("title", None):
81-
item["title"] = MetadataHandler._localize_label(context, lang, title)
81+
item["title"] = labelResolver.gettext(title, lang)
8282

8383
def _recurse_thesauri_autocomplete(self, d, lang):
8484
if isinstance(d, dict):

geonode/metadata/manager.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,12 @@
2727
from geonode.indexing.manager import index_manager
2828
from geonode.metadata.handlers.abstract import MetadataHandler
2929
from geonode.metadata.exceptions import UnsetFieldException
30-
from geonode.base.i18n import I18nCache
30+
from geonode.base.i18n import i18nCache
3131
from geonode.metadata.settings import MODEL_SCHEMA
3232

3333
logger = logging.getLogger(__name__)
3434

3535
CACHE_KEY_SCHEMA = "schema"
36-
CONTEXT_KEY_LABELS = "labels"
3736

3837

3938
class MetadataManager:
@@ -48,7 +47,6 @@ class MetadataManager:
4847
def __init__(self):
4948
self.root_schema = MODEL_SCHEMA
5049
self.handlers = {}
51-
self._i18n_cache = I18nCache()
5250

5351
def add_handler(self, handler_id, handler):
5452
self.handlers[handler_id] = handler()
@@ -61,7 +59,7 @@ def post_init(self):
6159
handler.post_init()
6260

6361
def _init_schema_context(self, lang):
64-
return {CONTEXT_KEY_LABELS: self._i18n_cache.get_labels(lang)}
62+
return {}
6563

6664
def build_schema(self, lang=None):
6765
logger.debug(f"build_schema {lang}")
@@ -86,12 +84,12 @@ def build_schema(self, lang=None):
8684

8785
def get_schema(self, lang=None):
8886
lang = str(lang)
89-
thesaurus_date, schema = self._i18n_cache.get_entry(lang, CACHE_KEY_SCHEMA)
87+
thesaurus_date, schema = i18nCache.get_entry(lang, CACHE_KEY_SCHEMA)
9088
if schema is None:
9189
logger.info(f"Building schema for {lang}")
9290
schema = self.build_schema(lang)
9391
logger.debug("Schema built")
94-
self._i18n_cache.set(lang, CACHE_KEY_SCHEMA, schema, thesaurus_date)
92+
i18nCache.set(lang, CACHE_KEY_SCHEMA, schema, thesaurus_date)
9593
return schema
9694

9795
def build_schema_instance(self, resource, lang=None):

geonode/metadata/tests/test_handlers.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
6161
from geonode.metadata.handlers.thesaurus import TKeywordsHandler
6262
from geonode.metadata.handlers.contact import ContactHandler, ROLE_NAMES_MAP
6363
from geonode.metadata.handlers.sparse import SparseHandler, sparse_field_registry
64-
from geonode.metadata.manager import CONTEXT_KEY_LABELS
6564
from geonode.metadata.models import SparseField
6665
from geonode.metadata.settings import MODEL_SCHEMA
6766
from geonode.metadata.exceptions import UnsetFieldException
@@ -1376,7 +1375,7 @@ def test_tkeywords_handler_update_schema_with_thesauri(self, mock_collect_thesau
13761375
mocked_endpoint.side_effect = lambda name, kwargs: f"/mocked/url/{kwargs['thesaurusid']}"
13771376

13781377
# Call the method
1379-
updated_schema = self.tkeywords_handler.update_schema(schema, context={CONTEXT_KEY_LABELS: {}}, lang="en")
1378+
updated_schema = self.tkeywords_handler.update_schema(schema, context={}, lang="en")
13801379

13811380
# Assert tkeywords property is added
13821381
tkeywords = updated_schema["properties"].get("tkeywords")
@@ -1428,7 +1427,7 @@ def test_tkeywords_handler_update_schema_no_thesauri(self, mock_collect_thesauri
14281427
mock_collect_thesauri.return_value = {}
14291428

14301429
# Call the method
1431-
updated_schema = self.tkeywords_handler.update_schema(schema, context={CONTEXT_KEY_LABELS: {}}, lang="en")
1430+
updated_schema = self.tkeywords_handler.update_schema(schema, context={}, lang="en")
14321431

14331432
# Assert tkeywords property is hidden
14341433
tkeywords = updated_schema["properties"].get("tkeywords")
@@ -1675,7 +1674,6 @@ def test_sparse_handler_update_resource(self):
16751674
}
16761675
}
16771676
},
1678-
CONTEXT_KEY_LABELS: {},
16791677
}
16801678

16811679
# Test string field

geonode/metadata/tests/tests.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
from rest_framework.test import APITestCase
3333
from geonode.metadata.settings import MODEL_SCHEMA
34-
from geonode.metadata.manager import metadata_manager, CONTEXT_KEY_LABELS, CACHE_KEY_SCHEMA
34+
from geonode.metadata.manager import metadata_manager, CACHE_KEY_SCHEMA
3535
from geonode.base.i18n import I18nCache
3636
from geonode.metadata.api.views import (
3737
ProfileAutocomplete,
@@ -916,7 +916,7 @@ def test_update_schema_instance_no_errors(self, mock_get_schema):
916916
mock_request.data = {"field1": "new_value1", "new_field2": "new_value2"}
917917
mock_request.user = self.test_user_1
918918

919-
expected_context = {CONTEXT_KEY_LABELS: {}, "user": self.test_user_1}
919+
expected_context = {"user": self.test_user_1}
920920

921921
mock_get_schema.return_value = self.fake_schema
922922

uwsgi.ini

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
[uwsgi]
22
# uwsgi-socket = 0.0.0.0:8000
33
http-socket = 0.0.0.0:8000
4-
logto = /var/log/geonode.log
4+
logto = /tmp/geonode.log
55
# pidfile = /tmp/geonode.pid
66

7-
chdir = /usr/src/geonode/
7+
;chdir = /usr/src/geonode/
8+
chdir = /home/etj/prj/geonode/geonode5/geonode
89
module = geonode.wsgi:application
910

1011
strict = false

0 commit comments

Comments
 (0)