Skip to content

Commit e38a550

Browse files
committed
Bug 1321279 - Part 2 - Specify reference file in add_transforms.
Remove MergeContext.add_reference in favor of an additional argument to MergeContext.add_transforms. This removes the redundancy of speficying the destination path twice.
1 parent ca516c0 commit e38a550

File tree

6 files changed

+35
-58
lines changed

6 files changed

+35
-58
lines changed

fluent/migrate/context.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from __future__ import unicode_literals
33

44
import os
5+
import sys
56
import codecs
67
import logging
78

@@ -109,22 +110,6 @@ def read_legacy_resource(self, path):
109110
# Transform the parsed result which is an iterator into a dict.
110111
return {entity.key: entity.val for entity in parser}
111112

112-
def add_reference(self, path, realpath=None):
113-
"""Add an FTL AST to this context's reference resources."""
114-
fullpath = os.path.join(self.reference_dir, realpath or path)
115-
try:
116-
ast = self.read_ftl_resource(fullpath)
117-
except IOError as err:
118-
error_message = 'Missing reference file: {}'.format(fullpath)
119-
logging.getLogger('migrate').error(error_message)
120-
raise UnreadableReferenceError(error_message)
121-
except UnicodeDecodeError as err:
122-
error_message = 'Error reading file {}: {}'.format(fullpath, err)
123-
logging.getLogger('migrate').error(error_message)
124-
raise UnreadableReferenceError(error_message)
125-
else:
126-
self.reference_resources[path] = ast
127-
128113
def maybe_add_localization(self, path):
129114
"""Add a localization resource to migrate translations from.
130115
@@ -150,8 +135,8 @@ def maybe_add_localization(self, path):
150135
else:
151136
self.localization_resources[path] = collection
152137

153-
def add_transforms(self, path, transforms):
154-
"""Define transforms for path.
138+
def add_transforms(self, path, reference, transforms):
139+
"""Define transforms for path using reference as template.
155140
156141
Each transform is an extended FTL node with `Transform` nodes as some
157142
values. Transforms are stored in their lazy AST form until
@@ -166,6 +151,22 @@ def get_sources(acc, cur):
166151
acc.add((cur.path, cur.key))
167152
return acc
168153

154+
refpath = os.path.join(self.reference_dir, reference)
155+
try:
156+
ast = self.read_ftl_resource(refpath)
157+
except IOError as err:
158+
error_message = 'Missing reference file: {}'.format(refpath)
159+
logging.getLogger('migrate').error(error_message)
160+
raise UnreadableReferenceError(error_message)
161+
except UnicodeDecodeError as err:
162+
error_message = 'Error reading file {}: {}'.format(refpath, err)
163+
logging.getLogger('migrate').error(error_message)
164+
raise UnreadableReferenceError(error_message)
165+
else:
166+
# The reference file will be used by the merge function as
167+
# a template for serializing the merge results.
168+
self.reference_resources[path] = ast
169+
169170
for node in transforms:
170171
# Scan `node` for `Source` nodes and collect the information they
171172
# store into a set of dependencies.

tests/migrate/test_context.py

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,14 @@ def setUp(self):
2626
localization_dir=here('fixtures/pl')
2727
)
2828

29-
self.ctx.add_reference('aboutDownloads.ftl')
3029
try:
3130
self.ctx.maybe_add_localization('aboutDownloads.dtd')
3231
self.ctx.maybe_add_localization('aboutDownloads.properties')
3332
except RuntimeError:
3433
self.skipTest('compare-locales required')
3534

3635
def test_hardcoded_node(self):
37-
self.ctx.add_transforms('aboutDownloads.ftl', [
36+
self.ctx.add_transforms('aboutDownloads.ftl', 'aboutDownloads.ftl', [
3837
FTL.Message(
3938
id=FTL.Identifier('about'),
4039
value=FTL.Pattern([
@@ -59,7 +58,7 @@ def test_hardcoded_node(self):
5958
)
6059

6160
def test_merge_single_message(self):
62-
self.ctx.add_transforms('aboutDownloads.ftl', [
61+
self.ctx.add_transforms('aboutDownloads.ftl', 'aboutDownloads.ftl', [
6362
FTL.Message(
6463
id=FTL.Identifier('title'),
6564
value=COPY(
@@ -85,7 +84,7 @@ def test_merge_single_message(self):
8584
)
8685

8786
def test_merge_one_changeset(self):
88-
self.ctx.add_transforms('aboutDownloads.ftl', [
87+
self.ctx.add_transforms('aboutDownloads.ftl', 'aboutDownloads.ftl', [
8988
FTL.Message(
9089
id=FTL.Identifier('title'),
9190
value=COPY(
@@ -124,7 +123,7 @@ def test_merge_one_changeset(self):
124123
)
125124

126125
def test_merge_two_changesets(self):
127-
self.ctx.add_transforms('aboutDownloads.ftl', [
126+
self.ctx.add_transforms('aboutDownloads.ftl', 'aboutDownloads.ftl', [
128127
FTL.Message(
129128
id=FTL.Identifier('title'),
130129
value=COPY(
@@ -177,7 +176,7 @@ def test_merge_two_changesets(self):
177176
self.assertDictEqual(merged_b, expected_b)
178177

179178
def test_serialize_changeset(self):
180-
self.ctx.add_transforms('aboutDownloads.ftl', [
179+
self.ctx.add_transforms('aboutDownloads.ftl', 'aboutDownloads.ftl', [
181180
FTL.Message(
182181
id=FTL.Identifier('title'),
183182
value=COPY(
@@ -247,7 +246,7 @@ def tearDown(self):
247246

248247
def test_missing_reference_file(self):
249248
with self.assertRaises(UnreadableReferenceError):
250-
self.ctx.add_reference('missing.ftl')
249+
self.ctx.add_transforms('some.ftl', 'missing.ftl', [])
251250

252251

253252
class TestIncompleteLocalization(unittest.TestCase):
@@ -261,13 +260,12 @@ def setUp(self):
261260
localization_dir=here('fixtures/pl')
262261
)
263262

264-
self.ctx.add_reference('toolbar.ftl')
265263
try:
266264
self.ctx.maybe_add_localization('browser.dtd')
267265
except RuntimeError:
268266
self.skipTest('compare-locales required')
269267

270-
self.ctx.add_transforms('toolbar.ftl', [
268+
self.ctx.add_transforms('toolbar.ftl', 'toolbar.ftl', [
271269
FTL.Message(
272270
id=FTL.Identifier('urlbar-textbox'),
273271
attributes=[
@@ -323,7 +321,6 @@ def setUp(self):
323321
localization_dir=here('fixtures/pl')
324322
)
325323

326-
self.ctx.add_reference('privacy.ftl')
327324
try:
328325
self.ctx.maybe_add_localization('privacy.dtd')
329326
except RuntimeError:
@@ -334,7 +331,7 @@ def tearDown(self):
334331
logging.disable(logging.NOTSET)
335332

336333
def test_existing_target_ftl_missing_string(self):
337-
self.ctx.add_transforms('privacy.ftl', [
334+
self.ctx.add_transforms('privacy.ftl', 'privacy.ftl', [
338335
FTL.Message(
339336
id=FTL.Identifier('dnt-learn-more'),
340337
value=COPY(
@@ -362,7 +359,7 @@ def test_existing_target_ftl_missing_string(self):
362359
)
363360

364361
def test_existing_target_ftl_existing_string(self):
365-
self.ctx.add_transforms('privacy.ftl', [
362+
self.ctx.add_transforms('privacy.ftl', 'privacy.ftl', [
366363
FTL.Message(
367364
id=FTL.Identifier('dnt-description'),
368365
value=COPY(
@@ -411,5 +408,4 @@ def test_add_ftl(self):
411408
localization_dir=here('fixtures/pl')
412409
)
413410

414-
ctx.add_reference('privacy.ftl')
415411
ctx.maybe_add_localization('privacy.ftl')

tests/migrate/test_context_real_examples.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,13 @@ def setUp(self):
2727
localization_dir=here('fixtures/pl')
2828
)
2929

30-
self.ctx.add_reference('aboutDownloads.ftl')
3130
try:
3231
self.ctx.maybe_add_localization('aboutDownloads.dtd')
3332
self.ctx.maybe_add_localization('aboutDownloads.properties')
3433
except RuntimeError:
3534
self.skipTest('compare-locales required')
3635

37-
self.ctx.add_transforms('aboutDownloads.ftl', [
36+
self.ctx.add_transforms('aboutDownloads.ftl', 'aboutDownloads.ftl', [
3837
FTL.Message(
3938
id=FTL.Identifier('title'),
4039
value=COPY(
@@ -289,12 +288,11 @@ def setUp(self):
289288
)
290289

291290
try:
292-
self.ctx.add_reference('aboutDialog.ftl')
293291
self.ctx.maybe_add_localization('aboutDialog.dtd')
294292
except RuntimeError:
295293
self.skipTest('compare-locales required')
296294

297-
self.ctx.add_transforms('aboutDialog.ftl', [
295+
self.ctx.add_transforms('aboutDialog.ftl', 'aboutDialog.ftl', [
298296
FTL.Message(
299297
id=FTL.Identifier('update-failed'),
300298
value=CONCAT(

tools/migrate/examples/about_dialog.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@
99
def migrate(ctx):
1010
"""Migrate about:dialog, part {index}"""
1111

12-
ctx.add_reference('browser/about_dialog.ftl', realpath='about_dialog.ftl')
1312
ctx.maybe_add_localization('browser/chrome/browser/aboutDialog.dtd')
1413

15-
ctx.add_transforms('browser/about_dialog.ftl', [
14+
ctx.add_transforms('browser/about_dialog.ftl', 'about_dialog.ftl', [
1615
FTL.Message(
1716
id=FTL.Identifier('update-failed'),
1817
value=CONCAT(

tools/migrate/examples/about_downloads.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,12 @@
77
def migrate(ctx):
88
"""Migrate about:download in Firefox for Android, part {index}"""
99

10-
ctx.add_reference(
11-
'mobile/about_downloads.ftl',
12-
realpath='about_downloads.ftl'
13-
)
1410
ctx.maybe_add_localization(
1511
'mobile/android/chrome/aboutDownloads.dtd')
1612
ctx.maybe_add_localization(
1713
'mobile/android/chrome/aboutDownloads.properties')
1814

19-
ctx.add_transforms('mobile/about_downloads.ftl', [
15+
ctx.add_transforms('mobile/about_downloads.ftl', 'about_downloads.ftl', [
2016
FTL.Message(
2117
id=FTL.Identifier('title'),
2218
value=COPY(

tools/migrate/examples/bug_1291693.py

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,12 @@
77
def migrate(ctx):
88
"""Bug 1291693 - Migrate the menubar to FTL, part {index}"""
99

10-
ctx.add_reference(
11-
'browser/menubar.ftl',
12-
realpath='menubar.ftl'
13-
)
14-
ctx.add_reference(
15-
'browser/toolbar.ftl',
16-
realpath='toolbar.ftl'
17-
)
18-
ctx.add_reference(
19-
'browser/branding/official/brand.ftl',
20-
realpath='brand.ftl'
21-
)
22-
2310
ctx.maybe_add_localization('browser/chrome/browser/browser.dtd')
2411
ctx.maybe_add_localization('browser/chrome/browser/browser.properties')
2512
ctx.maybe_add_localization('browser/branding/official/brand.dtd')
2613
ctx.maybe_add_localization('browser/branding/official/brand.properties')
2714

28-
ctx.add_transforms('browser/menubar.ftl', [
15+
ctx.add_transforms('browser/menubar.ftl', 'menubar.ftl', [
2916
FTL.Message(
3017
id=FTL.Identifier('file-menu'),
3118
attributes=[
@@ -1795,7 +1782,7 @@ def migrate(ctx):
17951782
),
17961783
])
17971784

1798-
ctx.add_transforms('browser/toolbar.ftl', [
1785+
ctx.add_transforms('browser/toolbar.ftl', 'toolbar.ftl', [
17991786
FTL.Message(
18001787
id=FTL.Identifier('urlbar-textbox'),
18011788
attributes=[
@@ -1889,7 +1876,7 @@ def migrate(ctx):
18891876
),
18901877
])
18911878

1892-
ctx.add_transforms('browser/branding/official/brand.ftl', [
1879+
ctx.add_transforms('browser/branding/official/brand.ftl', 'brand.ftl', [
18931880
FTL.Message(
18941881
id=FTL.Identifier('brand-shorter-name'),
18951882
value=COPY(

0 commit comments

Comments
 (0)