Beispiel #1
0
 def testParseTypeFoldersFromFilesNoFieldsUniverse(self):
     type_folders = parse.ParseTypeFoldersFromFiles(
         [self.good_types_file, self.good_types_file_2])
     # should have 1 folder for GOOD_TYPES namespace
     self.assertLen(type_folders, 1)
     # folder should have 4 types
     valid_types = list(
         type_folders[0].local_namespace.valid_types_map.values())
     self.assertLen(valid_types, 4)
Beispiel #2
0
def BuildUniverse(config):
    """Verifies that the ontology config is consistent and valid.

  Args:
    config: a Config namedtuple containing lists of localpaths to config files.

  Returns:
     A ConfigUniverse that is fully populated with all content specified in the
     config.
  """
    # Parse state files
    state_universe = None
    if config.states:
        state_folders = parse.ParseStateFoldersFromFiles(config.states)
        state_universe = state_lib.StateUniverse(state_folders)

    connections_universe = None
    if config.connections:
        connection_folders = parse.ParseConnectionFoldersFromFiles(
            config.connections)
        connections_universe = connection_lib.ConnectionUniverse(
            connection_folders)

    # Parse subfield files
    subfields_universe = None
    if config.subfields:
        subfield_folders = parse.ParseSubfieldFoldersFromFiles(
            config.subfields)
        subfields_universe = subfield_lib.SubfieldUniverse(subfield_folders)

    # Parse unit files
    unit_universe = None
    if config.units:
        unit_folders = parse.ParseUnitFoldersFromFiles(config.units,
                                                       subfields_universe)
        unit_universe = unit_lib.UnitUniverse(unit_folders)
        if subfields_universe:
            subfields_universe.ValidateUnits(unit_universe)

    # Parse fields files
    fields_universe = None
    if config.fields:
        field_folders = parse.ParseFieldFoldersFromFiles(
            config.fields, subfields_universe, state_universe)
        fields_universe = field_lib.FieldUniverse(field_folders)

    # Parse typedef files
    type_folders = parse.ParseTypeFoldersFromFiles(config.type_defs,
                                                   fields_universe)
    types_universe = entity_type_lib.EntityTypeUniverse(type_folders)

    # return findings_list, result_namespaces
    return ConfigUniverse(types_universe, fields_universe, subfields_universe,
                          state_universe, connections_universe, unit_universe)
 def testParseTypeFoldersFromFilesWithFieldsUniverse(self):
     fields_universe = field_lib.FieldUniverse([])
     fields_universe._namespace_map = {
         '': ('current_sensor', 'fan_run_status', 'dryer_run_status',
              'fan_run_command'),
         'GOOD': ('zone_air_temperature_sensor')
     }
     type_folders = parse.ParseTypeFoldersFromFiles(
         [self.good_types_file, self.good_types_file_2], fields_universe)
     # should have 1 folder for GOOD namespace
     self.assertLen(type_folders, 1)
     # folder should have 4 types
     valid_types = list(
         type_folders[0].local_namespace.valid_types_map.values())
     self.assertLen(valid_types, 4)
    def testParseTypeFoldersFromFileUndefinedFields(self):
        bad_type_file = base_lib.PathParts(
            root=self.base_dir, relative_path='BAD/entity_types/bad3.yaml')
        fields_universe = field_lib.FieldUniverse([])
        fields_universe._namespace_map = {
            '': ('current_sensor', 'fan_run_command')
        }
        type_folders = parse.ParseTypeFoldersFromFiles([bad_type_file],
                                                       fields_universe)
        # should have 1 folder
        self.assertLen(type_folders, 1)

        self.assertTrue(type_folders[0].local_namespace.HasFindingTypes(
            [findings_lib.UndefinedFieldError]))
        valid_types = list(
            type_folders[0].local_namespace.valid_types_map.values())
        self.assertFalse(valid_types)
Beispiel #5
0
 def testParseTypeFoldersFromFileBadFormat(self):
     bad_types_file = base_lib.PathParts(
         root=self.base_dir, relative_path='BAD/entity_types/bad1.yaml')
     fields_universe = field_lib.FieldUniverse([])
     fields_universe._namespace_map = {
         '': ('dryer_run_status', 'fan_run_command')
     }
     type_folders = parse.ParseTypeFoldersFromFiles([bad_types_file],
                                                    fields_universe)
     # should have 1 folder
     self.assertLen(type_folders, 1)
     type_folder = type_folders[0]
     # Should find 4 errors
     self.assertLen(type_folder.GetFindings(), 3)
     self.assertTrue(
         type_folder.HasFindingTypes([findings_lib.DuplicateFieldError]))
     self.assertTrue(
         type_folder.HasFindingTypes(
             [findings_lib.UnrecognizedFieldFormatError]))
     self.assertTrue(
         type_folder.HasFindingTypes([findings_lib.DuplicateParentError]))
Beispiel #6
0
 def testParseTypeFoldersFromFilesDuplicateTypes(self):
     type_folders = parse.ParseTypeFoldersFromFiles(
         [self.duplicate_types_file])
     self.assertTrue(type_folders[0].HasFindingTypes(
         [findings_lib.DuplicateKeyError]))
Beispiel #7
0
 def testParseTypeFoldersFromFilesEmptyConfig(self):
     type_folders = parse.ParseTypeFoldersFromFiles([self.empty_types_file])
     self.assertLen(type_folders, 1)
     valid_types = list(
         type_folders[0].local_namespace.valid_types_map.values())
     self.assertEmpty(valid_types)