modify: auth 插件
This commit is contained in:
+10
-6
@@ -15,7 +15,6 @@ Example Worker 插件 — 演示 @rpc_method + 显式模型绑定用法
|
||||
- 装饰器 subject 中的操作名 → 模型前缀(驼峰)
|
||||
example.add → Add, example.subtract → Subtract
|
||||
"""
|
||||
import modelvault
|
||||
from pathlib import Path
|
||||
|
||||
from chongming_worker import auto_bind_models
|
||||
@@ -37,14 +36,19 @@ auto_bind_models("example")
|
||||
async def create_workers(session, config, count=1, worker_manager=None):
|
||||
"""插件入口 — 委托给 chongming_worker 运行时创建 Worker 协程"""
|
||||
from .global_var import set_global_var
|
||||
from chongming_database import Database
|
||||
|
||||
db_path = Path(config.get("data_dir", "./data")) / "example.modelvault"
|
||||
db_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
db = await modelvault.AsyncDatabase.open(str(db_path)) # type: ignore
|
||||
db_path = Path(config.get("data_dir", "./data")) / "example.db"
|
||||
|
||||
db = Database(db_path)
|
||||
await db.initialize()
|
||||
set_global_var("db", db)
|
||||
|
||||
return _create_workers(session, config, count, worker_manager)
|
||||
|
||||
async def cleanup(worker_item: str):
|
||||
print(f"{worker_item}关闭")
|
||||
pass
|
||||
from .global_var import db
|
||||
|
||||
if db is not None:
|
||||
await db.dispose()
|
||||
print(f"{worker_item} 清理完毕")
|
||||
|
||||
+8
-10
@@ -1,9 +1,10 @@
|
||||
import sys
|
||||
from typing import Any, Callable, Awaitable, List
|
||||
import modelvault
|
||||
from typing import Any
|
||||
from .models import *
|
||||
from chongming_database import Database
|
||||
|
||||
|
||||
db: Database | None = None
|
||||
|
||||
# 初始定义(可以保留 db 作为示例)
|
||||
db: modelvault.AsyncDatabase | None = None # type: ignore
|
||||
|
||||
def set_global_var(name: str, value: Any) -> None:
|
||||
"""
|
||||
@@ -15,10 +16,7 @@ def set_global_var(name: str, value: Any) -> None:
|
||||
"""
|
||||
globals()[name] = value
|
||||
|
||||
|
||||
|
||||
# 但这样会污染导出列表,不推荐自动添加。
|
||||
|
||||
__all__ = [
|
||||
"db",
|
||||
"set_global_var",
|
||||
]
|
||||
]
|
||||
|
||||
@@ -16,6 +16,8 @@ from .pydantic import MultiplyGetResponse
|
||||
from .pydantic import SubtractGetRequest
|
||||
from .pydantic import SubtractGetResponse
|
||||
|
||||
from .counter import Counter
|
||||
|
||||
__all__ = [
|
||||
"AddGetRequest",
|
||||
"AddGetResponse",
|
||||
@@ -29,4 +31,5 @@ __all__ = [
|
||||
"MultiplyGetResponse",
|
||||
"SubtractGetRequest",
|
||||
"SubtractGetResponse",
|
||||
"Counter"
|
||||
]
|
||||
|
||||
@@ -1,14 +1,8 @@
|
||||
# src/plugins/example/models/counter.py
|
||||
from pydantic import BaseModel
|
||||
import modelvault
|
||||
from sqlmodel import Field, SQLModel
|
||||
|
||||
class Counter(BaseModel):
|
||||
# 主键字段
|
||||
__modelvault_primary_key__ = "name"
|
||||
# 唯一索引
|
||||
__modelvault_indexes__ = [
|
||||
modelvault.models.unique("name"),
|
||||
]
|
||||
|
||||
name: str # 计数器名称(例如 "visits")
|
||||
value: int = 0
|
||||
class Counter(SQLModel, table=True):
|
||||
__tablename__ = "counter" # type: ignore
|
||||
name: str = Field(primary_key=True, index=True)
|
||||
value: int = Field(default=0)
|
||||
|
||||
@@ -4,6 +4,7 @@ from .multiply import multiply
|
||||
from .divide import divide
|
||||
from .count import count_get
|
||||
|
||||
|
||||
__all__ = [
|
||||
"add",
|
||||
"add_post",
|
||||
|
||||
@@ -32,8 +32,10 @@ async def add(add_get_request:AddGetRequest) -> AddGetResponse:
|
||||
summary="Add two numbers via POST",
|
||||
response_model=AddPostResponse,
|
||||
)
|
||||
async def add_post(add_post_request: AddPostRequest, session: zenoh.Session) -> AddPostResponse:
|
||||
async def add_post(add_post_request: AddPostRequest, session: zenoh.Session, user_info: dict | None = None) -> AddPostResponse:
|
||||
"""加法运算(POST)— 通过 JSON Body 传入 a、b,返回它们的和"""
|
||||
print("----------user_info-----------")
|
||||
print(user_info)
|
||||
async with Client(session=session) as client:
|
||||
add_result = await client.call(
|
||||
worker_type="example",
|
||||
|
||||
+20
-11
@@ -1,4 +1,4 @@
|
||||
import modelvault
|
||||
from sqlalchemy import select, update
|
||||
|
||||
from chongming_worker import rpc_method
|
||||
|
||||
@@ -15,19 +15,28 @@ from ..models.counter import Counter
|
||||
async def count_get() -> CountGetResponse:
|
||||
from ..global_var import db
|
||||
|
||||
# 确保数据库已初始化(如果未初始化,则同步初始化,但这里假设已就绪)
|
||||
if db is None:
|
||||
raise RuntimeError("Database not initialized")
|
||||
|
||||
counters = modelvault.models.async_collection(db, Counter) # type: ignore
|
||||
async with db.transaction():
|
||||
counter = await counters.get("visits")
|
||||
async with db.get_session() as session:
|
||||
statement = select(Counter).where(Counter.name == "visits") # type: ignore
|
||||
result = await session.execute(statement)
|
||||
counter = result.scalar_one_or_none()
|
||||
|
||||
if counter is None:
|
||||
counter = Counter(name="visits", value=0)
|
||||
await counters.insert(counter)
|
||||
counter = Counter(name="visits", value=1)
|
||||
session.add(counter)
|
||||
await session.commit()
|
||||
return CountGetResponse(name="visits", value=1)
|
||||
|
||||
else:
|
||||
new_value = counter.value + 1
|
||||
await counters.update("visits", {"value": new_value})
|
||||
counter.value = new_value # 更新本地对象以便返回
|
||||
|
||||
return CountGetResponse(name=counter.name, value=counter.value) # type: ignore
|
||||
update_stmt = (
|
||||
update(Counter)
|
||||
.where(Counter.name == "visits") # type: ignore
|
||||
.values(value=new_value)
|
||||
)
|
||||
await session.execute(update_stmt)
|
||||
await session.commit()
|
||||
|
||||
return CountGetResponse(name="visits", value=new_value)
|
||||
|
||||
@@ -26,4 +26,4 @@ async def divide(divide_get_request: DivideGetRequest) -> DivideGetResponse:
|
||||
result=divide_get_request.a / divide_get_request.b,
|
||||
operation="divide",
|
||||
timestamp=time.time(),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -19,4 +19,4 @@ async def multiply(multiply_get_request=MultiplyGetRequest) -> MultiplyGetRespon
|
||||
result=multiply_get_request.a * multiply_get_request.b,
|
||||
operation="multiply",
|
||||
timestamp=time.time(),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -19,4 +19,4 @@ async def subtract(subtract_get_request: SubtractGetRequest) -> SubtractGetRespo
|
||||
result=subtract_get_request.a - subtract_get_request.b,
|
||||
operation="subtract",
|
||||
timestamp=time.time(),
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user