Skip to content

Commit

Permalink
[BUGFIX] Patch ValidationDefinition round trip serialization/deseri…
Browse files Browse the repository at this point in the history
…alization (#9700)

Co-authored-by: Gabriel <gabriel59kg@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
3 people committed Apr 3, 2024
1 parent 4c850ac commit 7993a68
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 3 deletions.
5 changes: 2 additions & 3 deletions great_expectations/core/validation_definition.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
from great_expectations.core.batch_definition import BatchDefinition
from great_expectations.core.expectation_suite import (
ExpectationSuite,
expectationSuiteSchema,
)
from great_expectations.core.result_format import ResultFormat
from great_expectations.core.run_identifier import RunIdentifier
Expand Down Expand Up @@ -151,11 +150,11 @@ def _decode_suite(cls, suite_dict: dict) -> ExpectationSuite:
key = expectation_store.get_key(name=name, id=id)

try:
config = expectation_store.get(key)
config: dict = expectation_store.get(key)
except gx_exceptions.InvalidKeyError as e:
raise ValueError(f"Could not find suite with name: {name} and id: {id}") from e # noqa: TRY003

return ExpectationSuite(**expectationSuiteSchema.load(config))
return ExpectationSuite(**config)

@classmethod
def _decode_data(cls, data_dict: dict) -> BatchDefinition:
Expand Down
46 changes: 46 additions & 0 deletions tests/core/factory/test_validation_definition_factory.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import json
import pathlib

import pytest
from pytest_mock import MockerFixture

import great_expectations.expectations as gxe
from great_expectations.core.batch_definition import BatchDefinition
from great_expectations.core.expectation_suite import ExpectationSuite
from great_expectations.core.factory.validation_definition_factory import (
Expand Down Expand Up @@ -308,6 +310,50 @@ def _test_validation_definition_factory_delete_success(
context.validation_definitions.get(name)


@pytest.mark.filesystem
def test_validation_definition_factory_round_trip(
empty_data_context: FileDataContext,
validation_definition: ValidationDefinition,
):
# Arrange
context = empty_data_context

ds = context.sources.add_pandas("my_ds")
csv_path = pathlib.Path(
__file__, "..", "..", "..", "test_sets", "quickstart", "yellow_tripdata_sample_2022-01.csv"
).resolve()
assert csv_path.exists()
asset = ds.add_csv_asset("my_asset", filepath_or_buffer=csv_path)

batch_definition = asset.add_batch_definition("my_batch_def")
suite = ExpectationSuite(
name="my_suite",
expectations=[
gxe.ExpectColumnValuesToBeBetween(column="passenger_count", min_value=0, max_value=10),
gxe.ExpectColumnMeanToBeBetween(
column="passenger_count",
min_value=0,
max_value=1,
),
],
)

# Act
validation_definition = ValidationDefinition(
name="my_validation_def", data=batch_definition, suite=suite
)
persisted_validation_definition = context.validation_definitions.add(
validation=validation_definition
)
retrieved_validation_definition = context.validation_definitions.get(
name=validation_definition.name
)

# Assert
# Suite equality is a bit finnicky, so we just check the JSON representation
assert persisted_validation_definition.json() == retrieved_validation_definition.json()


class TestValidationDefinitionFactoryAnalytics:
# TODO: Write tests once analytics are in place
pass

0 comments on commit 7993a68

Please sign in to comment.