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()
Exemple #2
0
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()
Exemple #3
0
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
Exemple #4
0
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