1"""Functions related to flat config payloads 2 3See proto definitions for descriptions of arguments. 4""" 5 6load( 7 "@proto//chromiumos/config/payload/flat_config.proto", 8 flat_config_pb = "chromiumos.config.payload", 9) 10 11def _read(file_path): 12 return proto.from_jsonpb( 13 flat_config_pb.FlatConfigList, 14 io.read_file(file_path), 15 ) 16 17def _get_designs_by_overlay(design_configs): 18 """Returns dict of {overlay1: [design1, design2], overlay2...}""" 19 overlay_to_designs = {} 20 for design_config in design_configs.values: 21 design_name = design_config.hw_design.name 22 build_target = design_config.sw_config.system_build_target 23 program_id = design_config.hw_design.program_id.value 24 program_name = design_config.program.name.lower() or program_id.lower() 25 overlay = build_target.portage_build_target.overlay_name or program_name 26 designs = overlay_to_designs.setdefault(overlay, []) 27 designs.append(design_name) 28 29 # Add an explicit entry for all earlier projects with explicit overlays 30 overlay_to_designs.setdefault(design_name, []).append(design_name) 31 32 overlay_to_unique_designs = {} 33 for overlay in overlay_to_designs: 34 overlay_to_unique_designs[overlay] = set(overlay_to_designs[overlay]) 35 return overlay_to_unique_designs 36 37def _get_configs_by_design(design_configs): 38 """Returns all config that is common to a given design 39 40 Args: 41 design_configs: A FlatConfigList proto. Required. 42 43 Returns: dict of {design1: 44 (program, hw_design, odm, hw_components), design2...} 45 """ 46 designs_to_configs = {} 47 for design_config in design_configs.values: 48 design_name = design_config.hw_design.name 49 50 # Components are common across all designs, so just pull the first 51 if design_name not in designs_to_configs: 52 designs_to_configs[design_name] = struct( 53 program = design_config.program, 54 odm = design_config.odm, 55 hw_design = design_config.hw_design, 56 hw_components = design_config.hw_components, 57 ) 58 return designs_to_configs 59 60def _create( 61 program, 62 hw_design, 63 odm, 64 hw_design_config, 65 hw_components = None, 66 device_brand = None, 67 oem = None, 68 sw_config = None, 69 brand_sw_config = None): 70 return flat_config_pb.FlatConfig( 71 program = program, 72 hw_design = hw_design, 73 odm = odm, 74 hw_design_config = hw_design_config, 75 hw_components = hw_components, 76 device_brand = device_brand, 77 oem = oem, 78 sw_config = sw_config, 79 brand_sw_config = brand_sw_config, 80 ) 81 82def _create_list(flat_configs): 83 return flat_config_pb.FlatConfigList(values = flat_configs) 84 85flat_config = struct( 86 read = _read, 87 create = _create, 88 create_list = _create_list, 89 get_designs_by_overlay = _get_designs_by_overlay, 90 get_configs_by_design = _get_configs_by_design, 91) 92