1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3# Copyright (c) 2021 Huawei Device Co., Ltd. 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16import argparse 17import os 18import sys 19import json 20 21 22def merge_files(args): 23 products_dir = "../../productdefine/common/products" 24 device_dir = "../../productdefine/common/device" 25 products_path = r'%s/%s' % (products_dir, args) 26 with open(products_path,'r+', encoding='utf-8') as f: 27 data = json.load(f) 28 name = data["product_name"] 29 company = data["product_company"] 30 device = data["product_device"] 31 device_path = r'%s/%s' % (device_dir, device + '.json') 32 path_str = "../../vendor/" + company + "/" + name 33 path = os.path.join(path_str) 34 new_file_name = os.path.join(path, "config.json") 35 if os.path.exists(path): 36 pass 37 else: 38 os.mkdir(path) 39 try: 40 device_read = open(device_path, "r", encoding='utf-8') 41 products_read = open(products_path, "r", encoding='utf-8') 42 data_device_read = json.load(device_read) 43 data_products_read = json.load(products_read) 44 data_all = merge(data_device_read , data_products_read) 45 new_json = json.dumps(data_all, indent=4) 46 new_write = open(new_file_name, "w") 47 new_write.write(new_json) 48 finally: 49 device_read.close() 50 products_read.close() 51 new_write.close() 52 readjson(new_file_name, device) 53 54 55def readjson(path: str, device: str): 56 subsystems_list = list() 57 config_dic = {} 58 with open(path, 'r+', encoding='utf-8') as f: 59 data = json.load(f) 60 parts = data['parts'] 61 subsystem_list = list() 62 for key in parts: 63 substr = str(key).split(":") 64 if substr[0] not in subsystem_list: 65 subsystem_list.append(substr[0]) 66 components_list = list() 67 for key_sub, value_sub in parts.items(): 68 features = [] 69 for value_fea in value_sub.values(): 70 for k, v in value_fea.items(): 71 fea = str(k) + " = "+str(v).lower() 72 features.append(fea) 73 if substr[0] == str(key_sub).split(":")[0]: 74 components_list.append({"component":str(key_sub).split(":")[1], "features":features}) 75 subsystems_list.append({"subsystem":substr[0], "components":components_list}) 76 config_dic["subsystems"] = subsystems_list 77 del data['parts'] 78 data.update({"version": "3.0"}) 79 data.update({"board": device}) 80 data.update(config_dic) 81 for datakey in data: 82 if "enable_ramdisk" in datakey: 83 dict_keys = ["product_name", "device_company", "device_build_path", "target_cpu", "type", "version", 84 "board", "enable_ramdisk", "enable_absystem", "subsystems"] 85 break 86 else: 87 dict_keys = ["product_name", "device_company", "device_build_path", "target_cpu", "type", "version", 88 "board", "enable_absystem", "subsystems"] 89 dict_you_want = {new_key: data[new_key] for new_key in dict_keys} 90 json_data = json.dumps(dict_you_want, indent=2) 91 f.seek(0) 92 f.write(json_data) 93 f.truncate() 94 95 96def merge(dict1: dict, dict2: dict): 97 res = {**dict1, **dict2} 98 return res 99 100 101def main(args): 102 merge_files(args) 103 104if __name__ == '__main__': 105 main(sys.argv[1]) 106