def test_cli_validate_exec( trace_gdf, assume_error: rules.ValidationResults, pandera_valid: bool, database, tmp_path_factory, metadata_json: Path, ): """ Test tracerepo validate command with a set up of invalidated data. """ assert metadata_json.exists() and metadata_json.is_file() area_gdf: gpd.GeoDataFrame = tests.kb11_area tmp_path = tmp_path_factory.mktemp(basename="test_cli_validate_exec", numbered=True) assert len(list(tmp_path.glob("*"))) == 0 # Make default directories repo.scaffold(tmp_path) organizer = tests.set_up_repo_with_invalids_organized( database=database, trace_gdf=trace_gdf, area_gdf=area_gdf, tracerepository_path=tmp_path, ) database_csv_path: Path = tmp_path / rules.DATABASE_CSV if database_csv_path.exists(): database_csv_path.unlink() repo.write_database_csv(path=database_csv_path, database=organizer.database) # Test if all column headers are in csv database_text = database_csv_path.read_text() database_first_line = database_text.splitlines()[0] for column_enum in rules.ColumnNames: assert column_enum.value in database_first_line.split(",") result = runner.invoke( app=app, args=[ "validate", "--report", f"--metadata-json={metadata_json}", f"--tracerepository-path={tmp_path}", ], ) reports_path = Path(tmp_path) / Path(rules.PathNames.REPORTS.value) if not pandera_valid: assert reports_path.exists() assert reports_path.is_dir() assert len(list(reports_path.glob("*.html"))) > 0 # TODO: Inconsistent results here if not "html" in result.output: warn(f"Unknown error, html not found in result.output.") tests.click_error_print(result) # TODO: Inconsistent results here if assume_error.value not in database_csv_path.read_text(): warn(f"Expected {assume_error.value} to be in {database_csv_path}.")
def organizer_unorganized(tmp_path): """ Fix up an Organizer with files in unorganized. """ df = setup_df_with_traces_and_area( repo.scaffold(tracerepository_path=tmp_path), tracerepository_path=tmp_path) repo.scaffold(tmp_path) yield Organizer(database=df, tracerepository_path=tmp_path)
def df_with_traces_and_area(tmp_path): """ Populate scaffold and database with a single traces+area row. traces and area file will be in unorganized. """ df = setup_df_with_traces_and_area(repo.scaffold(tmp_path), tracerepository_path=tmp_path) yield df
def init( tracerepository_path: Path = TRACEREPOSITORY_PATH_OPTION, database_name: str = DATABASE_OPTION, ): """ Initialize tracerepo in current directory. """ df = repo.scaffold(tracerepository_path=tracerepository_path) repo.write_database_csv(path=tracerepository_path / database_name, database=df)
def test_validate_invalids_with_full_setup( database: pd.DataFrame, tmp_path_factory: TempPathFactory, trace_gdf: gpd.GeoDataFrame, assume_error: rules.ValidationResults, ): """ Test validate_invalids. """ area_gdf: gpd.GeoDataFrame = tests.kb11_area tmp_path = tmp_path_factory.mktemp(basename="test_validate_invalids", numbered=True) repo.scaffold(tmp_path) organizer = tests.set_up_repo_with_invalids_organized( database=database, trace_gdf=trace_gdf, area_gdf=area_gdf, tracerepository_path=tmp_path, ) # Query for invalid traces invalids = organizer.query( validity=[rules.ValidationResults.INVALID], ) for invalid in invalids: assert invalid.traces_path.exists() assert invalid.area_path.exists() update_tuples = spatial.validate_invalids(invalids) assert isinstance(update_tuples, list) assert all(isinstance(val, utils.UpdateTuple) for val in update_tuples) for update_tuple in update_tuples: assert ( update_tuple.update_values[rules.ColumnNames.VALIDITY] == assume_error.value )
def test_cli_organize(database, trace_gdf, other_args, tmp_path_factory): """ Test cli_organize click entrypoint. """ area_gdf: gpd.GeoDataFrame = tests.kb11_area tmp_path = tmp_path_factory.mktemp(basename="test_cli_organize", numbered=True) other_args.append(f"--tracerepository-path={tmp_path}") args = ["organize"] + other_args # make default directories repo.scaffold(tmp_path) organizer = tests.set_up_repo_with_invalids_organized( database=database, trace_gdf=trace_gdf, area_gdf=area_gdf, organized=False, tracerepository_path=tmp_path, ) repo.write_database_csv( path=tmp_path / rules.DATABASE_CSV, database=organizer.database ) result = runner.invoke(app=app, args=args) if "--simulate" not in args: organizer.check() if "--report" in args: assert len(result.stdout) > 0 elif "--no-report" in args: assert len(result.stdout) == 0 tests.click_error_print(result)
def organizer_organized(tmp_path_factory: TempPathFactory): """ Fix up an Organizer with files organized. """ tmp_path = tmp_path_factory.mktemp(basename="organizer_organized") df = setup_df_with_traces_and_area( repo.scaffold(tracerepository_path=tmp_path), tracerepository_path=tmp_path) # with tests.setup_scaffold_context(tmp_path) as df: # df = setup_df_with_traces_and_area(df=df) organizer = Organizer(database=df, tracerepository_path=tmp_path) organizer.organize(simulate=False) organizer.check() yield organizer