你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于 Python 的 Azure IoT 模型存储库客户端库 - 版本 1.0.0a20220330001
适用于 Python 的 Azure IoT 模型存储库库提供使用 Azure IoT 模型存储库的功能
入门
安装包
使用 pip 安装适用于 Python 的 Azure IoT 模型存储库库:
pip install azure-iot-modelsrepository
先决条件
- 遵循 Azure IoT 约定的模型存储库
- 模型存储库可以托管在本地文件系统上,也可以托管在 Web 服务器上
- Azure IoT 托管全局 Azure IoT 模型存储库 ,如果未提供自定义位置,客户端将使用该存储库
发布模型
按照 指南 将模型发布到全球 Azure IoT 模型存储库。
如果使用自定义本地或远程存储库,只需将模型文件添加到存储库位置中的目录结构,例如 dtmi/com/example/thermostat-1.json
身份验证
目前不支持身份验证机制。 全局终结点不绑定到 Azure 订阅,并且不支持身份验证。 发布的所有模型都供匿名公共使用。
关键概念
Azure IoT 模型存储库使构建者能够管理和共享数字孪生模型。 这些模型是使用数字孪生定义语言 (DTDL) 定义的 JSON-LD 文档。
存储库定义一种模式,以基于数字孪生模型标识符 (DTMI) 将 DTDL 接口存储在目录结构中。 通过将 DTMI 转换为相对路径,可以在存储库中找到接口。 例如,DTMI dtmi:com:example:Thermostat;1
转换为 /dtmi/com/example/thermostat-1.json
。
示例
以下部分提供了几个代码片段,涵盖了常见的模型存储库任务:
初始化 ModelsRepositoryClient
存储库位置
如果实例化期间未提供存储库位置,则使用 Azure IoT 模型存储库全局终结点 (https://devicemodels.azure.com/)
client = ModelsRepositoryClient()
或者,可以通过可选 repository_location
关键字为存储库所在的位置提供自定义位置。 客户端接受以下位置格式:
- Web URL - 例如
"https://contoso.com/models/"
- 本地文件系统 URI - 例如
"file:///path/to/repository/"
- POSIX 文件路径 - 例如
"/path/to/repository/"
- 驱动器号文件路径 - 例如
"C:/path/to/repository/"
client = ModelsRepositoryClient(repository_location="https://contoso.com/models/")
依赖项解析模式
可以使用以下值之一在实例化时为客户端配置可选 dependency_resolution
模式:
-
'disabled'
- 客户端不会解析模型依赖项 -
'enabled'
- 客户端将解析任何模型依赖项 -
'tryFromExpanded'
- 如果不可能,客户端将尝试使用扩展的模型定义解析模型, (回退'enabled'
到模式)
client = ModelsRepositoryClient(dependency_resolution="enabled")
dependency_resolution
如果未指定模式:
- 为 Azure IoT 模型存储库全局终结点配置的客户端将默认使用
'tryFromExpanded'
- 为自定义位置配置的客户端 (远程或本地) 将默认使用
'enabled'
其他选项
如果需要替代 azure-core 库中的默认管道行为,可以在实例化期间提供各种 关键字参数 。
客户端清理
完成客户端操作后,请确保调用 .close()
以释放资源
client = ModelsRepositoryClient()
# Do things
client.close()
为了避免必须执行此操作,建议尽可能在上下文管理器中使用客户端,该管理器会自动关闭
with ModelsRepositoryClient() as client:
# Do things
ModelsRepositoryClient - 获取模型
请注意,必须先 将模型发布到存储库 ,然后才能提取模型。 以下示例假定你使用的是全局 Azure IoT 模型存储库。
调用 .get_models()
将在提供的 DTMI 处提取模型,并可能根据依赖项解析模式) (其依赖项。 它将返回将 dict
DTIS 映射到模型定义的 。
dtmi = "dtmi:com:example:TemperatureController;1"
with ModelsRepositoryClient() as client:
models = get_models(dtmi)
print("{} resolved in {} interfaces".format(dtmi, len(models)))
如果向 方法提供多个 DCI,则可以 (检索多个模型,并可能同时) 其依赖项
dtmis = ["dtmi:com:example:TemperatureController;1", "dtmi:com:example:azuresphere:sampledevice;1"]
with ModelsRepositoryClient() as client:
models = get_models(dtmis)
print("{} resolved in {} interfaces".format(dtmi, len(models)))
默认情况下,客户端将使用在检索模型时在实例化时为其配置的依赖项解析模式。 但是,可以通过将 中的任何有效选项作为可选关键字参数传递给 来重写此行为 .get_models()
dtmi = "dtmi:com:example:TemperatureController;1"
with ModelsRepositoryClient(dependency_resolution="disabled") as client:
models = get_models(dtmi, dependency_resolution="enabled")
DTMI 约定
该包包含一个名为 的 dtmi_conventions
模块,导入时,该模块提供一系列用于处理 DTIS 的实用工具操作
# Returns True - this is a valid DTMI
dtmi_conventions.is_valid_dtmi("dtmi:com:example:Thermostat;1")
# Returns False - this is NOT a valid DTMI
dtmi_conventions.is_valid_dtmi("dtmi:com:example:Thermostat")
dtmi = "dtmi:com:example:Thermostat;1"
# Local repository example
repo_uri = "file:///path/to/repository"
print(dtmi_conventions.get_model_uri(dtmi, repo_uri))
# Prints: "file:///path/to/repository/dtmi/com/example/thermostat-1.json"
print(dtmi_conventions.get_model_uri(dtmi, repo_uri, expanded=True))
# Prints: "file:///path/to/repository/dtmi/com/example/thermostat-1.expanded.json"
# Remote repository example
repo_uri = "https://contoso.com/models/"
print(dtmi_conventions.get_model_uri(dtmi, repo_uri))
# Prints: "https://contoso/com/models/dtmi/com/example/thermostat-1.json"
print(dtmi_conventions.get_model_uri(dtmi, repo_uri, expanded=True))
# Prints: "https://contoso/com/models/dtmi/com/example/thermostat-1.expanded.json"
疑难解答
日志记录
此库使用标准 日志记录 库进行日志记录。 有关 HTTP 会话 (URL、标头等的信息,) 在 DEBUG
级别记录。
异常
模型存储库 API 可能会引发 azure-core 中定义的异常。
此外,它们可能会引发 中 azure-iot-modelsrepository
定义的异常:
-
ModelError
- 指示尝试分析/解析模型定义时出错。 这通常意味着存在格式不正确的模型不符合 模型 DTDL 规范
提供反馈
如果遇到 bug 或有建议,请创建问题。
后续步骤
示例
示例存储库中提供了其他 示例。
贡献
本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 https://cla.microsoft.com 。
提交拉取请求时,CLA 机器人将自动确定你是否需要提供 CLA,并相应地修饰 PR(例如标签、注释)。 直接按机器人提供的说明操作。 只需使用 CLA 对所有存储库执行一次这样的操作。
此项目采用了 Microsoft 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。