Skip to content

Commit 50397b0

Browse files
committed
Fixed auto creation of child pages
1 parent eb4e574 commit 50397b0

File tree

3 files changed

+111
-8
lines changed

3 files changed

+111
-8
lines changed

wagtail_localize_pontoon/importer.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,12 @@ def try_update_resource_translation(self, resource, language):
130130
self.logger.info(
131131
f"Cannot save translated page for '{resource.page.title}' in {language.get_display_name()} yet as its parent must be translated first"
132132
)
133+
return
133134

134135
if created:
135136
# Check if this page has any children that may be ready to translate
136137
child_page_resources = PontoonResource.objects.filter(
137-
page__in=revision.page.get_children()
138+
page__in=resource.page.get_children()
138139
)
139140

140141
for resource in child_page_resources:
@@ -157,8 +158,7 @@ def import_file(self, filename, old_content, new_content):
157158
old_po = polib.pofile(old_content.decode("utf-8"))
158159
new_po = polib.pofile(new_content.decode("utf-8"))
159160

160-
with transaction.atomic():
161-
self.import_resource(resource, language, old_po, new_po)
161+
self.import_resource(resource, language, old_po, new_po)
162162

163-
# Check if the translated page is ready to be created/updated
164-
self.try_update_resource_translation(resource, language)
163+
# Check if the translated page is ready to be created/updated
164+
self.try_update_resource_translation(resource, language)

wagtail_localize_pontoon/models.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,16 @@ def find_translatable_submission(self, language):
171171
)
172172

173173
for submission in submissions_to_check:
174-
translated_segments, total_segments = submission.get_translation_progress(
174+
total_segments, translated_segments = submission.get_translation_progress(
175175
language
176176
)
177177

178178
if translated_segments == total_segments:
179179
return submission
180+
else:
181+
import pdb
182+
183+
pdb.set_trace()
180184

181185
def latest_submission(self):
182186
return self.submissions.latest("created_at")

wagtail_localize_pontoon/test/tests/test_importer.py

Lines changed: 101 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414

1515

1616
def create_test_page(**kwargs):
17-
root_page = Page.objects.get(id=1)
18-
page = root_page.add_child(instance=TestPage(**kwargs))
17+
parent = kwargs.pop("parent", None) or Page.objects.get(id=1)
18+
page = parent.add_child(instance=TestPage(**kwargs))
1919
revision = page.save_revision()
2020
revision.publish()
2121
return page
@@ -118,3 +118,102 @@ def test_importer(self):
118118
log_resource = log.resources.get()
119119
self.assertEqual(log_resource.resource, self.resource)
120120
self.assertEqual(log_resource.language, self.language)
121+
122+
def test_importer_doesnt_import_if_parent_not_translated(self):
123+
child_page = create_test_page(
124+
title="Test child page",
125+
slug="test-child-page",
126+
test_translatable_field="The test child's translatable field",
127+
test_synchronized_field="The test synchronized field",
128+
parent=self.page,
129+
)
130+
child_resource = PontoonResource.objects.get(page=child_page)
131+
132+
with self.subTest(stage="Create child page"):
133+
# Translate
134+
po_v1 = create_test_po(
135+
[("The test child's translatable field", "")]
136+
).encode("utf-8")
137+
138+
po_v2 = create_test_po(
139+
[
140+
(
141+
"The test child's translatable field",
142+
"Le champ traduisible de test",
143+
)
144+
]
145+
).encode("utf-8")
146+
147+
importer = Importer(Language.objects.default(), logging.getLogger("dummy"))
148+
importer.start_import("0" * 40)
149+
importer.import_file(
150+
child_resource.get_po_filename(language=self.language), po_v1, po_v2
151+
)
152+
153+
# Check translated page was not created
154+
self.assertFalse(
155+
child_page.get_translations()
156+
.filter(locale__language=self.language)
157+
.exists()
158+
)
159+
160+
# Check log
161+
log = PontoonSyncLog.objects.get()
162+
self.assertEqual(log.action, PontoonSyncLog.ACTION_PULL)
163+
self.assertEqual(log.commit_id, "0" * 40)
164+
log_resource = log.resources.get()
165+
self.assertEqual(log_resource.resource, child_resource)
166+
self.assertEqual(log_resource.language, self.language)
167+
168+
with self.subTest(stage="Create parent page"):
169+
po_v1 = create_test_po([("The test translatable field", "")]).encode(
170+
"utf-8"
171+
)
172+
173+
po_v2 = create_test_po(
174+
[("The test translatable field", "Le champ traduisible de test")]
175+
).encode("utf-8")
176+
177+
importer = Importer(Language.objects.default(), logging.getLogger("dummy"))
178+
importer.start_import("0" * 39 + "1")
179+
importer.import_file(
180+
self.resource.get_po_filename(language=self.language), po_v1, po_v2
181+
)
182+
183+
# Check both translated pages were created
184+
translated_parent = self.page.get_translations().get(
185+
locale__language=self.language
186+
)
187+
self.assertEqual(
188+
translated_parent.translation_key, self.page.translation_key
189+
)
190+
self.assertFalse(translated_parent.is_source_translation)
191+
self.assertEqual(
192+
translated_parent.test_translatable_field,
193+
"Le champ traduisible de test",
194+
)
195+
self.assertEqual(
196+
translated_parent.test_synchronized_field, "The test synchronized field"
197+
)
198+
199+
translated_child = child_page.get_translations().get(
200+
locale__language=self.language
201+
)
202+
self.assertEqual(
203+
translated_child.translation_key, child_page.translation_key
204+
)
205+
self.assertFalse(translated_child.is_source_translation)
206+
self.assertEqual(
207+
translated_child.test_translatable_field, "Le champ traduisible de test"
208+
)
209+
self.assertEqual(
210+
translated_child.test_synchronized_field, "The test synchronized field"
211+
)
212+
213+
# Check log
214+
log = PontoonSyncLog.objects.exclude(id=log.id).get()
215+
self.assertEqual(log.action, PontoonSyncLog.ACTION_PULL)
216+
self.assertEqual(log.commit_id, "0" * 39 + "1")
217+
log_resource = log.resources.get()
218+
self.assertEqual(log_resource.resource, self.resource)
219+
self.assertEqual(log_resource.language, self.language)

0 commit comments

Comments
 (0)