跳到主要内容

扩展开发

本指南将帮助您为 OpenBB 平台开发自定义扩展。

什么是扩展?

扩展是为 OpenBB 平台添加新功能的模块。它们可以包括:

  • 新的数据端点
  • 分析工具
  • 可视化组件
  • 自定义指标

扩展结构

基本目录结构

my_extension/
├── __init__.py
├── models/
│ ├── __init__.py
│ └── data_models.py
├── providers/
│ ├── __init__.py
│ └── my_provider.py
└── router.py

创建路由器

from openbb_core.app.model.command_context import CommandContext
from openbb_core.app.model.obbject import OBBject
from openbb_core.app.router import Router

router = Router(prefix="/my_extension")

@router.command(model="MyDataModel")
def my_endpoint(
cc: CommandContext,
provider_choices: dict,
standard_params: dict,
extra_params: dict,
) -> OBBject:
"""我的自定义端点"""
return OBBject(results=data)

定义数据模型

from pydantic import BaseModel, Field
from typing import Optional

class MyDataModel(BaseModel):
"""我的数据模型"""

symbol: str = Field(description="股票代码")
price: float = Field(description="价格")
volume: Optional[int] = Field(default=None, description="成交量")

注册扩展

init.py 中

from openbb_core.app.extension_loader import ExtensionLoader

# 注册扩展
ExtensionLoader.register_extension("my_extension", router)

测试扩展

import pytest
from openbb import obb

def test_my_extension():
result = obb.my_extension.my_endpoint("AAPL")
assert result is not None
assert len(result.results) > 0

发布扩展

1. 创建 setup.py

from setuptools import setup, find_packages

setup(
name="openbb-my-extension",
version="1.0.0",
packages=find_packages(),
install_requires=[
"openbb-core",
],
entry_points={
"openbb_extensions": [
"my_extension = my_extension:router",
],
},
)

2. 构建和发布

python setup.py sdist bdist_wheel
pip install twine
twine upload dist/*

最佳实践

  • 遵循命名约定
  • 提供完整的文档
  • 包含单元测试
  • 处理错误情况
  • 优化性能