def Deserialize( yaml_files: List[str]) -> Dict[str, entity_instance.EntityInstance]: """Parses a yaml configuration file and deserializes it. Args: yaml_files: list of building configuration files. Returns: A map of entity name to EntityInstance. """ print('Validating syntax please wait ...') parser = instance_parser.InstanceParser() for yaml_file in yaml_files: print(f'Opening file: {yaml_file}, please wait ...') parser.AddFile(yaml_file) parser.Finalize() default_entity_operation = instance_parser.EntityOperation.ADD if parser.GetConfigMode() == instance_parser.ConfigMode.UPDATE: default_entity_operation = instance_parser.EntityOperation.UPDATE entities = {} for entity_name, entity_yaml in parser.GetEntities().items(): try: entities[entity_name] = entity_instance.EntityInstance.FromYaml( entity_yaml, default_entity_operation) except ValueError: print('Invalid Entity ' + entity_name) raise return entities, parser.GetConfigMode()
def Deserialize( yaml_files: List[str]) -> Dict[str, entity_instance.EntityInstance]: """Parses a yaml configuration file and deserializes it. Args: yaml_files: list of building configuration files. Returns: A map of entity GUID to EntityInstance. """ print('Validating syntax please wait ...') parser = instance_parser.InstanceParser() for yaml_file in yaml_files: print(f'Opening file: {yaml_file}, please wait ...') parser.AddFile(yaml_file) parser.Finalize() default_entity_operation = instance_parser.EntityOperation.ADD if parser.GetConfigMode() == instance_parser.ConfigMode.UPDATE: default_entity_operation = instance_parser.EntityOperation.UPDATE code_to_guid_map = _CreateCodeToGuidMap(parser) entities = {} for entity_key, entity_yaml in parser.GetEntities().items(): try: entity = entity_instance.EntityInstance.FromYaml( entity_key, entity_yaml, code_to_guid_map, default_entity_operation) entities[entity.guid] = entity except ValueError as ex: print(f'Invalid Entity {entity_key}: {ex}') raise return entities, parser.GetConfigMode()
def _CreateEntityInstances(yaml_filename): parser = instance_parser.InstanceParser() parser.AddFile(path.join(_INSTANCES_PATH, yaml_filename)) parser.Finalize() parsed_yaml = parser.GetEntities() entities = {} for entity_name, entity_yaml in parsed_yaml.items(): entities[entity_name] = entity_instance.EntityInstance.FromYaml(entity_yaml) return entities
def _CreateEntityInstances(yaml_filename): parser = instance_parser.InstanceParser() parser.AddFile(path.join(_INSTANCES_PATH, yaml_filename)) parser.Finalize() parsed_yaml = parser.GetEntities() return { key: entity_instance.EntityInstance.FromYaml(key, value, code_to_guid_map={}) for key, value in parsed_yaml.items() }
def GenerateGuids(cls, file_path: str) -> None: """Generates GUIDs for all entities missing GUIDs. Args: file_path: A Building Configuration .yaml file path. """ parser = instance_parser.InstanceParser() parser.AddFile(file_path) parser.Finalize() entity_yaml_dict = {} entity_yaml_dict['CONFIG_METADATA'] = { 'operation': parser.GetConfigMode().value } code_to_guid_map: Dict[str, str] = {} guid_key_entities: Dict[str, Any] = {} code_key_entities: Dict[str, Any] = {} for entity_key, entity_yaml in parser.GetEntities().items(): entity_code: str = None entity_guid: str = None if instance_parser.ENTITY_CODE_KEY in entity_yaml.keys(): # New format with GUID as key and a code attribute. entity_code = entity_yaml[instance_parser.ENTITY_CODE_KEY] entity_guid = entity_key guid_key_entities[entity_guid] = entity_yaml else: # Old format with code as key and a GUID attribute. entity_code = entity_key if not entity_yaml.get(instance_parser.ENTITY_GUID_KEY): entity_yaml[instance_parser.ENTITY_GUID_KEY] = str( uuid.uuid4()) entity_guid = entity_yaml[instance_parser.ENTITY_GUID_KEY] code_key_entities[entity_code] = entity_yaml code_to_guid_map[entity_code] = entity_guid # If the document is entirely the new format already, do nothing. if not code_key_entities: return # If the document contains any entities in the GUID-based format, all # entities must be converted to that format in the output. if guid_key_entities: entity_yaml_dict.update(guid_key_entities) for entity_code, entity_yaml in code_key_entities.items(): entity_guid = entity_yaml[instance_parser.ENTITY_GUID_KEY] cls._ConvertEntityToGuidFormat(entity_code, entity_yaml, code_to_guid_map) entity_yaml_dict[entity_guid] = entity_yaml else: entity_yaml_dict.update(code_key_entities) cls.WriteYamlToFile(file_path, entity_yaml_dict)
def _ParserHelper(testpaths): parser = instance_parser.InstanceParser() for filepath in testpaths: parser.AddFile(filepath) parser.Finalize() return parser