Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
from __future__ import annotations
from typing import List, Literal

from pydantic import ConfigDict

from app.core.enum import PIIEntityType
from app.core.validators.pii_remover import DEFAULT_ENTITY_TYPES, PIIRemover
from app.core.validators.config.base_validator_config import BaseValidatorConfig


class PIIRemoverSafetyValidatorConfig(BaseValidatorConfig):
model_config = ConfigDict(use_enum_values=True)

# use_enum_values would also stringify the inherited on_fail/stage enums.
type: Literal["pii_remover"]
entity_types: List[PIIEntityType] = DEFAULT_ENTITY_TYPES

def build(self):
return PIIRemover(
entity_types=self.entity_types,
entity_types=[
PIIEntityType(entity_type).value for entity_type in self.entity_types
],
on_fail=self.resolve_on_fail(),
)
9 changes: 9 additions & 0 deletions backend/app/tests/validators/test_pii_remover.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,15 @@ def test_config_default_entity_types_passed_as_strings(mock_presidio):
assert v.entity_types == DEFAULT_ENTITY_TYPES


@pytest.mark.parametrize("on_fail", ["fix", "exception", "rephrase"])
def test_config_explicit_on_fail_resolves(mock_presidio, on_fail):
config = PIIRemoverSafetyValidatorConfig(type="pii_remover", on_fail=on_fail)
assert config.resolve_on_fail() is not None
validator = config.build()
assert validator.entity_types == DEFAULT_ENTITY_TYPES
assert all(type(entity) is str for entity in validator.entity_types)


def test_config_rejects_unknown_entity_type():
with pytest.raises(ValidationError):
PIIRemoverSafetyValidatorConfig(type="pii_remover", entity_types=["AADHAR"])
Expand Down
Loading