|
8 | 8 | from models_library.users import UserID |
9 | 9 | from servicelib.logging_errors import create_troubleshotting_log_kwargs |
10 | 10 | from servicelib.logging_utils import log_context |
| 11 | +from simcore_service_webserver.products import _api as products_service |
11 | 12 |
|
12 | 13 | from ..folders import folders_trash_service |
13 | 14 | from ..projects import projects_trash_service |
@@ -106,34 +107,43 @@ async def empty_trash_safe( |
106 | 107 | await _empty_explicitly_trashed_folders_and_content(app, product_name, user_id) |
107 | 108 |
|
108 | 109 |
|
109 | | -async def delete_expired_trash_as_admin(app: web.Application) -> list[str]: |
| 110 | +async def delete_expired_trash_as_admin(app: web.Application) -> list: |
110 | 111 | settings = get_plugin_settings(app) |
111 | | - |
112 | | - # app-wide |
113 | 112 | retention = timedelta(days=settings.TRASH_RETENTION_DAYS) |
114 | 113 | delete_until = arrow.now().datetime - retention |
115 | 114 |
|
116 | | - with log_context( |
117 | | - _logger, |
118 | | - logging.DEBUG, |
119 | | - "CODE PLACEHOLDER: **ALL** items marked as trashed during %s days are deleted (those marked before %s)", |
120 | | - retention, |
121 | | - delete_until, |
122 | | - ): |
123 | | - try: |
124 | | - await folders_trash_service.batch_delete_trashed_folders_as_admin( |
125 | | - app, trashed_before=delete_until, product_name="TODO", fail_fast=False |
126 | | - ) |
127 | | - except Exception as exc: # pylint: disable=broad-exception-caught |
128 | | - _logger.warning( |
129 | | - **create_troubleshotting_log_kwargs( |
130 | | - "Error deleting a trashed folders (and content) that were expired.", |
131 | | - error=exc, |
132 | | - error_context={ |
133 | | - "delete_until": delete_until, |
134 | | - "retention": retention, |
135 | | - }, |
| 115 | + deleted = [] # TODO: delete count of all items? ids? delete-stats? |
| 116 | + for product in products_service.list_products(app): |
| 117 | + with log_context( |
| 118 | + _logger, |
| 119 | + logging.DEBUG, |
| 120 | + "Deleting items marked as trashed before %s in %s [retention=%s]", |
| 121 | + retention, |
| 122 | + product.display_name, |
| 123 | + delete_until, |
| 124 | + ): |
| 125 | + try: |
| 126 | + |
| 127 | + await folders_trash_service.batch_delete_trashed_folders_as_admin( |
| 128 | + app, |
| 129 | + trashed_before=delete_until, |
| 130 | + product_name=product.name, |
| 131 | + fail_fast=False, |
| 132 | + ) |
| 133 | + |
| 134 | + except Exception as exc: # pylint: disable=broad-exception-caught |
| 135 | + _logger.warning( |
| 136 | + **create_troubleshotting_log_kwargs( |
| 137 | + "Error batch deleting expired trashed folders as admin.", |
| 138 | + error=exc, |
| 139 | + error_context={ |
| 140 | + "delete_until": delete_until, |
| 141 | + "retention": retention, |
| 142 | + "product_name": product.name, |
| 143 | + }, |
| 144 | + ) |
136 | 145 | ) |
137 | | - ) |
138 | 146 |
|
139 | | - return [] |
| 147 | + # TODO: batch delete trashed projects here |
| 148 | + |
| 149 | + return deleted |
0 commit comments