1# This Source Code Form is subject to the terms of the Mozilla Public
2# License, v. 2.0. If a copy of the MPL was not distributed with this
3# file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
5from __future__ import absolute_import, print_function
6
7import sys
8import json
9import copy
10
11engines = []
12
13locale = sys.argv[2]
14output_file = sys.argv[3]
15
16output = open(output_file, 'w')
17
18with open(sys.argv[1]) as f:
19    searchinfo = json.load(f)
20
21# If we have a locale, use it, otherwise use the default
22if locale in searchinfo["locales"]:
23    localeSearchInfo = searchinfo["locales"][locale]
24else:
25    localeSearchInfo = {}
26    localeSearchInfo["default"] = searchinfo["default"]
27
28
29def validateDefault(key):
30    if key not in searchinfo["default"]:
31        print("Error: Missing default %s in list.json" % (key), file=sys.stderr)
32        sys.exit(1)
33
34
35validateDefault("searchDefault")
36validateDefault("visibleDefaultEngines")
37
38# If the selected locale doesn't have a searchDefault,
39# use the global one.
40if "searchDefault" not in localeSearchInfo["default"]:
41    localeSearchInfo["default"]["searchDefault"] = searchinfo["default"]["searchDefault"]
42
43# If the selected locale doesn't have a searchOrder,
44# use the global one if present.
45# searchOrder is NOT required.
46if (
47    "searchOrder" not in localeSearchInfo["default"]
48    and "searchOrder" in searchinfo["default"]
49):
50    localeSearchInfo["default"]["searchOrder"] = searchinfo["default"]["searchOrder"]
51
52# If we have region overrides, enumerate through them
53# and add the additional regions to the locale information.
54if "regionOverrides" in searchinfo:
55    regionOverrides = searchinfo["regionOverrides"]
56
57    for region in regionOverrides:
58        # Only add a new engine list if there is an engine that is overridden
59        enginesToOverride = set(regionOverrides[region].keys())
60        if region in localeSearchInfo and "visibleDefaultEngines" in localeSearchInfo[region]:
61            visibleDefaultEngines = localeSearchInfo[region]["visibleDefaultEngines"]
62        else:
63            visibleDefaultEngines = localeSearchInfo["default"]["visibleDefaultEngines"]
64        if set(visibleDefaultEngines) & enginesToOverride:
65            if region not in localeSearchInfo:
66                localeSearchInfo[region] = {}
67            localeSearchInfo[region]["visibleDefaultEngines"] = copy.deepcopy(
68                visibleDefaultEngines)
69            for i, engine in enumerate(localeSearchInfo[region]["visibleDefaultEngines"]):
70                if engine in regionOverrides[region]:
71                    localeSearchInfo[region]["visibleDefaultEngines"][i] = \
72                        regionOverrides[region][engine]
73
74output.write(json.dumps(localeSearchInfo, ensure_ascii=False).encode('utf8'))
75
76output.close()
77