Skip to content

Commit 8fa4716

Browse files
committed
fix(dref): update finalize api and translation check logic
1 parent f658455 commit 8fa4716

File tree

4 files changed

+21
-28
lines changed

4 files changed

+21
-28
lines changed

dref/serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,7 @@ def create(self, validated_data):
794794
current_language = get_language()
795795
dref_operational_update = DrefOperationalUpdate.objects.filter(dref=dref).order_by("-operational_update_number").first()
796796
validated_data["created_by"] = self.context["request"].user
797+
validated_data["original_language"] = current_language
797798
if not dref_operational_update:
798799
validated_data["title"] = dref.title
799800
validated_data["title_prefix"] = dref.title_prefix
@@ -915,7 +916,6 @@ def create(self, validated_data):
915916
validated_data["is_man_made_event"] = dref.is_man_made_event
916917
validated_data["event_text"] = dref.event_text
917918
validated_data["did_national_society"] = dref.did_national_society
918-
validated_data["original_language"] = current_language
919919
operational_update = super().create(validated_data)
920920
# XXX: Copy files from DREF (Only nested serialized fields)
921921
nested_serialized_file_fields = [

dref/tasks.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import logging
2-
31
from celery import shared_task
42
from django.template.loader import render_to_string
53

@@ -8,8 +6,6 @@
86
from .models import Dref
97
from .utils import get_email_context
108

11-
logger = logging.getLogger(__name__)
12-
139

1410
@shared_task
1511
def send_dref_email(dref_id, users_emails, new_or_updated=""):

dref/utils.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1+
import logging
2+
13
from django.conf import settings
24
from django.contrib.postgres.aggregates import ArrayAgg
35
from django.db import models
4-
from django.utils import translation
56
from modeltranslation.translator import translator
7+
from modeltranslation.utils import build_localized_fieldname
68

79
from dref.models import Dref, DrefFinalReport, DrefOperationalUpdate
810

11+
logger = logging.getLogger(__name__)
12+
913

1014
def get_email_context(instance):
1115
from dref.serializers import DrefSerializer
@@ -67,17 +71,12 @@ def is_translation_complete(instance, target_lang="en"):
6771
return False
6872
try:
6973
opts = translator.get_options_for_model(type(instance))
70-
except Exception:
71-
return True
74+
except Exception as e:
75+
logger.warning(f"Failed to get translation options {e}", exc_info=True)
76+
return False
7277
for field in getattr(opts, "fields", []):
73-
with translation.override(original_lang):
74-
original_value = getattr(instance, field, None)
75-
76-
with translation.override(target_lang):
77-
translated_value = getattr(instance, field, None)
78-
if not original_value:
79-
continue
80-
if not translated_value:
78+
original_value = getattr(instance, build_localized_fieldname(field, original_lang), None)
79+
translated_value = getattr(instance, build_localized_fieldname(field, target_lang), None)
80+
if original_value and not translated_value:
8181
return False
82-
8382
return True

dref/views.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,12 @@ def finalize(self, request, pk=None, version=None):
112112

113113
if not is_translation_complete(dref):
114114
raise serializers.ValidationError("Cannot be finalized because translation is not completed")
115-
115+
fields_to_update = ["status"]
116116
if dref.translation_module_original_language != "en":
117117
dref.translation_module_original_language = "en"
118-
dref.status = Dref.Status.FINALIZED
119-
dref.save(update_fields=["status", "translation_module_original_language"])
118+
fields_to_update.append("translation_module_original_language")
120119
dref.status = Dref.Status.FINALIZED
121-
dref.save(update_fields=["status"])
120+
dref.save(update_fields=fields_to_update)
122121
serializer = DrefSerializer(dref, context={"request": request})
123122
return response.Response(serializer.data)
124123

@@ -205,12 +204,12 @@ def finalize(self, request, pk=None, version=None):
205204
)
206205
if not is_translation_complete(operational_update):
207206
raise serializers.ValidationError("Cannot be finalized because translation is not completed")
207+
fields_to_update = ["status"]
208208
if operational_update.translation_module_original_language != "en":
209209
operational_update.translation_module_original_language = "en"
210-
operational_update.status = Dref.Status.FINALIZED
211-
operational_update.save(update_fields=["status", "translation_module_original_language"])
210+
fields_to_update.append("translation_module_original_language")
212211
operational_update.status = Dref.Status.FINALIZED
213-
operational_update.save(update_fields=["status"])
212+
operational_update.save(update_fields=fields_to_update)
214213
serializer = DrefOperationalUpdateSerializer(operational_update, context={"request": request})
215214
return response.Response(serializer.data)
216215

@@ -267,13 +266,12 @@ def finalize(self, request, pk=None, version=None):
267266
)
268267
if not is_translation_complete(field_report):
269268
raise serializers.ValidationError("Cannot be finalized because translation is not completed")
270-
269+
fields_to_update = ["status"]
271270
if field_report.translation_module_original_language != "en":
272271
field_report.translation_module_original_language = "en"
273-
field_report.status = Dref.Status.FINALIZED
274-
field_report.save(update_fields=["status", "translation_module_original_language"])
272+
fields_to_update.append("translation_module_original_language")
275273
field_report.status = Dref.Status.FINALIZED
276-
field_report.save(update_fields=["status"])
274+
field_report.save(update_fields=fields_to_update)
277275
serializer = DrefFinalReportSerializer(field_report, context={"request": request})
278276
return response.Response(serializer.data)
279277

0 commit comments

Comments
 (0)