@@ -296,54 +296,55 @@ def _populate1(
296296 """
297297 make = self ._make_tuples if hasattr (self , "_make_tuples" ) else self .make
298298
299- if jobs is None or jobs .reserve (self .target .table_name , self ._job_key (key )):
300- self .connection .start_transaction ()
301- if key in self .target : # already populated
299+ if jobs is not None and not jobs .reserve (
300+ self .target .table_name , self ._job_key (key )
301+ ):
302+ return False
303+
304+ self .connection .start_transaction ()
305+ if key in self .target : # already populated
306+ self .connection .cancel_transaction ()
307+ if jobs is not None :
308+ jobs .complete (self .target .table_name , self ._job_key (key ))
309+ return False
310+
311+ logger .debug (f"Making { key } -> { self .target .full_table_name } " )
312+ self .__class__ ._allow_insert = True
313+ try :
314+ make (dict (key ), ** (make_kwargs or {}))
315+ except (KeyboardInterrupt , SystemExit , Exception ) as error :
316+ try :
302317 self .connection .cancel_transaction ()
303- if jobs is not None :
304- jobs .complete (self .target .table_name , self ._job_key (key ))
318+ except LostConnectionError :
319+ pass
320+ error_message = "{exception}{msg}" .format (
321+ exception = error .__class__ .__name__ ,
322+ msg = ": " + str (error ) if str (error ) else "" ,
323+ )
324+ logger .debug (
325+ f"Error making { key } -> { self .target .full_table_name } - { error_message } "
326+ )
327+ if jobs is not None :
328+ # show error name and error message (if any)
329+ jobs .error (
330+ self .target .table_name ,
331+ self ._job_key (key ),
332+ error_message = error_message ,
333+ error_stack = traceback .format_exc (),
334+ )
335+ if not suppress_errors or isinstance (error , SystemExit ):
336+ raise
305337 else :
306- logger .debug (f"Making { key } -> { self .target .full_table_name } " )
307- self .__class__ ._allow_insert = True
308- try :
309- make (dict (key ), ** (make_kwargs or {}))
310- except (KeyboardInterrupt , SystemExit , Exception ) as error :
311- try :
312- self .connection .cancel_transaction ()
313- except LostConnectionError :
314- pass
315- error_message = "{exception}{msg}" .format (
316- exception = error .__class__ .__name__ ,
317- msg = ": " + str (error ) if str (error ) else "" ,
318- )
319- logger .debug (
320- f"Error making { key } -> { self .target .full_table_name } - { error_message } "
321- )
322- if jobs is not None :
323- # show error name and error message (if any)
324- jobs .error (
325- self .target .table_name ,
326- self ._job_key (key ),
327- error_message = error_message ,
328- error_stack = traceback .format_exc (),
329- )
330- if not suppress_errors or isinstance (error , SystemExit ):
331- raise
332- else :
333- logger .error (error )
334- return key , error if return_exception_objects else error_message
335- else :
336- self .connection .commit_transaction ()
337- logger .debug (
338- f"Success making { key } -> { self .target .full_table_name } "
339- )
340- if jobs is not None :
341- jobs .complete (self .target .table_name , self ._job_key (key ))
342- return True
343- finally :
344- self .__class__ ._allow_insert = False
345-
346- return False
338+ logger .error (error )
339+ return key , error if return_exception_objects else error_message
340+ else :
341+ self .connection .commit_transaction ()
342+ logger .debug (f"Success making { key } -> { self .target .full_table_name } " )
343+ if jobs is not None :
344+ jobs .complete (self .target .table_name , self ._job_key (key ))
345+ return True
346+ finally :
347+ self .__class__ ._allow_insert = False
347348
348349 def progress (self , * restrictions , display = False ):
349350 """
0 commit comments