@@ -24,8 +24,16 @@ def add_arguments(self, parser):
2424 default = False ,
2525 help = 'Replace existing files.' )
2626
27+ parser .add_argument ('-i' , '--ignore-missing' ,
28+ action = 'store_true' ,
29+ dest = 'ignore_missing' ,
30+ default = False ,
31+ help = 'Ignore missing source file error and '
32+ 'skip render for that file' )
33+
2734 def handle (self , * args , ** options ):
2835 replace = options .get ('replace' , False )
36+ ignore_missing = options .get ('ignore_missing' , False )
2937 routes = options .get ('field_path' , [])
3038 for route in routes :
3139 try :
@@ -48,10 +56,11 @@ def handle(self, *args, **options):
4856 images = queryset .values_list (field_name , flat = True ).iterator ()
4957 count = queryset .count ()
5058
51- self .render (field , images , count , replace , do_render )
59+ self .render (field , images , count , replace , ignore_missing ,
60+ do_render )
5261
5362 @staticmethod
54- def render (field , images , count , replace , do_render ):
63+ def render (field , images , count , replace , ignore_missing , do_render ):
5564 kwargs_list = (
5665 dict (
5766 file_name = file_name ,
@@ -60,6 +69,7 @@ def render(field, images, count, replace, do_render):
6069 replace = replace ,
6170 storage = field .storage .deconstruct ()[0 ],
6271 field_class = field .attr_class ,
72+ ignore_missing = ignore_missing ,
6373 )
6474 for file_name in images
6575 )
@@ -77,9 +87,16 @@ def render(field, images, count, replace, do_render):
7787
7888def render_field_variations (kwargs ):
7989 kwargs ['storage' ] = get_storage_class (kwargs ['storage' ])()
90+ ignore_missing = kwargs .pop ('ignore_missing' )
8091 do_render = kwargs .pop ('do_render' )
81- if callable (do_render ):
82- kwargs .pop ('field_class' )
83- do_render = do_render (** kwargs )
84- if do_render :
85- render_variations (** kwargs )
92+ try :
93+ if callable (do_render ):
94+ kwargs .pop ('field_class' )
95+ do_render = do_render (** kwargs )
96+ if do_render :
97+ render_variations (** kwargs )
98+ except FileNotFoundError as e :
99+ if not ignore_missing :
100+ raise CommandError (
101+ 'Source file was not found, terminating. '
102+ 'Use -i/--ignore-missing to skip this error.' ) from e
0 commit comments