@@ -415,7 +415,7 @@ class Task(Base):
415
415
# Task tags
416
416
tags_tasks = Column (String (256 ), nullable = True )
417
417
# Virtual machine tags
418
- tags = relationship ("Tag" , secondary = tasks_tags , backref = backref ("tasks" ), lazy = "subquery" )
418
+ tags = relationship ("Tag" , secondary = tasks_tags , backref = backref ("tasks" ), lazy = "subquery" , cascade = "save-update, delete" )
419
419
options = Column (Text (), nullable = True )
420
420
platform = Column (String (255 ), nullable = True )
421
421
memory = Column (Boolean , nullable = False , default = False )
@@ -465,7 +465,7 @@ class Task(Base):
465
465
timedout = Column (Boolean , nullable = False , default = False )
466
466
467
467
sample_id = Column (Integer , ForeignKey ("samples.id" ), nullable = True )
468
- sample = relationship ("Sample" , backref = backref ("tasks" , lazy = "subquery" ))
468
+ sample = relationship ("Sample" , backref = backref ("tasks" , lazy = "subquery" , cascade = "save-update, delete" ))
469
469
machine_id = Column (Integer , nullable = True )
470
470
guest = relationship ("Guest" , uselist = False , backref = backref ("tasks" ), cascade = "save-update, delete" )
471
471
errors = relationship ("Error" , backref = backref ("tasks" ), cascade = "save-update, delete" )
@@ -2150,72 +2150,71 @@ def delete_tasks(
2150
2150
bool: True if the operation was successful (including no tasks to delete), False otherwise.
2151
2151
"""
2152
2152
filters_applied = False
2153
- with self .session .begin_nested ():
2154
- search = self .session .query (Task )
2155
-
2156
- if status :
2157
- if "|" in status :
2158
- search = search .filter (Task .status .in_ (status .split ("|" )))
2159
- else :
2160
- search = search .filter (Task .status == status )
2161
- filters_applied = True
2162
- if not_status :
2163
- search = search .filter (Task .status != not_status )
2164
- filters_applied = True
2165
- if category :
2166
- search = search .filter (Task .category .in_ ([category ] if isinstance (category , str ) else category ))
2167
- filters_applied = True
2168
- if sample_id is not None :
2169
- search = search .filter (Task .sample_id == sample_id )
2170
- filters_applied = True
2171
- if id_before is not None :
2172
- search = search .filter (Task .id < id_before )
2173
- filters_applied = True
2174
- if id_after is not None :
2175
- search = search .filter (Task .id > id_after )
2176
- filters_applied = True
2177
- if completed_after :
2178
- search = search .filter (Task .completed_on > completed_after )
2179
- filters_applied = True
2180
- if added_before :
2181
- search = search .filter (Task .added_on < added_before )
2182
- filters_applied = True
2183
- if options_like :
2184
- # Replace '*' wildcards with wildcard for sql
2185
- options_like = options_like .replace ("*" , "%" )
2186
- search = search .filter (Task .options .like (f"%{ options_like } %" ))
2187
- filters_applied = True
2188
- if options_not_like :
2189
- # Replace '*' wildcards with wildcard for sql
2190
- options_not_like = options_not_like .replace ("*" , "%" )
2191
- search = search .filter (Task .options .notlike (f"%{ options_not_like } %" ))
2192
- filters_applied = True
2193
- if tags_tasks_like :
2194
- search = search .filter (Task .tags_tasks .like (f"%{ tags_tasks_like } %" ))
2195
- filters_applied = True
2196
- if task_ids :
2197
- search = search .filter (Task .id .in_ (task_ids ))
2198
- filters_applied = True
2199
- if user_id is not None :
2200
- search = search .filter (Task .user_id == user_id )
2201
- filters_applied = True
2202
-
2203
- if not filters_applied :
2204
- log .warning ("No filters provided for delete_tasks. No tasks will be deleted." )
2205
- return True # Indicate success as no deletion was requested/needed
2153
+ search = self .session .query (Task )
2206
2154
2207
- try :
2208
- # Perform the deletion and get the count of deleted rows
2209
- deleted_count = search .delete (synchronize_session = False )
2210
- log .info ("Deleted %d tasks matching the criteria." , deleted_count )
2211
- # The commit is handled by the calling context (e.g., `with db.session.begin():`)
2212
- return True
2213
- except Exception as e :
2214
- log .error ("Error deleting tasks: %s" , str (e ))
2215
- # Rollback might be needed if this function is called outside a `with db.session.begin():`
2216
- # but typically it should be called within one.
2217
- self .session .rollback ()
2218
- return False
2155
+ if status :
2156
+ if "|" in status :
2157
+ search = search .filter (Task .status .in_ (status .split ("|" )))
2158
+ else :
2159
+ search = search .filter (Task .status == status )
2160
+ filters_applied = True
2161
+ if not_status :
2162
+ search = search .filter (Task .status != not_status )
2163
+ filters_applied = True
2164
+ if category :
2165
+ search = search .filter (Task .category .in_ ([category ] if isinstance (category , str ) else category ))
2166
+ filters_applied = True
2167
+ if sample_id is not None :
2168
+ search = search .filter (Task .sample_id == sample_id )
2169
+ filters_applied = True
2170
+ if id_before is not None :
2171
+ search = search .filter (Task .id < id_before )
2172
+ filters_applied = True
2173
+ if id_after is not None :
2174
+ search = search .filter (Task .id > id_after )
2175
+ filters_applied = True
2176
+ if completed_after :
2177
+ search = search .filter (Task .completed_on > completed_after )
2178
+ filters_applied = True
2179
+ if added_before :
2180
+ search = search .filter (Task .added_on < added_before )
2181
+ filters_applied = True
2182
+ if options_like :
2183
+ # Replace '*' wildcards with wildcard for sql
2184
+ options_like = options_like .replace ("*" , "%" )
2185
+ search = search .filter (Task .options .like (f"%{ options_like } %" ))
2186
+ filters_applied = True
2187
+ if options_not_like :
2188
+ # Replace '*' wildcards with wildcard for sql
2189
+ options_not_like = options_not_like .replace ("*" , "%" )
2190
+ search = search .filter (Task .options .notlike (f"%{ options_not_like } %" ))
2191
+ filters_applied = True
2192
+ if tags_tasks_like :
2193
+ search = search .filter (Task .tags_tasks .like (f"%{ tags_tasks_like } %" ))
2194
+ filters_applied = True
2195
+ if task_ids :
2196
+ search = search .filter (Task .id .in_ (task_ids ))
2197
+ filters_applied = True
2198
+ if user_id is not None :
2199
+ search = search .filter (Task .user_id == user_id )
2200
+ filters_applied = True
2201
+
2202
+ if not filters_applied :
2203
+ log .warning ("No filters provided for delete_tasks. No tasks will be deleted." )
2204
+ return True # Indicate success as no deletion was requested/needed
2205
+
2206
+ try :
2207
+ # Perform the deletion and get the count of deleted rows
2208
+ deleted_count = search .delete (synchronize_session = False )
2209
+ log .info ("Deleted %d tasks matching the criteria." , deleted_count )
2210
+ self .session .commit ()
2211
+ return True
2212
+ except Exception as e :
2213
+ log .error ("Error deleting tasks: %s" , str (e ))
2214
+ # Rollback might be needed if this function is called outside a `with db.session.begin():`
2215
+ # but typically it should be called within one.
2216
+ self .session .rollback ()
2217
+ return False
2219
2218
2220
2219
2221
2220
def check_tasks_timeout (self , timeout ):
0 commit comments