Skip to main content

UrVerse Core SDK

覆盖率 警报 可维护性评级 可靠性评级 安全评级

项目简介

这是UrVerse Core SDK的组成部分,展示了如何基于UrVerse平台开发功能应用。UrVerse是一个模块化的测试测量软件平台,采用"轻核心+强应用"的设计理念,支持仪器发现与连接管理、应用管理、低代码开发等功能。

📖 UrVerse平台FRS说明: 详细的功能需求规格请参考 飞书云文档

快速开始

安装SDK

pip install uvapi

最简使用示例

创建一个简单的FastAPI应用只需要几行代码:

# main.py
import uvicorn
from uvapi import UV_APP, UV_APP_CONFIG

# 配置API模块
UV_APP_CONFIG.app_config.apis.append('your_app.apis.api')

# 加载API并启动服务
UV_APP.load_apis()
uvicorn.run(UV_APP.app, host='0.0.0.0', port=9000)

1. 定义数据模型

# models/sql_models.py
from sqlmodel import SQLModel, Field
from typing import Optional
from datetime import datetime

class User(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str = Field(max_length=100, description='用户姓名')
    email: str = Field(max_length=255, unique=True, description='用户邮箱')
    created_at: datetime = Field(default_factory=datetime.now)

2. 创建API接口

# apis/api.py
from sqlmodel import Session, select
from uvapi import UV_APP
from uvapi.logger import get_logger
from ..models import User, UserCreate, UserRead

# 创建数据库
UV_APP.create_db()

@app.action()
def create_user(user: UserCreate) -> UserRead:
    """创建用户"""
    with Session(UV_APP.db_engine) as session:
        db_user = User.model_validate(user)
        session.add(db_user)
        session.commit()
        session.refresh(db_user)
        return UserRead.model_validate(db_user, from_attributes=True)

@app.action()
def get_users() -> List[UserRead]:
    """获取所有用户"""
    with Session(UV_APP.db_engine) as session:
        users = session.exec(select(User)).all()
        return [UserRead.model_validate(user, from_attributes=True) for user in users]

3. 定义属性组

from uvapi import UV_APP
from uvapi.framework.attribute import BaseAttrGroup

@UV_APP.register_attributes()
class GroupNameA(BaseAttrGroup):
    attr_name_a: str = 'aaa'
    attr_name_b: int = 10

# 使用自定义组名
@UV_APP.register_attributes('CustomGroupName')
class GroupNameB(BaseAttrGroup):
    temperature: float = 25.0
    humidity: int = 60

4. 使用属性组

# 获取单例实例
group = GroupNameA()

# 修改属性值,自动触发WebSocket推送
group.attr_name_b += 10

5. WebSocket连接

前端可以通过以下WebSocket端点连接:

ws://localhost:9000/v1/workers/{app_id}/attributes/ws

其中 {app_id} 是应用的ID。

6. 消息格式

当属性发生变更时,会推送以下格式的MessagePack消息:

{
    'type': 'attribute_change',
    'group': 'GroupNameA',           # 属性组名
    'attribute': 'attr_name_b',      # 属性名
    'old_value': 10,                 # 此属性旧值
    'value': 20,                     # 新值
    'timestamp': 1234567890.0
}

当app_config.toml中的attributes_auto_push为true时, 会每间隔attributes_push_interval,自动推送如下格式的消息:

{
    'type': 'attribute_snapshot',
    'group': 'GroupNameA',           # 属性组名
    'attributes': {
        'attr_name_a': value_a,
        'attr_name_b': value_b
    },
    'timestamp': 1234567890.0
}

7. 运行应用

python main.py

访问 http://localhost:9000/docs 查看自动生成的API文档。

CLI 构建打包工具

UrVerse Core SDK 提供了命令行工具 pyuvtools,用于构建和打包应用。

快速开始

# 构建应用
pyuvtools build

# 打包为 .uvapp 安装包
pyuvtools uvapp

文档

工程使用说明

SonarQube服务器地址sonarqube(http://bjrdsonar.rigoltech.com)

Gitlab服务器地址Gitlab(http://bjrdgit.rigoltech.com)

Metadata

Release files for uvapi 0.10.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for uvapi 0.10.1
File Interpreter ABI Platform Actions
uvapi-0.10.1-py3-none-any.whl Python 3 none any Details for uvapi-0.10.1-py3-none-any.whl

Release files / uvapi-0.10.1-py3-none-any.whl

Download URL uvapi-0.10.1-py3-none-any.whl
Size 65.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b8835e0ce7480b5ba237932ce32d154cab28738a1ec79ea2bf809c7643bce256
BLAKE2b-256 checksum
How to use checksums
cb82705f7077718859b3ee941f33a8bf5f6a2e9ef61f3b655c5c52372d63ce64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.15

Security for uvapi 0.10.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.10.1 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page