125
125
if repconf .mongodb .enabled :
126
126
from dev_utils .mongodb import mongo_find
127
127
if repconf .elasticsearchdb .enabled :
128
- from dev_utils .elasticsearchdb import elastic_handler # , get_analysis_index
128
+ from dev_utils .elasticsearchdb import elastic_handler # , get_analysis_index
129
129
130
130
es = elastic_handler
131
131
@@ -2020,7 +2020,6 @@ def list_tasks(
2020
2020
include_hashes = False ,
2021
2021
user_id = None ,
2022
2022
for_update = False ,
2023
- delete = False ,
2024
2023
) -> List [Task ]:
2025
2024
"""Retrieve list of task.
2026
2025
@param limit: specify a limit of entries.
@@ -2042,7 +2041,6 @@ def list_tasks(
2042
2041
@param include_hashes: return task+samples details
2043
2042
@param user_id: list of tasks submitted by user X
2044
2043
@param for_update: If True, use "SELECT FOR UPDATE" in order to create a row-level lock on the selected tasks.
2045
- @param delete: delete selected tasks
2046
2044
@return: list of tasks.
2047
2045
"""
2048
2046
tasks : List [Task ] = []
@@ -2090,10 +2088,6 @@ def list_tasks(
2090
2088
if user_id is not None :
2091
2089
search = search .filter (Task .user_id == user_id )
2092
2090
2093
- if delete :
2094
- search .delete ()
2095
- return []
2096
-
2097
2091
if order_by is not None and isinstance (order_by , tuple ):
2098
2092
search = search .order_by (* order_by )
2099
2093
elif order_by is not None :
@@ -2108,6 +2102,121 @@ def list_tasks(
2108
2102
2109
2103
return tasks
2110
2104
2105
+ def delete_task (self , task_id ):
2106
+ """Delete information on a task.
2107
+ @param task_id: ID of the task to query.
2108
+ @return: operation status.
2109
+ """
2110
+ task = self .session .get (Task , task_id )
2111
+ if task is None :
2112
+ return False
2113
+ self .session .delete (task )
2114
+ return True
2115
+
2116
+ def delete_tasks (
2117
+ self ,
2118
+ category = None ,
2119
+ status = None ,
2120
+ sample_id = None ,
2121
+ not_status = None ,
2122
+ completed_after = None ,
2123
+ added_before = None ,
2124
+ id_before = None ,
2125
+ id_after = None ,
2126
+ options_like = False ,
2127
+ options_not_like = False ,
2128
+ tags_tasks_like = False ,
2129
+ task_ids = False ,
2130
+ user_id = None ,
2131
+ ):
2132
+ """Delete tasks based on parameters. If no filters are provided, no tasks will be deleted.
2133
+
2134
+ Args:
2135
+ category: filter by category
2136
+ status: filter by task status
2137
+ sample_id: filter tasks for a sample
2138
+ not_status: exclude this task status from filter
2139
+ completed_after: only list tasks completed after this timestamp
2140
+ added_before: tasks added before a specific timestamp
2141
+ id_before: filter by tasks which is less than this value
2142
+ id_after: filter by tasks which is greater than this value
2143
+ options_like: filter tasks by specific option inside of the options
2144
+ options_not_like: filter tasks by specific option not inside of the options
2145
+ tags_tasks_like: filter tasks by specific tag
2146
+ task_ids: list of task_id
2147
+ user_id: list of tasks submitted by user X
2148
+
2149
+ Returns:
2150
+ bool: True if the operation was successful (including no tasks to delete), False otherwise.
2151
+ """
2152
+ filters_applied = False
2153
+ search = self .session .query (Task )
2154
+
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
+ # The commit is handled by the calling context (e.g., `with db.session.begin():`)
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
2218
+
2219
+
2111
2220
def check_tasks_timeout (self , timeout ):
2112
2221
"""Find tasks which were added_on more than timeout ago and clean"""
2113
2222
tasks : List [Task ] = []
@@ -2212,21 +2321,6 @@ def add_statistics_to_task(self, task_id, details): # pragma: no cover
2212
2321
task .anti_issues = details ["anti_issues" ]
2213
2322
return True
2214
2323
2215
- def delete_task (self , task_id ):
2216
- """Delete information on a task.
2217
- @param task_id: ID of the task to query.
2218
- @return: operation status.
2219
- """
2220
- task = self .session .get (Task , task_id )
2221
- if task is None :
2222
- return False
2223
- self .session .delete (task )
2224
- return True
2225
-
2226
- def delete_tasks (self , ids ):
2227
- self .session .query (Task ).filter (Task .id .in_ (ids )).delete (synchronize_session = False )
2228
- return True
2229
-
2230
2324
def view_sample (self , sample_id ):
2231
2325
"""Retrieve information on a sample given a sample id.
2232
2326
@param sample_id: ID of the sample to query.
0 commit comments