コード例 #1
0
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}.")
コード例 #2
0
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)
コード例 #3
0
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
コード例 #4
0
ファイル: cli.py プロジェクト: nialov/tracerepo
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)
コード例 #5
0
ファイル: test_spatial.py プロジェクト: nialov/tracerepo
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
        )
コード例 #6
0
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)
コード例 #7
0
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