Filter Validator Module
Overview
The filter_validator module provides YAML filter syntax validation and field name checking for the newsletter editor UI.
When users edit filters in the editor, this module:
Validates YAML syntax
Checks that filter field names exist in the subscriber database
Reports validation errors for user feedback
Filter validation for editor UI.
Validates YAML filter syntax and subscriber database field names. Detects parsing errors and missing fields to provide user feedback when editing filters in the newsletter editor.
- Classes:
FilterValidator: Validates filter syntax and field references
- class filter_validator.FilterValidator[source]
Bases:
objectValidates YAML filter syntax and field names.
- parse_yaml_filter(text: str) dict[str, Any] | None[source]
Parse YAML filter text into dict.
Returns dict on success, None on parse error. Can contain None values for incomplete YAML entries (e.g., “email:” with no value).
- validate_field_names(filter_dict: dict[str, Any], database_schema: list[str]) list[str][source]
Validate filter field names exist in database schema.
- Parameters:
filter_dict – Filter with field names as keys
database_schema – List of available field names from database
- Returns:
List of missing field names (empty if all valid)
Classes
FilterValidator
- class filter_validator.FilterValidator[source]
Bases:
objectValidates YAML filter syntax and field names.
- parse_yaml_filter(text: str) dict[str, Any] | None[source]
Parse YAML filter text into dict.
Returns dict on success, None on parse error. Can contain None values for incomplete YAML entries (e.g., “email:” with no value).
- validate_field_names(filter_dict: dict[str, Any], database_schema: list[str]) list[str][source]
Validate filter field names exist in database schema.
- Parameters:
filter_dict – Filter with field names as keys
database_schema – List of available field names from database
- Returns:
List of missing field names (empty if all valid)
Usage Examples
Validate a filter against a subscriber database schema:
from filter_validator import FilterValidator
from schema_provider import DatabaseSchemaProvider
validator = FilterValidator()
schema = DatabaseSchemaProvider.from_csv('subscribers.csv')
# Check filter syntax
status = validator.get_validation_status(
filter_text="email: is not empty\nstatus: is active",
database_schema=schema
)
if status['is_valid']:
print("Filter is valid")
else:
print("Errors:", status['syntax_errors'])
print("Missing fields:", status['missing_fields'])