@@ -128,10 +128,11 @@ def _jobs_to_do(self, restrictions):
128
128
129
129
def populate (self , * restrictions , suppress_errors = False , return_exception_objects = False ,
130
130
reserve_jobs = False , order = "original" , limit = None , max_calls = None ,
131
- display_progress = False , processes = 1 ):
131
+ display_progress = False , processes = 1 , make_kwargs = None ):
132
132
"""
133
- table.populate() calls table.make(key) for every primary key in self.key_source
134
- for which there is not already a tuple in table.
133
+ ``table.populate()`` calls ``table.make(key)`` for every primary key in
134
+ ``self.key_source`` for which there is not already a tuple in table.
135
+
135
136
:param restrictions: a list of restrictions each restrict
136
137
(table.key_source - target.proj())
137
138
:param suppress_errors: if True, do not terminate execution.
@@ -143,6 +144,10 @@ def populate(self, *restrictions, suppress_errors=False, return_exception_object
143
144
:param display_progress: if True, report progress_bar
144
145
:param processes: number of processes to use. When set to a large number, then
145
146
uses as many as CPU cores
147
+ :param make_kwargs: Keyword arguments which do not affect the result of computation
148
+ to be passed down to each ``make()`` call. Computation arguments should be
149
+ specified within the pipeline e.g. using a `dj.Lookup` table.
150
+ :type make_kwargs: dict, optional
146
151
"""
147
152
if self .connection .in_transaction :
148
153
raise DataJointError ('Populate cannot be called during a transaction.' )
@@ -176,7 +181,8 @@ def handler(signum, frame):
176
181
error_list = []
177
182
populate_kwargs = dict (
178
183
suppress_errors = suppress_errors ,
179
- return_exception_objects = return_exception_objects )
184
+ return_exception_objects = return_exception_objects ,
185
+ make_kwargs = make_kwargs )
180
186
181
187
if processes == 1 :
182
188
for key in tqdm (keys , desc = self .__class__ .__name__ ) if display_progress else keys :
@@ -207,7 +213,7 @@ def handler(signum, frame):
207
213
if suppress_errors :
208
214
return error_list
209
215
210
- def _populate1 (self , key , jobs , suppress_errors , return_exception_objects ):
216
+ def _populate1 (self , key , jobs , suppress_errors , return_exception_objects , make_kwargs = None ):
211
217
"""
212
218
populates table for one source key, calling self.make inside a transaction.
213
219
:param jobs: the jobs table or None if not reserve_jobs
@@ -228,7 +234,7 @@ def _populate1(self, key, jobs, suppress_errors, return_exception_objects):
228
234
logger .info ('Populating: ' + str (key ))
229
235
self .__class__ ._allow_insert = True
230
236
try :
231
- make (dict (key ))
237
+ make (dict (key ), ** ( make_kwargs or {}) )
232
238
except (KeyboardInterrupt , SystemExit , Exception ) as error :
233
239
try :
234
240
self .connection .cancel_transaction ()
0 commit comments