Source code for test_data_workbench.core.models
"""Core data models for V4 adaptive framework."""
from dataclasses import dataclass, field
from enum import Enum
from typing import Dict, List, Optional, Any, Set
import uuid
[docs]
class EntityType(Enum):
"""Common e-commerce entity types for classification."""
USER = "user"
CUSTOMER = "customer"
PRODUCT = "product"
ORDER = "order"
REVIEW = "review"
CATEGORY = "category"
INVENTORY = "inventory"
PAYMENT = "payment"
SHIPPING = "shipping"
ANALYTICS = "analytics"
UNKNOWN = "unknown"
[docs]
class ConstraintType(Enum):
"""Database constraint types."""
PRIMARY_KEY = "primary_key"
FOREIGN_KEY = "foreign_key"
UNIQUE = "unique"
NOT_NULL = "not_null"
CHECK = "check"
INDEX = "index"
[docs]
@dataclass
class Column:
"""Database column metadata."""
name: str
data_type: str
nullable: bool = True
default: Optional[str] = None
max_length: Optional[int] = None
constraints: List[ConstraintType] = field(default_factory=list)
sample_values: List[Any] = field(default_factory=list)
@property
def is_primary_key(self) -> bool:
return ConstraintType.PRIMARY_KEY in self.constraints
@property
def is_foreign_key(self) -> bool:
return ConstraintType.FOREIGN_KEY in self.constraints
[docs]
@dataclass
class Relationship:
"""Table relationship metadata."""
from_table: str
to_table: str
from_column: str
to_column: str
relationship_type: str # "one_to_one", "one_to_many", "many_to_many"
strength: float = 1.0 # Confidence score 0-1
[docs]
@dataclass
class Table:
"""Database table metadata."""
name: str
columns: List[Column]
row_count: Optional[int] = 0
entity_type: EntityType = EntityType.UNKNOWN
relationships: List[Relationship] = field(default_factory=list)
@property
def primary_keys(self) -> List[Column]:
return [col for col in self.columns if col.is_primary_key]
@property
def foreign_keys(self) -> List[Column]:
return [col for col in self.columns if col.is_foreign_key]
[docs]
@dataclass
class BusinessRule:
"""Inferred business rule from data analysis."""
rule_id: str
description: str
rule_type: str # "format", "range", "dependency", "pattern"
affected_columns: List[str]
confidence: float # 0-1 confidence score
examples: List[str] = field(default_factory=list)
[docs]
@classmethod
def create(cls, description: str, rule_type: str, columns: List[str],
confidence: float = 0.8) -> 'BusinessRule':
return cls(
rule_id=str(uuid.uuid4())[:8],
description=description,
rule_type=rule_type,
affected_columns=columns,
confidence=confidence
)
[docs]
@dataclass
class PIIColumn:
"""A column flagged as likely containing personally identifiable
information, based on a name-based heuristic (no row data needed)."""
table: str
column: str
category: str
[docs]
@dataclass
class SchemaInfo:
"""Complete database schema analysis results."""
database_name: str
tables: List[Table]
relationships: List[Relationship]
business_rules: List[BusinessRule]
analysis_metadata: Dict[str, Any] = field(default_factory=dict)
pii_columns: List[PIIColumn] = field(default_factory=list)
@property
def entity_types(self) -> Dict[EntityType, List[Table]]:
"""Group tables by detected entity type."""
groups = {}
for table in self.tables:
if table.entity_type not in groups:
groups[table.entity_type] = []
groups[table.entity_type].append(table)
return groups
@property
def table_names(self) -> Set[str]:
return {table.name for table in self.tables}
[docs]
def get_table(self, name: str) -> Optional[Table]:
"""Get table by name."""
for table in self.tables:
if table.name == name:
return table
return None
[docs]
@dataclass
class GeneratorConfig:
"""Configuration for a specific entity generator."""
entity_type: EntityType
table_name: str
dependencies: List[str] = field(default_factory=list)
generation_rules: Dict[str, Any] = field(default_factory=dict)
fallback_config: Optional[Dict[str, Any]] = None
[docs]
@dataclass
class ScenarioConfig:
"""Business scenario configuration."""
name: str
description: str
entities: Dict[str, int] # entity_type -> count
relationships: List[str] = field(default_factory=list)
constraints: Dict[str, Any] = field(default_factory=dict)
[docs]
@dataclass
class AdaptationResult:
"""Results from rapid adaptation workflow."""
schema_info: SchemaInfo
generated_code: Dict[str, str] # filename -> code content
config_files: Dict[str, str] # filename -> config content
templates: Dict[str, str] # template_type -> template content
analysis_time: float
success: bool
errors: List[str] = field(default_factory=list)
# One-line summary from the post-generation constraint check (see
# adaptation.constraint_check), e.g. "Constraint check: 12 checks
# passed". None when the check couldn't run (e.g. empty schema) or
# was skipped after a best-effort failure.
constraint_check_summary: Optional[str] = None
[docs]
@dataclass
class ValidationResult:
"""Results from team contribution validation."""
valid: bool
errors: List[str] = field(default_factory=list)
warnings: List[str] = field(default_factory=list)
suggestions: List[str] = field(default_factory=list)
[docs]
@dataclass
class DemoScenario:
"""Demonstration scenario configuration."""
name: str
description: str
required_features: List[str]
fallback_features: List[str]
demo_data: Dict[str, Any]
success_criteria: List[str]
[docs]
@dataclass
class DemoStatus:
"""Current demonstration readiness status."""
ready_scenarios: List[DemoScenario]
blocked_scenarios: List[DemoScenario]
fallback_plan: Optional[DemoScenario]
confidence_score: float