Skip to content

Commit 3bdfcf3

Browse files
Merge pull request #971 from Hendriela/kwargs_in_populate
Keyword arguments for populate()
2 parents 533f36f + 9496b89 commit 3bdfcf3

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
* Bugfix - Fix count for left-joined `QueryExpressions` (#951) PR #966
1717
* Bugfix - Fix assertion error when performing a union into a join (#930) PR #967
1818
* Update `~jobs.error_stack` from blob to mediumblob to allow error stacks >64kB in jobs (#984) PR #986
19+
* Add - Allow optional keyword arguments for `make()` in `populate()` PR #971
1920

2021
### 0.13.2 -- May 7, 2021
2122
* Update `setuptools_certificate` dependency to new name `otumat`

datajoint/autopopulate.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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()

docs-parts/intro/Releases_lang1.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
* Bugfix - Fix assertion error when performing a union into a join (#930) PR #967
1616
* Bugfix - Fix regression issue with `DISTINCT` clause and `GROUP_BY` (#914) PR #963
1717
* Update `~jobs.error_stack` from blob to mediumblob to allow error stacks >64kB in jobs (#984) PR #986
18+
* Add - Allow optional keyword arguments for `make()` in `populate()` PR #971
1819

1920
0.13.2 -- May 7, 2021
2021
----------------------

0 commit comments

Comments
 (0)