dbml_sharepoint.analysis.validator
fail-closed build-time rules
Validation rules for the parsed schema.
RESERVED_NAMES
RESERVED_NAMES = frozenset({'Attachments', 'Author', 'Created', 'Editor', 'Modified', '_UIVersion'})
SYSTEM_COLUMNS
SYSTEM_COLUMNS = frozenset({'Author', 'Created', 'Editor', 'ID', 'Modified'})
KNOWN_SCALARS
KNOWN_SCALARS = frozenset({'boolean', 'date', 'datetime', 'hyperlink', 'int', 'longtext', 'number', 'nvarchar', 'person', 'richtext'})
CALCULATED_TYPES
CALCULATED_TYPES = frozenset({'calculated_date', 'calculated_number', 'calculated_text'})
FORMULA_COLUMN_REF
FORMULA_COLUMN_REF = re.compile('\\[([^\\[\\]]+)\\]')
formatter_field_refs
def formatter_field_refs(node: object) -> frozenset[str]
Every [$Field] reference in a formatter JSON structure — walks
nested dicts/lists and scans every string value.
VIEW_OPERATORS
VIEW_OPERATORS = frozenset({'eq', 'geq', 'gt', 'is_not_null', 'is_null', 'leq', 'lt', 'neq'})
formula_column_refs
def formula_column_refs(formula: str) -> frozenset[str]
Column names referenced as [Name] in a calculated formula.
String literals are stripped first so bracket text inside a quoted constant is not misread as a reference. Shared with jsgen, which orders Phase-1 field creation by these references.
MAX_CALCULATED_FORMULA
MAX_CALCULATED_FORMULA = 1024
MAX_INTERNAL_NAME
MAX_INTERNAL_NAME = 32
Finding
@dataclass
class Finding:
severity: Severity
message: str
Finding(severity: Severity, message: str)
validate
def validate(schema: dbml_sharepoint.model.parser.Schema) -> list[dbml_sharepoint.analysis.validator.Finding]
validate_against_mapping
def validate_against_mapping(schema: dbml_sharepoint.model.parser.Schema, bundle: dbml_sharepoint.model.mapping_loader.MappingBundle) -> list[dbml_sharepoint.analysis.validator.Finding]
validate_all
def validate_all(schema: dbml_sharepoint.model.parser.Schema, bundle: dbml_sharepoint.model.mapping_loader.MappingBundle, extension: dbml_sharepoint.extension.DeploymentExtension) -> list[dbml_sharepoint.analysis.validator.Finding]
Run every validation stage: core schema rules, mapping cross-checks, the cross-site/extension contract, then the active extension's project-specific rules.