36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Optional
|
|
|
|
from gnuradio.grc.core.FlowGraph import FlowGraph
|
|
|
|
from gnuradio_mcp.middlewares.block import BlockMiddleware
|
|
from gnuradio_mcp.models import BlockModel
|
|
from gnuradio_mcp.utils import get_unique_id
|
|
|
|
|
|
class FlowGraphMiddleware:
|
|
def __init__(self, flowgraph: FlowGraph):
|
|
self._flowgraph = flowgraph
|
|
|
|
@property
|
|
def blocks(self) -> list[BlockModel]:
|
|
return [
|
|
BlockModel(key=block.key, label=block.label)
|
|
for block in self._flowgraph.blocks
|
|
]
|
|
|
|
def add_block(self, block_type: str, block_name: Optional[str] = None) -> str:
|
|
block_name = block_name or get_unique_id(self._flowgraph.blocks)
|
|
block = self._flowgraph.new_block(block_type)
|
|
block.params["id"].set_value(block_name)
|
|
return block_name
|
|
|
|
def remove_block(self, block_name: str) -> None:
|
|
block = self._flowgraph.get_block(block_name)
|
|
self._flowgraph.remove_element(block)
|
|
|
|
def get_block(self, block_name: str) -> BlockMiddleware:
|
|
block = self._flowgraph.get_block(block_name)
|
|
return BlockMiddleware(block)
|