@@ -128,10 +128,11 @@ def _jobs_to_do(self, restrictions):
128128
129129 def populate (self , * restrictions , suppress_errors = False , return_exception_objects = False ,
130130 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 ):
132132 """
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+
135136 :param restrictions: a list of restrictions each restrict
136137 (table.key_source - target.proj())
137138 :param suppress_errors: if True, do not terminate execution.
@@ -143,6 +144,10 @@ def populate(self, *restrictions, suppress_errors=False, return_exception_object
143144 :param display_progress: if True, report progress_bar
144145 :param processes: number of processes to use. When set to a large number, then
145146 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
146151 """
147152 if self .connection .in_transaction :
148153 raise DataJointError ('Populate cannot be called during a transaction.' )
@@ -176,7 +181,8 @@ def handler(signum, frame):
176181 error_list = []
177182 populate_kwargs = dict (
178183 suppress_errors = suppress_errors ,
179- return_exception_objects = return_exception_objects )
184+ return_exception_objects = return_exception_objects ,
185+ make_kwargs = make_kwargs )
180186
181187 if processes == 1 :
182188 for key in tqdm (keys , desc = self .__class__ .__name__ ) if display_progress else keys :
@@ -207,7 +213,7 @@ def handler(signum, frame):
207213 if suppress_errors :
208214 return error_list
209215
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 ):
211217 """
212218 populates table for one source key, calling self.make inside a transaction.
213219 :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):
228234 logger .info ('Populating: ' + str (key ))
229235 self .__class__ ._allow_insert = True
230236 try :
231- make (dict (key ))
237+ make (dict (key ), ** ( make_kwargs or {}) )
232238 except (KeyboardInterrupt , SystemExit , Exception ) as error :
233239 try :
234240 self .connection .cancel_transaction ()
0 commit comments