跳到主要内容

创建新的工具包扩展

在使用提供的模板向 OpenBB 平台添加新的工具包扩展和路由器路径之前,了解工具包和提供商扩展之间的区别很重要。您可以在这里找到更多信息。

如何创建路由器扩展

让我们创建一个扩展,在 obb 命名空间的基础上定义一个新的路由器入口点。 它将被称为 openbb-dashboards,并将作为各种仪表板包的空路由器,用于填充未来的端点。

它本身可能没有任何功能。其他一些扩展将把它命名为依赖项,将其用作入口点。

我们将使用 ZIP 文件 模板作为起点,首先重命名所有内容。

创建文件夹

该文件夹不必与 OpenBB 代码保持在一起,可以是自己的 GitHub 仓库。 为了演示目的,我们将在其余 OpenBB 扩展中解压 ZIP 文件模板:

~/OpenBB/openbb_platform/extensions/dashboards

添加依赖项

此扩展将与可能在未来填充此空间的组件类型无关 - Plotly Dash、Streamlit 等。 依赖项的唯一添加将是 openbb-charting。 这将提供 Plotly 图表库和带有 PyWry 的自定义后端用于窗口创建。

[tool.poetry]
name = "openbb-dashboards"
version = "1.0.0"
description = "Dashboards Extension for OpenBB"
authors = ["OpenBB Team <hello@openbb.co>"]
readme = "README.md"
packages = [{ include = "openbb_dashboards" }]

[tool.poetry.dependencies]
python = ">=3.8,<3.12"
openbb = "^4.1.7"
openbb-charting = "^2.0.3"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

[tool.poetry.plugins."openbb_core_extension"]
dashboards = "openbb_dashboards.dashboards_router:router"

构建和安装包

打开终端并导航到扩展所在的文件夹,然后输入:

poetry lock

pip install -e .

添加路由器命令

为了演示此扩展,我们将创建一个用于创建和返回折线图的简单函数。这将向新命名空间添加一个端点:obb.dashboards.line_chart()

提示

创建新函数后,记住重新构建 Python 接口和静态资源。

import openbb
openbb.build()
exit()
"""Dashboards Router."""

# pylint: disable = unused-argument

from typing import List, Optional, Union

from openbb_charting import charting_router
from openbb_charting.core.openbb_figure import OpenBBFigure
from openbb_core.app.model.charts.chart import Chart
from openbb_core.app.model.obbject import OBBject
from openbb_core.app.router import Router
from openbb_core.app.utils import basemodel_to_df, df_to_basemodel
from openbb_core.provider.abstract.data import Data

router = Router(prefix="")


@router.command(
methods=["POST"],
)
def line_chart(
data: Union[Data, List[Data]],
x: Optional[str] = None,
y: Optional[Union[str, List[str]]] = None,
layout_kwargs: Optional[dict] = None,
scatter_kwargs: Optional[dict] = None,
) -> OBBject:
"""Create a line chart."""
index = "date" if x is None else x
df = basemodel_to_df(data, index=index)

y = y.split(",") if isinstance(y, str) else y
if y is None:
y = df.columns.to_list()

if scatter_kwargs is None:
scatter_kwargs = {}

fig = OpenBBFigure(create_backend=True)
for col in y:
fig = fig.add_scatter(
x=df.index,
y=df[col],
name=col,
hovertemplate=
"<b>%{fullData.name}</b>: " +
"%{y:.2f}" +
"<extra></extra>",
hoverlabel=dict(font_size=10),
**scatter_kwargs,
)

if layout_kwargs is None:
layout_kwargs = {}

fig.update_layout(
hovermode="x unified",
**layout_kwargs,
)

results = OBBject(results=df_to_basemodel(df))

results.chart = Chart(
fig=fig,
content=fig.show(external=True).to_plotly_json(),
format=charting_router.CHART_FORMAT
)

return results

使用示例语法:

data = obb.equity.price.historical("AAPL", provider="yfinance")
chart = obb.dashboards.line_chart(
data.results, y=["high", "low"],
scatter_kwargs = {"showlegend": False},
layout_kwargs={"template":"plotly_white"}
)
chart.show()

此演示并不意味着代表完成的产品,只是在开始时探索的路径。 我们希望您享受这个旅程,并期待看到您构建的内容!