@@ -133,20 +133,34 @@ def __pre_delete_data_handler(instance: Data, **kwargs):
133133 instance ._saved_media_rel_paths = instance .get_all_media_rel_paths ()
134134
135135
136+ def _delete_from_backing_storage (
137+ backing_storage : CloudStorage ,
138+ data_id : int ,
139+ media_paths : list [str ],
140+ ) -> None :
141+ from .cloud_provider import SubdirectoryCloudStorageClient
142+
143+ # Create the client after commit to avoid retaining one heavyweight client per deleted Data.
144+ storage_client = SubdirectoryCloudStorageClient (
145+ backing_storage .get_client (is_trusted = True ),
146+ f"data/{ data_id } /raw" ,
147+ )
148+ storage_client .bulk_delete (media_paths )
149+
150+
136151@receiver (post_delete , sender = Data )
137152def __delete_data_handler (instance : Data , ** kwargs ):
138153 transaction .on_commit (
139154 functools .partial (shutil .rmtree , instance .get_data_dirname (), ignore_errors = True )
140155 )
141156
142- if instance .local_storage_backing_cs :
143- storage_client = instance .get_cloud_storage_client ()
144- assert storage_client
145-
157+ if backing_storage := instance .local_storage_backing_cs :
146158 transaction .on_commit (
147159 functools .partial (
148- storage_client .bulk_delete ,
149- [p .as_posix () for p in instance ._saved_media_rel_paths ],
160+ _delete_from_backing_storage ,
161+ backing_storage = backing_storage ,
162+ data_id = instance .id ,
163+ media_paths = [path .as_posix () for path in instance ._saved_media_rel_paths ],
150164 ),
151165 robust = True ,
152166 )
0 commit comments