Skip to main content

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.