Skip to content

Commit 81aed85

Browse files
committed
moving to use eager loaded tests for testing
1 parent 0039108 commit 81aed85

File tree

1 file changed

+37
-2
lines changed

1 file changed

+37
-2
lines changed

sqlmesh/core/context.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
)
7878
from sqlmesh.core.engine_adapter import EngineAdapter
7979
from sqlmesh.core.environment import Environment, EnvironmentNamingInfo, EnvironmentStatements
80+
from sqlmesh.core.janitor import cleanup_expired_views, delete_expired_snapshots
8081
from sqlmesh.core.linter.definition import AnnotatedRuleViolation, Linter
8182
from sqlmesh.core.linter.rules import BUILTIN_RULES
8283
from sqlmesh.core.loader import Loader
@@ -108,11 +109,11 @@
108109
StateReader,
109110
StateSync,
110111
)
111-
from sqlmesh.core.janitor import cleanup_expired_views, delete_expired_snapshots
112112
from sqlmesh.core.table_diff import TableDiff
113113
from sqlmesh.core.test import (
114114
ModelTestMetadata,
115115
ModelTextTestResult,
116+
filter_tests_by_patterns,
116117
generate_test,
117118
run_tests,
118119
)
@@ -391,6 +392,7 @@ def __init__(
391392
"standaloneaudits"
392393
)
393394
self._models_with_tests: t.Set[str] = set()
395+
self._model_test_metadata: t.List[ModelTestMetadata] = []
394396
self._macros: UniqueKeyDict[str, ExecutableOrMacro] = UniqueKeyDict("macros")
395397
self._metrics: UniqueKeyDict[str, Metric] = UniqueKeyDict("metrics")
396398
self._jinja_macros = JinjaMacroRegistry()
@@ -641,6 +643,7 @@ def load(self, update_schemas: bool = True) -> GenericContext[C]:
641643
self._excluded_requirements.update(project.excluded_requirements)
642644
self._environment_statements.extend(project.environment_statements)
643645
self._models_with_tests.update(project.models_with_tests)
646+
self._model_test_metadata.extend(project.model_test_metadata)
644647

645648
config = loader.config
646649
self._linters[config.project] = Linter.from_rules(
@@ -2219,7 +2222,10 @@ def test(
22192222

22202223
pd.set_option("display.max_columns", None)
22212224

2222-
test_meta = self.load_model_tests(tests=tests, patterns=match_patterns)
2225+
loaded_test_meta = self._model_test_metadata
2226+
test_meta = self._filter_preloaded_tests(
2227+
test_meta=loaded_test_meta, tests=tests, patterns=match_patterns
2228+
)
22232229

22242230
result = run_tests(
22252231
model_test_metadata=test_meta,
@@ -2780,6 +2786,35 @@ def _get_engine_adapter(self, gateway: t.Optional[str] = None) -> EngineAdapter:
27802786
raise SQLMeshError(f"Gateway '{gateway}' not found in the available engine adapters.")
27812787
return self.engine_adapter
27822788

2789+
def _filter_preloaded_tests(
2790+
self,
2791+
test_meta: t.List[ModelTestMetadata],
2792+
tests: t.Optional[t.List[str]] = None,
2793+
patterns: t.Optional[t.List[str]] = None,
2794+
) -> t.List[ModelTestMetadata]:
2795+
"""Filter pre-loaded test metadata based on tests and patterns."""
2796+
2797+
if tests:
2798+
filtered_tests = []
2799+
for test in tests:
2800+
if "::" in test:
2801+
filename, test_name = test.split("::", maxsplit=1)
2802+
filtered_tests.extend(
2803+
[
2804+
t
2805+
for t in test_meta
2806+
if str(t.path) == filename and t.test_name == test_name
2807+
]
2808+
)
2809+
else:
2810+
filtered_tests.extend([t for t in test_meta if str(t.path) == test])
2811+
test_meta = filtered_tests
2812+
2813+
if patterns:
2814+
test_meta = filter_tests_by_patterns(test_meta, patterns)
2815+
2816+
return test_meta
2817+
27832818
def _snapshots(
27842819
self, models_override: t.Optional[UniqueKeyDict[str, Model]] = None
27852820
) -> t.Dict[str, Snapshot]:

0 commit comments

Comments
 (0)