Skip to content
DocumentationBlockAPI Reference

Block API Reference

The Block class represents a configurable Block object with inputs, outputs, options, and state management capabilities.

Class barfi.flow.Block

Parameters

  • name (str, default=“Block”): The name of the block. If the default is used, a unique name is generated during initialization.

Example

from barfi.flow import Block
 
my_block = Block("my_block")

Methods

add_compute(self, _func: Callable[["Block"], Any]) -> None

Adds a compute function to the block. The compute function defines the block’s behavior when executed.

Parameters

  • _func (Callable[[“Block”], Any]): The compute function to be added. Takes a single argument of type ‘Block’ (self). Function can be either synchronous functions or async coroutines.

Notes

  • Synchronous functions are automatically wrapped to be async-compatible
  • The function is bound to the block instance, allowing it to access and modify the block’s attributes through ‘self’

Example

# Synchronous compute function
def compute(self):
    # Get input value
    input_value = self.get_interface("Input 1")
    # Process the value
    result = input_value * 2
    # Set output value
    self.set_interface("Output 1", result)
 
block.add_compute(compute)
 
# Asynchronous compute function
async def async_compute(self):
    input_value = self.get_interface("Input 1")
    # Simulate async operation
    await asyncio.sleep(1)
    result = input_value * 2
    self.set_interface("Output 1", result)
 
block.add_compute(async_compute)

add_input(name: str = None, interface_type: Type[IT] = Any) -> None

Adds an input interface to the block.

Parameters

  • name (str, optional): Name of the input interface. If None, a default name is generated. Recommended to provide a name.
  • interface_type (Type[IT], optional): The type of the interface. Defaults to Any. Takes in a Python type or a dataclass.

Raises

  • ValueError: If the name already exists as an interface.
  • TypeError: If the interface_type is not valid.

Example

my_block.add_input(name='Input Name', interface_type=int)

add_output(name: str = None, interface_type: Type[IT] = Any) -> None

Adds an output interface to the block.

Parameters

  • name (str, optional): Name of the output interface. If None, a default name is generated.

  • interface_type (Type[IT], optional): The type of the interface. Defaults to Any.

Raises

  • ValueError: If the name already exists as an interface.
  • TypeError: If the interface_type is not valid.

Example

block.add_output(name='Output Name', interface_type=str)

get_interface(name: str) -> Any

Gets the value of a specified interface.

Parameters

  • name (str): The name of the interface.

Returns

The value of the specified interface.

Raises

  • ValueError: If no interface with the given name is found.

Example

value = block.get_interface(name='Input Name')

set_interface(name: str, value: Any) -> None

Sets the value of a specified interface.

Parameters

  • name (str): The name of the interface.
  • value (Any): The value to set for the interface.

Raises

  • ValueError: If no interface with the given name is found.

Example

block.set_interface(name='Input Name', value=42)

set_state(key: str, value: Any) -> None

Sets a value in the block’s state.

Parameters

  • key (str): The key for the state value.
  • value (Any): The value to set.

Raises

  • ValueError: If the key is reserved.

Example

block.set_state(key='custom_state', value=123)

get_state(key: str) -> Any

Gets a value from the block’s state.

Parameters

  • key (str): The key for the state value.

Returns

The value associated with the given key.

Raises

  • ValueError: If the key does not exist in the state.

Example

value = block.get_state(key='custom_state')

add_option(name: str, type: str, **kwargs) -> None

Adds an interactive option to the block. All possible options are detailed here: BlockOption.

Parameters

  • name (str): The name of the option.
  • type (str): The type of the option. Must be one of: checkbox, input, integer, number, select, slider, display.
  • kwargs: Additional properties depending on the type.

Raises

  • ValueError: If an option with the given name already exists.
  • AssertionError: If arguments are not valid.

Example

block.add_option(name='My Option', type='checkbox', value=True)

set_option(name: str, **kwargs) -> None

Sets the value of an existing option.

Parameters

  • name (str): The name of the option.
  • kwargs: Additional properties to set.

Raises

  • ValueError: If the option name does not exist or an invalid property is set.

Example

block.set_option(name='My Option', value=False)

get_option(name: str) -> BlockOptionValue

Gets the value of an existing option.

Parameters

  • name (str): The name of the option.

Returns

The value of the specified option.

Raises

  • ValueError: If the option name does not exist.

Example

value = block.get_option(name='My Option')