4040)
4141from zimscraperlib .i18n import is_valid_iso_639_3
4242from zimscraperlib .types import get_mime_for_name
43+ from zimscraperlib .typing import Callback
4344from zimscraperlib .zim .indexing import IndexData
4445from zimscraperlib .zim .items import StaticItem
4546from zimscraperlib .zim .metadata import (
@@ -341,7 +342,7 @@ def add_item_for(
341342 should_compress : bool | None = None ,
342343 delete_fpath : bool | None = False ,
343344 duplicate_ok : bool | None = None ,
344- callback : Callable | tuple [ Callable , Any ] | None = None ,
345+ callbacks : list [ Callback ] | Callback | None = None ,
345346 index_data : IndexData | None = None ,
346347 auto_index : bool = True ,
347348 ):
@@ -365,6 +366,11 @@ def add_item_for(
365366 if fpath is None and content is None :
366367 raise ValueError ("One of fpath or content is required" )
367368
369+ if isinstance (callbacks , Callback ):
370+ callbacks = [callbacks ]
371+ elif callbacks is None :
372+ callbacks = []
373+
368374 mimetype = mimetype_for (
369375 path = path , content = content , fpath = fpath , mimetype = mimetype
370376 )
@@ -377,12 +383,7 @@ def add_item_for(
377383 hints [libzim .writer .Hint .COMPRESS ] = should_compress
378384
379385 if delete_fpath and fpath :
380- cb = [delete_callback , fpath ]
381- if callback and callable (callback ):
382- cb .append (callback )
383- elif callback :
384- cb += list (callback )
385- callback = tuple (cb )
386+ callbacks .append (Callback (func = delete_callback , args = (fpath ,)))
386387
387388 self .add_item (
388389 StaticItem (
@@ -395,7 +396,7 @@ def add_item_for(
395396 index_data = index_data ,
396397 auto_index = auto_index ,
397398 ),
398- callback = callback ,
399+ callbacks = callbacks ,
399400 duplicate_ok = duplicate_ok ,
400401 )
401402 return path
@@ -404,18 +405,23 @@ def add_item(
404405 self ,
405406 item : libzim .writer .Item ,
406407 duplicate_ok : bool | None = None ,
407- callback : Callable | tuple [ Callable , Any ] | None = None ,
408+ callbacks : list [ Callback ] | Callback | None = None ,
408409 ):
409410 """Add a libzim.writer.Item
410411
411412 callback: either a single callable or a tuple containing the callable
412413 as first element then the arguments to pass to the callable.
413414 Note: you must __not__ include the item itself in those arguments."""
414- if callback :
415- if callable (callback ):
416- weakref .finalize (item , callback )
417- else :
418- weakref .finalize (item , * callback )
415+ if isinstance (callbacks , Callback ):
416+ callbacks = [callbacks ]
417+ elif callbacks is None :
418+ callbacks = []
419+
420+ for callback in callbacks :
421+ if callback .callable :
422+ weakref .finalize (
423+ item , callback .func , * callback .get_args (), ** callback .get_kwargs ()
424+ )
419425
420426 duplicate_ok = duplicate_ok or self .ignore_duplicates
421427 try :
0 commit comments