Skip to content

Commit 267579c

Browse files
rebase; cleanup code
1 parent 417fc5a commit 267579c

4 files changed

Lines changed: 27 additions & 21 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ engine-up: engine-clickhouse-up engine-mssql-up engine-mysql-up engine-postgres-
6464
engine-down: engine-clickhouse-down engine-mssql-down engine-mysql-down engine-postgres-down engine-spark-down engine-trino-down
6565

6666
fast-test:
67-
pytest -n auto -m "fast and not cicdonly" && pytest -m "isolated"
67+
pytest -n auto -m "fast and not cicdonly" && pytest -m "isolated" && pytest -m "isolated2"
6868

6969
slow-test:
7070
pytest -n auto -m "(fast or slow) and not cicdonly" && pytest -m "isolated"

sqlmesh/core/loader.py

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -313,8 +313,10 @@ def _load_external_models(
313313
for model in external_models:
314314
if model.gateway is None:
315315
if model.fqn in models:
316-
self._raise_failed_to_load_model_error(
317-
path, f"Duplicate external model name: '{model.name}'."
316+
raise ConfigError(
317+
self._failed_to_load_model_error(
318+
path, f"Duplicate external model name: '{model.name}'."
319+
)
318320
)
319321
models[model.fqn] = model
320322

@@ -323,8 +325,10 @@ def _load_external_models(
323325
for model in external_models:
324326
if model.gateway == gateway:
325327
if model.fqn in models and models[model.fqn].gateway == gateway:
326-
self._raise_failed_to_load_model_error(
327-
path, f"Duplicate external model name: '{model.name}'."
328+
raise ConfigError(
329+
self._failed_to_load_model_error(
330+
path, f"Duplicate external model name: '{model.name}'."
331+
)
328332
)
329333
models.update({model.fqn: model})
330334

@@ -411,11 +415,12 @@ def _track_file(self, path: Path) -> None:
411415
"""Project file to track for modifications"""
412416
self._path_mtimes[path] = path.stat().st_mtime
413417

414-
def _raise_failed_to_load_model_error(self, path: Path, error: t.Union[str, Exception]) -> None:
418+
def _failed_to_load_model_error(self, path: Path, error: t.Union[str, Exception]) -> str:
415419
base_message = f"Failed to load model definition at '{path}':"
416420
if isinstance(error, ValidationError):
417-
raise ConfigError(validation_error_message(error, base_message))
418-
raise ConfigError(f"{base_message}\n {error}")
421+
return validation_error_message(error, base_message)
422+
return f"{base_message}\n {error}"
423+
419424

420425
class SqlMeshLoader(Loader):
421426
"""Loads macros and models for a context using the SQLMesh file formats"""
@@ -552,17 +557,18 @@ def _load_sql_models(
552557
path = futures_to_paths[future]
553558
try:
554559
_, loaded = future.result()
555-
if loaded:
556-
for model in loaded:
557-
if model.enabled:
558-
model._path = path
559-
models[model.fqn] = model
560-
else:
561-
for model in cache.get(path):
562-
if model.enabled:
563-
models[model.fqn] = model
560+
for model in loaded or cache.get(path):
561+
if model.fqn in models:
562+
errors.append(
563+
self._failed_to_load_model_error(
564+
path, f"Duplicate SQL model name: '{model.name}'."
565+
)
566+
)
567+
elif model.enabled:
568+
model._path = path
569+
models[model.fqn] = model
564570
except Exception as ex:
565-
errors.append(f"Failed to load model definition at '{path}'.\n\n{ex}")
571+
errors.append(self._failed_to_load_model_error(path, str(ex)))
566572

567573
if errors:
568574
error_string = "\n".join(errors)
@@ -618,7 +624,7 @@ def _load_python_models(
618624
if model.enabled:
619625
models[model.fqn] = model
620626
except Exception as ex:
621-
self._raise_failed_to_load_model_error(path, ex)
627+
raise ConfigError(self._failed_to_load_model_error(path, ex))
622628

623629
finally:
624630
model_registry._dialect = None

tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ def validate(
183183

184184

185185
def pytest_collection_modifyitems(items, *args, **kwargs):
186-
test_type_markers = {"fast", "slow", "docker", "remote", "isolated"}
186+
test_type_markers = {"fast", "slow", "docker", "remote", "isolated", "isolated2"}
187187
for item in items:
188188
for marker in item.iter_markers():
189189
if marker.name in test_type_markers:

tests/core/test_loader.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ def duplicate_model_path(fpath):
115115
Context(paths=tmp_path, config=config)
116116

117117

118-
@pytest.mark.isolated
118+
@pytest.mark.isolated2
119119
def test_duplicate_python_model_names_raise_error(tmp_path: Path) -> None:
120120
"""Test python models with duplicate model names raises ConfigError if the functions are not identical."""
121121
init_example_project(tmp_path, dialect="duckdb")

0 commit comments

Comments
 (0)