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