Skip to content

Commit 43094a1

Browse files
authored
Fix: setting project on standalone audits (#4411)
1 parent b5570ec commit 43094a1

3 files changed

Lines changed: 41 additions & 0 deletions

File tree

sqlmesh/core/audit/definition.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,7 @@ def load_audit(
383383
dialect: t.Optional[str] = None,
384384
default_catalog: t.Optional[str] = None,
385385
variables: t.Optional[t.Dict[str, t.Any]] = None,
386+
project: t.Optional[str] = None,
386387
) -> Audit:
387388
"""Load an audit from a parsed SQLMesh audit file.
388389
@@ -455,6 +456,8 @@ def load_audit(
455456
used_variables=used_variables,
456457
)
457458
extra_kwargs["default_catalog"] = default_catalog
459+
if project is not None:
460+
extra_kwargs["project"] = project
458461

459462
dialect = meta_fields.pop("dialect", dialect)
460463
try:
@@ -482,6 +485,7 @@ def load_multiple_audits(
482485
dialect: t.Optional[str] = None,
483486
default_catalog: t.Optional[str] = None,
484487
variables: t.Optional[t.Dict[str, t.Any]] = None,
488+
project: t.Optional[str] = None,
485489
) -> t.Generator[Audit, None, None]:
486490
audit_block: t.List[exp.Expression] = []
487491
for expression in expressions:
@@ -496,6 +500,7 @@ def load_multiple_audits(
496500
dialect=dialect,
497501
default_catalog=default_catalog,
498502
variables=variables,
503+
project=project,
499504
)
500505
audit_block.clear()
501506
audit_block.append(expression)
@@ -505,6 +510,7 @@ def load_multiple_audits(
505510
dialect=dialect,
506511
default_catalog=default_catalog,
507512
variables=variables,
513+
project=project,
508514
)
509515

510516

sqlmesh/core/loader.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,7 @@ def _load_audits(
619619
dialect=self.config.model_defaults.dialect,
620620
default_catalog=self.context.default_catalog,
621621
variables=variables,
622+
project=self.config.project,
622623
)
623624
for audit in audits:
624625
audits_by_name[audit.name] = audit

tests/core/test_model.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,40 @@ def test_model_missing_audits(tmp_path: Path):
472472
)
473473

474474

475+
def test_project_is_set_in_standalone_audit(tmp_path: Path) -> None:
476+
init_example_project(tmp_path, dialect="duckdb", template=ProjectTemplate.EMPTY)
477+
478+
db_path = str(tmp_path / "db.db")
479+
db_connection = DuckDBConnectionConfig(database=db_path)
480+
481+
config = Config(
482+
project="test",
483+
gateways={"gw": GatewayConfig(connection=db_connection)},
484+
model_defaults=ModelDefaultsConfig(dialect="duckdb"),
485+
)
486+
487+
model = tmp_path / "models" / "some_model.sql"
488+
model.parent.mkdir(parents=True, exist_ok=True)
489+
model.write_text("MODEL (name m); SELECT 1 AS c")
490+
491+
audit = tmp_path / "audits" / "a_standalone_audit.sql"
492+
audit.parent.mkdir(parents=True, exist_ok=True)
493+
audit.write_text("AUDIT (name a, standalone true); SELECT * FROM m WHERE c <= 0")
494+
495+
context = Context(paths=tmp_path, config=config)
496+
context.plan(no_prompts=True, auto_apply=True)
497+
498+
model = tmp_path / "models" / "some_model.sql"
499+
model.parent.mkdir(parents=True, exist_ok=True)
500+
model.write_text("MODEL (name m); SELECT 2 AS c")
501+
502+
assert context.fetchdf(
503+
"select snapshot -> 'node' -> 'project' AS standalone_audit_project "
504+
"""from sqlmesh._snapshots where (snapshot -> 'node' -> 'source_type')::text = '"audit"'"""
505+
).to_dict()["standalone_audit_project"] == {0: '"test"'}
506+
assert context.load().standalone_audits["a"].project == "test"
507+
508+
475509
@pytest.mark.parametrize(
476510
"partition_by_input, partition_by_output, output_dialect, expected_exception",
477511
[

0 commit comments

Comments
 (0)