@@ -69,14 +69,21 @@ def wrapper(self, *args, **kwargs):
6969 return wrapper
7070
7171
72+ def wrap_row (row ):
73+ if row is None :
74+ return None
75+ batch_table = get_table_by_id (row ._table_id )
76+ return batch_table .batch_row (row )
77+
78+
7279def _wrap_any_rows (value ):
7380 def _is_row_but_not_batch_row (thing ):
7481 return isinstance (thing , anvil .tables .Row ) and not isinstance (thing , BatchRow )
7582
7683 if _is_row_but_not_batch_row (value ):
77- return BatchRow (value )
84+ return wrap_row (value )
7885 elif isinstance (value , list ) and value and _is_row_but_not_batch_row (value [0 ]):
79- return [BatchRow (row ) for row in value ]
86+ return [wrap_row (row ) for row in value ]
8087 else :
8188 return value
8289
@@ -227,7 +234,7 @@ def __init__(self, search_iterator):
227234 self ._search_iterator = search_iterator
228235
229236 def __getitem__ (self , index ):
230- return BatchRow (self ._search_iterator [index ])
237+ return wrap_row (self ._search_iterator [index ])
231238
232239 def __len__ (self ):
233240 return len (self ._search_iterator )
@@ -259,13 +266,14 @@ def get(self, *args, **kwargs):
259266 print ("AutoBatch: process_batch triggered early by get" )
260267 process_batch ()
261268 raw_out = unwrap_any_input_rows (self .table .get )(* args , ** kwargs )
262- return BatchRow (raw_out ) if raw_out else None
269+ return self . batch_row (raw_out ) if raw_out else None
263270
264271 def get_by_id (self , row_id , * args , ** kwargs ):
265272 if row_id in self ._batch_rows :
266273 return self ._batch_rows [row_id ]
267274 else :
268- return BatchRow (self .table .get_by_id (row_id , * args , ** kwargs ))
275+ row = self .table .get_by_id (row_id , * args , ** kwargs )
276+ return BatchRow (row )
269277
270278 def add_row (self , ** column_values ):
271279 global _add_queue
@@ -284,7 +292,11 @@ def delete_all_rows(self, *args, **kwargs):
284292
285293 def add_batch_row (self , batch_row ):
286294 self ._batch_rows [batch_row .get_id ()] = batch_row
287-
295+
296+ def batch_row (self , row ):
297+ retrieved = self ._batch_rows .get (row .get_id ())
298+ return retrieved if retrieved else BatchRow (row )
299+
288300 def __serialize__ (self , global_data ):
289301 if _add_queue or _update_queue or _delete_queue :
290302 print ("AutoBatch: process_batch triggered early by table __serialize__" )
0 commit comments