@@ -162,43 +162,51 @@ def finalize(self, environment: Environment) -> None:
162162 where = environment_filter ,
163163 )
164164
165- def delete_expired_environments (self ) -> t .List [Environment ]:
166- """Deletes expired environments.
165+ def get_expired_environments (self , current_ts : int ) -> t .List [Environment ]:
166+ """Returns the expired environments.
167167
168+ Expired environments are environments that have exceeded their time-to-live value.
168169 Returns:
169- A list of deleted environments.
170+ The list of environments to remove, the filter to remove environments.
170171 """
171- now_ts = now_timestamp ()
172- filter_expr = exp .LTE (
173- this = exp .column ("expiration_ts" ),
174- expression = exp .Literal .number (now_ts ),
175- )
176-
177172 rows = fetchall (
178173 self .engine_adapter ,
179174 self ._environments_query (
180- where = filter_expr ,
175+ where = self . _create_expiration_filter_expr ( current_ts ) ,
181176 lock_for_update = True ,
182177 ),
183178 )
184- environments = [self ._environment_from_row (r ) for r in rows ]
179+ expired_environments = [self ._environment_from_row (r ) for r in rows ]
180+
181+ return expired_environments
182+
183+ def delete_expired_environments (
184+ self , current_ts : t .Optional [int ] = None
185+ ) -> t .List [Environment ]:
186+ """Deletes expired environments.
187+
188+ Returns:
189+ A list of deleted environments.
190+ """
191+ current_ts = current_ts or now_timestamp ()
192+ expired_environments = self .get_expired_environments (current_ts = current_ts )
185193
186194 self .engine_adapter .delete_from (
187195 self .environments_table ,
188- where = filter_expr ,
196+ where = self . _create_expiration_filter_expr ( current_ts ) ,
189197 )
190198
191199 # Delete the expired environments' corresponding environment statements
192- if expired_environments := [
200+ if expired_environments_exprs := [
193201 exp .EQ (this = exp .column ("environment_name" ), expression = exp .Literal .string (env .name ))
194- for env in environments
202+ for env in expired_environments
195203 ]:
196204 self .engine_adapter .delete_from (
197205 self .environment_statements_table ,
198- where = exp .or_ (* expired_environments ),
206+ where = exp .or_ (* expired_environments_exprs ),
199207 )
200208
201- return environments
209+ return expired_environments
202210
203211 def get_environments (self ) -> t .List [Environment ]:
204212 """Fetches all environments.
@@ -308,6 +316,17 @@ def _environments_query(
308316 return query .lock (copy = False )
309317 return query
310318
319+ def _create_expiration_filter_expr (self , current_ts : int ) -> exp .Expression :
320+ """Creates a SQLGlot filter expression to find expired environments.
321+
322+ Args:
323+ current_ts: The current timestamp.
324+ """
325+ return exp .LTE (
326+ this = exp .column ("expiration_ts" ),
327+ expression = exp .Literal .number (current_ts ),
328+ )
329+
311330
312331def _environment_to_df (environment : Environment ) -> pd .DataFrame :
313332 return pd .DataFrame (
0 commit comments