If you have a custom Collection class, you can inject validation support using add_validation_to_collection(collection_class). This monkey-patches the class to add:
set_validator(validator: DataValidator): Attaches a validator to the collection instance.get_validator() -> Optional[DataValidator]: Retrieves the attached validator.write(item, data, ...): Validates data (if it's a DataFrame) before writing.append(item, data, ...): Validates data (if it's a DataFrame) before appending.
from pystore.validation import add_validation_to_collection, create_validator, ColumnExistsRule
class MyCollection:
def write(self, item, data, metadata={}, **kwargs):
pass
def append(self, item, data, **kwargs):
pass
# Inject validation logic
add_validation_to_collection(MyCollection)
collection = MyCollection()
validator = create_validator()
validator.add_rule(ColumnExistsRule(['price']))
# Attach the validator
collection.set_validator(validator)
# Now, calling write() will trigger validation
collection.write('item1', pd.DataFrame({'wrong_col': [1]})) # Raises ValidationError
from pystore.validation import add_validation_to_collection, create_validator, ColumnExistsRule
class MyCollection:
def write(self, item, data, metadata={}, **kwargs):
pass
def append(self, item, data, **kwargs):
pass
# Inject validation logic
add_validation_to_collection(MyCollection)
collection = MyCollection()
validator = create_validator()
validator.add_rule(ColumnExistsRule(['price']))
# Attach the validator
collection.set_validator(validator)
# Now, calling write() will trigger validation
collection.write('item1', pd.DataFrame({'wrong_col': [1]})) # Raises ValidationError