Skip to main content

一个以 Python 数据为中心的框架,其目标是简化和加速 NGSI-LD 代理的开发

项目描述

平西尔德

派皮 执照

概述

pyngsild是一个以 Python 数据为中心的框架,其目标是简化和加速NGSI-LD代理的开发。

通过提供一个干净简单的结构(将组件组织为 NGSI-LD 数据管道),该框架允许开发人员避免管道并专注于数据。

主要特征

  • 依赖 pyngsild 框架的代理都有一个共同的结构
  • 包括许多数据源
  • 统计数据
  • 监控(用于后台代理)
  • 错误处理
  • 日志记录
  • 经过良好测试的组件
  • 提供原语来构建符合 NGSI-LD 的实体(感谢ngsildclient库)

这个怎么运作

数据源

代理与其他代理的最大区别在于数据源。

不仅数据的性质不同,而且:

  • 数据表示:文本,json,...
  • 访问数据的方式:从文件中读取,通过网络接收,...

pyngsild提供了一个抽象级别,以便以相同的方式公开任何数据源,无论是:

  • 代理使用数据(即读取文件、请求 API)
  • 代理由数据源触发(充当守护进程,监听数据源推送的传入数据)

由于数据源几乎没有共同点,框架做出的唯一假设是:pyngsild源是可迭代的。

出于说明目的,从 Source 访问的元素可以是 CSV 文件中的一行、JSON 数组中的一项或 Pandas 数据帧中的一行。

框架提供了许多通用源,并且很容易创建新源。

管道

NGSI-LD 代理通常:

  • 从数据源收集数据
  • 构建“规范化”的 NGSI-LD 实体(根据特定领域的 DataModel)
  • 最终提供给 Context Broker

该框架允许通过提供SourceSink处理器功能来创建代理。

Source 从数据源收集数据。

当代理运行时,它会遍历源以收集行。

处理器函数获取一个Row并从中构建一个 NGSI-LD实体

行是由两个属性组成的对象:记录和提供者

  • 记录:任何=原始传入数据
  • provider: str = 表示数据提供者的标签

最终,实体被发送到处于生产模式的Context Broker的Sink

+-----------------------------------------------------------------------------------+
|                                                                                   |
|                                                                                   |
|      +--------------+                                       +--------------+      |
|      |              |     Row                    Entity     |              |      |
|      |    Source    |-------------> process() ------------->|     Sink     |      |
|      |              |                                       |              |      |
|      +--------------+                                       +--------------+      |
|                                                                                   |
|                                                                                   |
+-----------------------------------------------------------------------------------+
                                        Agent    

在哪里得到它

源代码目前托管在 GitHub 上: https ://github.com/Orange-OpenSource/pyngsild

Python 包索引中提供了最新发布版本的二进制安装程序。

pip install pyngsild

安装

pyngsild需要 Python 3.10+。

应该使用虚拟环境。例如使用 pyenv。

mkdir myfiwareproject &&  cd myfiwareproject
pyenv virtualenv 3 .10.2 myfiwareproject
pyenv本地
pip install pyngsild

入门

创建源

例如,让我们创建一个 Source,通过 CoinGecko API 收集有关公司比特币持有量的数据。

import requests
from pyngsild import *
from ngsildclient import *

COINGECKO_BTC_CAP_ENDPOINT = "https://api.coingecko.com/api/v3/companies/public_treasury/bitcoin"

src = SourceApi(lambda: requests.get(COINGECKO_BTC_CAP_ENDPOINT), path="companies", provider="CoinGecko API")

在此处查看示例 API 结果。

提供处理器功能

您必须为框架提供一个处理器功能,该功能将用于将 Row 转换为符合 NGSI-LD 的实体。

def build_entity(row: Row) -> Entity:
    record: dict = row.record
    market, symbol = [x.strip() for x in record["symbol"].split(":")]
    e = Entity("BitcoinCapitalization", f"{market}:{symbol}:{iso8601.utcnow()}")
    e.obs()
    e.prop("dataProvider", row.provider)
    e.prop("companyName", record["name"])
    e.prop("stockMarket", market)
    e.prop("stockSymbol", symbol)
    e.prop("country", record["country"])
    e.prop("totalHoldings", record["total_holdings"], unitcode="BTC", observedat=Auto)
    e.prop("totalValue", record["total_current_value_usd"], unitcode="USD", observedat=Auto)
    return e

在此处查看使用此功能构建的示例 NGSI-LD 实体。

运行代理

让我们创建 Sink、Agent 并使所有部分协同工作。

sink = SinkNgsi() # replace by SinkStdout() if you don't have a Context Broker
agent = Agent(src, sink, process=build_entity)
agent.run()
print(agent.stats) # input=27, processed=27, output=27, filtered=0, error=0, side_entities=0
agent.close()

我们完成了!

上下文代理应该已经创建了一组实体(在撰写本文时为 27 个)

执照

阿帕奇 2.0

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pyngsild-0.1.2.tar.gz (25.4 kB 查看哈希

已上传 source

内置分布

pyngsild-0.1.2-py3-none-any.whl (33.9 kB 查看哈希

已上传 py3