sqlmesh.core.config.linter
1from __future__ import annotations 2 3import typing as t 4 5from sqlglot import exp 6from sqlglot.helper import ensure_collection 7 8from sqlmesh.core.config.base import BaseConfig 9 10from sqlmesh.utils.pydantic import field_validator 11 12 13class LinterConfig(BaseConfig): 14 """Configuration for model linting 15 16 Args: 17 enabled: Flag indicating whether the linter should run 18 19 rules: A list of error rules to be applied on model 20 warn_rules: A list of rules to be applied on models but produce warnings instead of raising errors. 21 ignored_rules: A list of rules to be excluded/ignored 22 23 """ 24 25 enabled: bool = False 26 27 rules: t.Set[str] = set() 28 warn_rules: t.Set[str] = set() 29 ignored_rules: t.Set[str] = set() 30 31 @classmethod 32 def _validate_rules(cls, v: t.Any) -> t.Set[str]: 33 if isinstance(v, exp.Paren): 34 v = v.unnest().name 35 elif isinstance(v, (exp.Tuple, exp.Array)): 36 v = [e.name for e in v.expressions] 37 elif isinstance(v, exp.Expr): 38 v = v.name 39 40 return {name.lower() for name in ensure_collection(v)} 41 42 @field_validator("rules", "warn_rules", "ignored_rules", mode="before") 43 def rules_validator(cls, vs: t.Any) -> t.Set[str]: 44 return cls._validate_rules(vs)
14class LinterConfig(BaseConfig): 15 """Configuration for model linting 16 17 Args: 18 enabled: Flag indicating whether the linter should run 19 20 rules: A list of error rules to be applied on model 21 warn_rules: A list of rules to be applied on models but produce warnings instead of raising errors. 22 ignored_rules: A list of rules to be excluded/ignored 23 24 """ 25 26 enabled: bool = False 27 28 rules: t.Set[str] = set() 29 warn_rules: t.Set[str] = set() 30 ignored_rules: t.Set[str] = set() 31 32 @classmethod 33 def _validate_rules(cls, v: t.Any) -> t.Set[str]: 34 if isinstance(v, exp.Paren): 35 v = v.unnest().name 36 elif isinstance(v, (exp.Tuple, exp.Array)): 37 v = [e.name for e in v.expressions] 38 elif isinstance(v, exp.Expr): 39 v = v.name 40 41 return {name.lower() for name in ensure_collection(v)} 42 43 @field_validator("rules", "warn_rules", "ignored_rules", mode="before") 44 def rules_validator(cls, vs: t.Any) -> t.Set[str]: 45 return cls._validate_rules(vs)
Configuration for model linting
Arguments:
- enabled: Flag indicating whether the linter should run
- rules: A list of error rules to be applied on model
- warn_rules: A list of rules to be applied on models but produce warnings instead of raising errors.
- ignored_rules: A list of rules to be excluded/ignored
@field_validator('rules', 'warn_rules', 'ignored_rules', mode='before')
def
rules_validator(cls, vs: Any) -> Set[str]:
model_config =
{'json_encoders': {<class 'sqlglot.expressions.core.Expr'>: <function _expression_encoder>, <class 'sqlglot.expressions.datatypes.DataType'>: <function _expression_encoder>, <class 'sqlglot.expressions.query.Tuple'>: <function _expression_encoder>, typing.Union[sqlglot.expressions.query.Query, sqlmesh.core.dialect.JinjaQuery]: <function _expression_encoder>, typing.Union[sqlglot.expressions.query.Query, sqlmesh.core.dialect.JinjaQuery, sqlmesh.core.dialect.MacroFunc]: <function _expression_encoder>, <class 'datetime.tzinfo'>: <function PydanticModel.<lambda>>}, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'protected_namespaces': ()}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- model_fields
- model_computed_fields
- model_extra
- model_fields_set
- model_construct
- model_copy
- model_dump
- model_dump_json
- model_json_schema
- model_parametrized_name
- model_post_init
- model_rebuild
- model_validate
- model_validate_json
- model_validate_strings
- parse_file
- from_orm
- construct
- schema
- schema_json
- validate
- update_forward_refs