main - feat: Create initial structure
This commit is contained in:
parent
43ad41495a
commit
377dab4ff9
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"python.analysis.extraPaths": [
|
||||
"./src"
|
||||
]
|
||||
}
|
||||
35
main.py
Normal file
35
main.py
Normal file
@ -0,0 +1,35 @@
|
||||
import logging
|
||||
import logging.handlers
|
||||
import platform
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
# Load GNU Radio
|
||||
try:
|
||||
from gnuradio import gr
|
||||
except ImportError as ex:
|
||||
# Throw a new exception with more information
|
||||
print(
|
||||
"Cannot find GNU Radio! (Have you sourced the environment file?)",
|
||||
file=sys.stderr,
|
||||
)
|
||||
# Throw the new exception
|
||||
raise Exception("Cannot find GNU Radio!") from None
|
||||
|
||||
from gnuradio.grc.core.platform import Platform
|
||||
from gnuradio.grc.core.FlowGraph import FlowGraph
|
||||
|
||||
platform = Platform(
|
||||
version=gr.version(),
|
||||
version_parts=(gr.major_version(), gr.api_version(), gr.minor_version()),
|
||||
prefs=gr.prefs(),
|
||||
# install_prefix=gr.prefix()
|
||||
)
|
||||
platform.build_library()
|
||||
|
||||
from gnuradio_mcp.middlewares.platform import PlatformMiddleware
|
||||
|
||||
platform_middleware = PlatformMiddleware(platform)
|
||||
|
||||
print(platform_middleware.blocks)
|
||||
34
pyproject.toml
Normal file
34
pyproject.toml
Normal file
@ -0,0 +1,34 @@
|
||||
[build-system]
|
||||
requires = ["setuptools>=61.0"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "gnuradio-mcp"
|
||||
version = "0.1.0"
|
||||
description = "A FastMCP server for gnuradio."
|
||||
requires-python = ">=3.13"
|
||||
dependencies = [
|
||||
"pyYAML",
|
||||
"mako",
|
||||
"pygobject",
|
||||
"numpy",
|
||||
"jsonschema",
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
dev = [
|
||||
"pytest >= 7.0",
|
||||
]
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 88
|
||||
|
||||
[tool.ruff.lint]
|
||||
select = ["E", "F", "W", "I"] # Enable basic flake8 rules + isort
|
||||
|
||||
[tool.ruff.format]
|
||||
quote-style = "double"
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
# Tell pytest where to find the package
|
||||
pythonpath = ["src"]
|
||||
0
src/gnuradio_mcp/__init__.py
Normal file
0
src/gnuradio_mcp/__init__.py
Normal file
0
src/gnuradio_mcp/middlewares/__init__.py
Normal file
0
src/gnuradio_mcp/middlewares/__init__.py
Normal file
21
src/gnuradio_mcp/middlewares/platform.py
Normal file
21
src/gnuradio_mcp/middlewares/platform.py
Normal file
@ -0,0 +1,21 @@
|
||||
from typing import List
|
||||
from gnuradio.grc.core.platform import Platform
|
||||
from pydantic import BaseModel
|
||||
|
||||
from gnuradio.grc.core.blocks.block import Block
|
||||
|
||||
class BlockModel(BaseModel):
|
||||
label: str
|
||||
key: str
|
||||
|
||||
@classmethod
|
||||
def from_block(cls, block: Block) -> "BlockModel":
|
||||
return cls(label=block.label, key=block.key)
|
||||
|
||||
class PlatformMiddleware:
|
||||
def __init__(self, platform: Platform):
|
||||
self._platform = platform
|
||||
|
||||
@property
|
||||
def blocks(self) -> List[BlockModel]:
|
||||
return [BlockModel.from_block(block) for block in self._platform.blocks.values()]
|
||||
31
tests/test_platform.py
Normal file
31
tests/test_platform.py
Normal file
@ -0,0 +1,31 @@
|
||||
import pytest
|
||||
from gnuradio_mcp.middlewares.platform import BlockModel, PlatformMiddleware
|
||||
|
||||
class MockBlock:
|
||||
def __init__(self, label, key):
|
||||
self.label = label
|
||||
self.key = key
|
||||
|
||||
class MockPlatform:
|
||||
def __init__(self, blocks):
|
||||
self.blocks = {block.key: block for block in blocks}
|
||||
|
||||
def test_block_model_from_block():
|
||||
block = MockBlock(label="Test Block", key="test_key")
|
||||
model = BlockModel.from_block(block)
|
||||
assert model.label == "Test Block"
|
||||
assert model.key == "test_key"
|
||||
|
||||
def test_platform_middleware_blocks():
|
||||
blocks = [
|
||||
MockBlock(label="Block A", key="a"),
|
||||
MockBlock(label="Block B", key="b"),
|
||||
]
|
||||
platform = MockPlatform(blocks)
|
||||
middleware = PlatformMiddleware(platform)
|
||||
block_models = middleware.blocks
|
||||
assert len(block_models) == 2
|
||||
assert block_models[0].label == "Block A"
|
||||
assert block_models[0].key == "a"
|
||||
assert block_models[1].label == "Block B"
|
||||
assert block_models[1].key == "b"
|
||||
Loading…
x
Reference in New Issue
Block a user