def _block(self, block_proto=Block_pb2.Block()): # Switch to the active DeltaGenerator, in case we're in a `with` block. self = self._active_dg if self._container is None or self._cursor is None: return self msg = ForwardMsg_pb2.ForwardMsg() msg.metadata.parent_block.container = self._container msg.metadata.parent_block.path[:] = self._cursor.path msg.metadata.delta_id = self._cursor.index msg.delta.add_block.CopyFrom(block_proto) # Normally we'd return a new DeltaGenerator that uses the locked cursor # below. But in this case we want to return a DeltaGenerator that uses # a brand new cursor for this new block we're creating. block_cursor = cursor.RunningCursor(path=self._cursor.path + (self._cursor.index, )) block_dg = DeltaGenerator(container=self._container, cursor=block_cursor, parent=self) # Must be called to increment this cursor's index. self._cursor.get_locked_cursor(last_index=None) _enqueue_message(msg) return block_dg
def _block(self, block_proto=Block_pb2.Block()) -> "DeltaGenerator": # Operate on the active DeltaGenerator, in case we're in a `with` block. dg = self._active_dg # Prevent nested columns & expanders by checking all parents. block_type = block_proto.WhichOneof("type") # Convert the generator to a list, so we can use it multiple times. parent_block_types = frozenset(dg._parent_block_types) if block_type == "column" and block_type in parent_block_types: raise StreamlitAPIException( "Columns may not be nested inside other columns." ) if block_type == "expandable" and block_type in parent_block_types: raise StreamlitAPIException( "Expanders may not be nested inside other expanders." ) if dg._root_container is None or dg._cursor is None: return dg msg = ForwardMsg_pb2.ForwardMsg() msg.metadata.delta_path[:] = dg._cursor.delta_path msg.delta.add_block.CopyFrom(block_proto) # Normally we'd return a new DeltaGenerator that uses the locked cursor # below. But in this case we want to return a DeltaGenerator that uses # a brand new cursor for this new block we're creating. block_cursor = cursor.RunningCursor( root_container=dg._root_container, parent_path=dg._cursor.parent_path + (dg._cursor.index,), ) block_dg = DeltaGenerator( root_container=dg._root_container, cursor=block_cursor, parent=dg, block_type=block_type, ) # Blocks inherit their parent form ids. # NOTE: Container form ids aren't set in proto. block_dg._form_data = FormData(current_form_id(dg)) # Must be called to increment this cursor's index. dg._cursor.get_locked_cursor(last_index=None) _enqueue_message(msg) return block_dg
def _block(self, block_proto=Block_pb2.Block()): # Switch to the active DeltaGenerator, in case we're in a `with` block. self = self._active_dg # Prevent nested columns & expanders by checking all parents. block_type = block_proto.WhichOneof("type") # Convert the generator to a list, so we can use it multiple times. parent_block_types = [t for t in self._parent_block_types] if block_type == "column" and block_type in parent_block_types: raise StreamlitAPIException( "Columns may not be nested inside other columns.") if block_type == "expandable" and block_type in parent_block_types: raise StreamlitAPIException( "Expanders may not be nested inside other expanders.") if self._container is None or self._cursor is None: return self msg = ForwardMsg_pb2.ForwardMsg() msg.metadata.parent_block.container = self._container msg.metadata.parent_block.path[:] = self._cursor.path msg.metadata.delta_id = self._cursor.index msg.delta.add_block.CopyFrom(block_proto) # Normally we'd return a new DeltaGenerator that uses the locked cursor # below. But in this case we want to return a DeltaGenerator that uses # a brand new cursor for this new block we're creating. block_cursor = cursor.RunningCursor(path=self._cursor.path + (self._cursor.index, )) block_dg = DeltaGenerator( container=self._container, cursor=block_cursor, parent=self, block_type=block_type, ) # Must be called to increment this cursor's index. self._cursor.get_locked_cursor(last_index=None) _enqueue_message(msg) return block_dg
def _block(self): if self._container is None or self._cursor is None: return self msg = ForwardMsg_pb2.ForwardMsg() msg.delta.new_block = True msg.metadata.parent_block.container = self._container msg.metadata.parent_block.path[:] = self._cursor.path msg.metadata.delta_id = self._cursor.index # Normally we'd return a new DeltaGenerator that uses the locked cursor # below. But in this case we want to return a DeltaGenerator that uses # a brand new cursor for this new block we're creating. block_cursor = cursor.RunningCursor( path=self._cursor.path + (self._cursor.index,) ) block_dg = DeltaGenerator(container=self._container, cursor=block_cursor) # Must be called to increment this cursor's index. self._cursor.get_locked_cursor(None) _enqueue_message(msg) return block_dg