app/masking/surrogate_generator.py
Rama main · réplica de lectura del repositorio original.
from __future__ import annotations
from collections import defaultdict
class SurrogateGenerator:
"""Generate deterministic, obviously synthetic values for one request."""
def __init__(self) -> None:
self._counters: defaultdict[str, int] = defaultdict(int)
def generate(self, entity_type: str) -> str:
self._counters[entity_type] += 1
index = self._counters[entity_type]
generators = {
"PERSON": lambda value: f"Demo Person {value}",
"ORG": lambda value: f"Example Organization {value}",
"EMAIL": lambda value: f"demo.{value}@example.test",
"PHONE": lambda value: f"+1 202-555-{value % 10_000:04d} ext {value}",
"IP_ADDRESS": lambda value: f"198.51.{(value // 254) % 254}.{value % 254 + 1}",
"DOMAIN": lambda value: f"demo-{value}.example.test",
"URL": lambda value: f"https://example.test/resource/{value}",
"API_KEY": lambda value: f"sk-test-maskgate-{value:024d}",
"FILE_PATH": lambda value: rf"C:\MaskGate\Synthetic\file-{value}.txt",
"MONEY": lambda value: f"${value:,}.00",
"CARD_NUMBER": lambda value: f"0000 0000 {value // 10_000:04d} {value % 10_000:04d}",
"BANK": lambda value: f"Example Bank {value}",
"LOCATION": lambda value: f"Example Location {value}",
}
generator = generators.get(
entity_type,
lambda value: f"Synthetic {entity_type.title()} {value}",
)
return generator(index)