Skip to content

Commit 04a82c2

Browse files
committed
moving to use eager loaded tests for testing
1 parent 2aabde8 commit 04a82c2

1 file changed

Lines changed: 37 additions & 2 deletions

File tree

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
)
@@ -399,6 +400,7 @@ def __init__(
399400
"standaloneaudits"
400401
)
401402
self._models_with_tests: t.Set[str] = set()
403+
self._model_test_metadata: t.List[ModelTestMetadata] = []
402404
self._macros: UniqueKeyDict[str, ExecutableOrMacro] = UniqueKeyDict("macros")
403405
self._metrics: UniqueKeyDict[str, Metric] = UniqueKeyDict("metrics")
404406
self._jinja_macros = JinjaMacroRegistry()
@@ -649,6 +651,7 @@ def load(self, update_schemas: bool = True) -> GenericContext[C]:
649651
self._excluded_requirements.update(project.excluded_requirements)
650652
self._environment_statements.extend(project.environment_statements)
651653
self._models_with_tests.update(project.models_with_tests)
654+
self._model_test_metadata.extend(project.model_test_metadata)
652655

653656
config = loader.config
654657
self._linters[config.project] = Linter.from_rules(
@@ -2227,7 +2230,10 @@ def test(
22272230

22282231
pd.set_option("display.max_columns", None)
22292232

2230-
test_meta = self.load_model_tests(tests=tests, patterns=match_patterns)
2233+
loaded_test_meta = self._model_test_metadata
2234+
test_meta = self._filter_preloaded_tests(
2235+
test_meta=loaded_test_meta, tests=tests, patterns=match_patterns
2236+
)
22312237

22322238
result = run_tests(
22332239
model_test_metadata=test_meta,
@@ -2789,6 +2795,35 @@ def _get_engine_adapter(self, gateway: t.Optional[str] = None) -> EngineAdapter:
27892795
raise SQLMeshError(f"Gateway '{gateway}' not found in the available engine adapters.")
27902796
return self.engine_adapter
27912797

2798+
def _filter_preloaded_tests(
2799+
self,
2800+
test_meta: t.List[ModelTestMetadata],
2801+
tests: t.Optional[t.List[str]] = None,
2802+
patterns: t.Optional[t.List[str]] = None,
2803+
) -> t.List[ModelTestMetadata]:
2804+
"""Filter pre-loaded test metadata based on tests and patterns."""
2805+
2806+
if tests:
2807+
filtered_tests = []
2808+
for test in tests:
2809+
if "::" in test:
2810+
filename, test_name = test.split("::", maxsplit=1)
2811+
filtered_tests.extend(
2812+
[
2813+
t
2814+
for t in test_meta
2815+
if str(t.path) == filename and t.test_name == test_name
2816+
]
2817+
)
2818+
else:
2819+
filtered_tests.extend([t for t in test_meta if str(t.path) == test])
2820+
test_meta = filtered_tests
2821+
2822+
if patterns:
2823+
test_meta = filter_tests_by_patterns(test_meta, patterns)
2824+
2825+
return test_meta
2826+
27922827
def _snapshots(
27932828
self, models_override: t.Optional[UniqueKeyDict[str, Model]] = None
27942829
) -> t.Dict[str, Snapshot]:

0 commit comments

Comments
 (0)