@@ -24,8 +24,16 @@ def add_arguments(self, parser):
24
24
default = False ,
25
25
help = 'Replace existing files.' )
26
26
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
+
27
34
def handle (self , * args , ** options ):
28
35
replace = options .get ('replace' , False )
36
+ ignore_missing = options .get ('ignore_missing' , False )
29
37
routes = options .get ('field_path' , [])
30
38
for route in routes :
31
39
try :
@@ -48,10 +56,11 @@ def handle(self, *args, **options):
48
56
images = queryset .values_list (field_name , flat = True ).iterator ()
49
57
count = queryset .count ()
50
58
51
- self .render (field , images , count , replace , do_render )
59
+ self .render (field , images , count , replace , ignore_missing ,
60
+ do_render )
52
61
53
62
@staticmethod
54
- def render (field , images , count , replace , do_render ):
63
+ def render (field , images , count , replace , ignore_missing , do_render ):
55
64
kwargs_list = (
56
65
dict (
57
66
file_name = file_name ,
@@ -60,6 +69,7 @@ def render(field, images, count, replace, do_render):
60
69
replace = replace ,
61
70
storage = field .storage .deconstruct ()[0 ],
62
71
field_class = field .attr_class ,
72
+ ignore_missing = ignore_missing ,
63
73
)
64
74
for file_name in images
65
75
)
@@ -77,9 +87,16 @@ def render(field, images, count, replace, do_render):
77
87
78
88
def render_field_variations (kwargs ):
79
89
kwargs ['storage' ] = get_storage_class (kwargs ['storage' ])()
90
+ ignore_missing = kwargs .pop ('ignore_missing' )
80
91
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