99 from sqlmesh .core .snapshot .definition import Snapshot
1010 from sqlmesh .utils .date import DatetimeRanges
1111 from sqlmesh .core .snapshot .definition import DeployabilityIndex
12- from sqlmesh .core .snapshot .definition import Intervals
1312
1413
1514class signal (registry_decorator ):
@@ -48,7 +47,6 @@ def freshness(
4847 batch : DatetimeRanges ,
4948 snapshot : Snapshot ,
5049 context : ExecutionContext ,
51- parent_intervals : t .Optional [t .List [Intervals ]] = None ,
5250) -> bool :
5351 """
5452 Implements model freshness as a signal, i.e it considers this model to be fresh if:
@@ -71,33 +69,30 @@ def freshness(
7169 return True
7270
7371 parent_snapshots = {context .snapshots [p .name ] for p in snapshot .parents }
74- if len (parent_snapshots ) != len (snapshot .node .depends_on ):
75- # The mismatch can happen if e.g an external model is not registered in the project
76- return True
7772
78- external_parent_snapshots = {p for p in parent_snapshots if p .is_external }
79- upstream_parent_snapshots = parent_snapshots - external_parent_snapshots
73+ upstream_parent_snapshots = {p for p in parent_snapshots if not p .is_external }
74+ external_parents = snapshot . node . depends_on - { p . name for p in upstream_parent_snapshots }
8075
81- if upstream_parent_snapshots and parent_intervals :
82- # At least one upstream sqlmesh model has intervals to compute (i.e is not fresh),
83- # so the current model should be considered fresh
76+ if context . parent_intervals :
77+ # At least one upstream sqlmesh model has intervals to compute (i.e is fresh),
78+ # so the current model is considered fresh too
8479 return True
8580
86- if external_parent_snapshots :
81+ if external_parents :
8782 external_last_altered_timestamps = adapter .get_table_last_modified_ts (
88- [ sp . name for sp in external_parent_snapshots ]
83+ list ( external_parents )
8984 )
9085
91- if len (external_last_altered_timestamps ) != len (external_parent_snapshots ):
86+ if len (external_last_altered_timestamps ) != len (external_parents ):
9287 raise MissingSourceError (
93- f"Expected { len (external_parent_snapshots )} sources to be present, but got { len (external_last_altered_timestamps )} ."
88+ f"Expected { len (external_parents )} sources to be present, but got { len (external_last_altered_timestamps )} ."
9489 )
9590
9691 # Finding new data means that the upstream depedencies have been altered
9792 # since the last time the model was evaluated
9893 return any (
99- upstream_last_altered_ts > last_altered_ts
100- for upstream_last_altered_ts in external_last_altered_timestamps
94+ external_last_altered_ts > last_altered_ts
95+ for external_last_altered_ts in external_last_altered_timestamps
10196 )
10297
10398 return False
0 commit comments