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: object

Validates YAML filter syntax and field names.

__init__() None[source]
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)

get_validation_status(filter_text: str, database_schema: list[str]) dict[str, Any][source]

Get complete validation status of filter.

Returns dict with keys:
  • is_valid: bool

  • syntax_errors: list[str]

  • missing_fields: list[str]

Classes

FilterValidator

class filter_validator.FilterValidator[source]

Bases: object

Validates YAML filter syntax and field names.

__init__() None[source]
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)

get_validation_status(filter_text: str, database_schema: list[str]) dict[str, Any][source]

Get complete validation status of filter.

Returns dict with keys:
  • is_valid: bool

  • syntax_errors: list[str]

  • missing_fields: list[str]

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'])