def test_rq14_with_gpkg_geometry_type_valid_check(): dataset = open_dataset("tests/data/test_allcorrect.gpkg") geometry_type_names = dataset_geometry_tables(dataset) result = GpkgGeometryTypeNameValidator(dataset).gpkg_geometry_valid_check( geometry_type_names ) assert len(result) == 0
def query_geometry_valid(dataset) -> Iterable[Tuple[str, str, str, int]]: columns = utils.dataset_geometry_tables(dataset) for table_name, column_name, _ in columns: validations = dataset.ExecuteSQL( SQL_TEMPLATE.format(table_name=table_name, column_name=column_name)) for reason, count, row_id in validations: yield table_name, column_name, reason, count, row_id dataset.ReleaseResultSet(validations)
def test_with_gpkg(): dataset = open_dataset("tests/data/test_geom_columnname.gpkg") checks = list(dataset_geometry_tables(dataset)) assert len(checks) == 3 assert checks[0][0] == "test_columnname" assert checks[0][1] == "geom" assert checks[1][0] == "test_columnname2" assert checks[1][1] == "geometry" assert checks[2][0] == "test_columnname3" assert checks[2][1] == "geometry"
def query_columnames(dataset) -> Iterable[Tuple[str, str]]: tables = utils.dataset_geometry_tables(dataset) for table, _, _ in tables: columns = dataset.ExecuteSQL( "PRAGMA TABLE_INFO('{table_name}');".format(table_name=table)) for _, column, *_ in columns: yield table, column dataset.ReleaseResultSet(columns)
def test_rq14_with_gpkg_geometry_type_invalid_check(): dataset = open_dataset("tests/data/test_geometry_type.gpkg") geometry_type_names = dataset_geometry_tables(dataset) result = GpkgGeometryTypeNameValidator(dataset).gpkg_geometry_valid_check( geometry_type_names ) assert len(result) == 1 assert ( result[0] == "Found geometry_type_name: COMPOUNDCURVE for table test_geometry_type (from the gpkg_geometry_columns table)." )
def query_feature_id(dataset) -> Iterable[Tuple[str, int]]: tables = utils.dataset_geometry_tables(dataset) for table, _, _ in tables: validations = dataset.ExecuteSQL( "SELECT '{table_name}' as table_name, count(*) as pk_present FROM pragma_table_info('{table_name}') where pk > 0" .format(table_name=table)) for table_name, count in validations: yield table_name, count dataset.ReleaseResultSet(validations)
def query_unexpected_geometry_types(dataset) -> Iterable[Tuple[str, str]]: geometry_types = utils.dataset_geometry_tables(dataset) for table_name, column_name, expected_geometry in geometry_types: sql = SQL_TEMPLATE_TABLE_GEOMETRY_TYPES.format( table_name=table_name, column_name=column_name, expected_geometry=expected_geometry, ) validations = dataset.ExecuteSQL(sql) if validations is not None: for (geometry_type, count, row_id) in validations: yield table_name, geometry_type, count, row_id, expected_geometry dataset.ReleaseResultSet(validations)
def generate_table_definitions(dataset: DataSource) -> TableDefinition: projections = set() table_geometry_types = { table_name: geometry_type_name for table_name, _, geometry_type_name in utils.dataset_geometry_tables(dataset) } table_list = [] for table in dataset: geo_column_name = table.GetGeometryColumn() if geo_column_name == "": continue table_name = table.GetName() geometry_column = { "name": geo_column_name, "type": table_geometry_types[table_name], } table_list.append( OrderedDict( [ ("name", table_name), ("geometry_column", geo_column_name), ("columns", columns_definition(table, geometry_column)), ] ) ) projections.add(table.GetSpatialRef().GetAuthorityCode(None)) assert len(projections) == 1, "Expected one projection per geopackage." result = OrderedDict( [ ("geopackage_validator_version", __version__), ("projection", int(projections.pop())), ("tables", table_list), ] ) return result
def query_dimensions(dataset) -> Iterable[Tuple[str, str]]: tables = utils.dataset_geometry_tables(dataset) for table_name, column_name, _ in tables: validations = dataset.ExecuteSQL( DIMENSION_QUERY.format(table_name=table_name, geom_column_name=column_name) ) if validations is not None: validation_list = [(z, m, ndims) for z, m, ndims in validations] four_dimensions = all(ndims == 4 for z, m, ndims in validation_list) m_coordinates_all_0 = all(m for z, m, ndims in validation_list) z_coordinates_all_0 = all(z for z, m, ndims in validation_list) if len(validation_list): yield table_name, MULTI_DIMENSION_MESSAGE if four_dimensions and m_coordinates_all_0: yield table_name, MEASUREMENT_COORDINATE_MESSAGE if z_coordinates_all_0: if not m_coordinates_all_0 and four_dimensions: continue yield table_name, ELEVATION_COORDINATE_MESSAGE dataset.ReleaseResultSet(validations)
def check(self) -> Iterable[str]: geometry_types = utils.dataset_geometry_tables(self.dataset) return self.gpkg_geometry_valid_check(geometry_types)
def check(self) -> Iterable[str]: columns = utils.dataset_geometry_tables(self.dataset) return self.geom_equal_columnname_check(columns)