106 lines
3.5 KiB
Python
106 lines
3.5 KiB
Python
"""world_sync 模块根包(对外统一导出面)。
|
||
|
||
三层接线(M11b-2):
|
||
- ``world_sync.world_sync``:内层实现包 —— 单事务「事件 + 实体状态」原子写入契约
|
||
(纯标准库依赖,异常族与读写入口在此 re-export);
|
||
- ``world_sync.world_sync.init``:宿主挂载层 —— world_sync CRUD、M11b-1 表注册、
|
||
M11b-2 conn_factory 登记到 ServerEnv;
|
||
- 本文件:把两层能力合并成模块级 API,loader 函数名统一为 ``load_world_sync``。
|
||
|
||
铁律:本包不硬编码库名(取库名走 ``ServerEnv().get_module_dbname('world_sync')``),
|
||
不在导入期建立任何数据库连接(连接工厂缺失时由写入调用点 fail-closed 抛异常)。
|
||
"""
|
||
|
||
# --- M11b-2: 单事务写入契约(最先导出,保证 import 闭包零断裂) ---
|
||
from .world_sync import (
|
||
MODULE_NAME,
|
||
MODULE_VERSION,
|
||
SERVER_ENV_CONN_FACTORY_KEYS,
|
||
ConcurrentStateConflict,
|
||
ConnFactoryNotConfigured,
|
||
EventWriteError,
|
||
PblRuntimeError,
|
||
StateWriteError,
|
||
TxAbortError,
|
||
TxConfigError,
|
||
build_sqlite_conn_factory,
|
||
detect_dialect,
|
||
new_event_id,
|
||
percentile,
|
||
read_entity_state,
|
||
resolve_conn_factory,
|
||
write_event_with_state,
|
||
)
|
||
from .world_sync import load_world_sync as _mount_runtime
|
||
|
||
# --- 既有 CRUD / 表注册能力(依赖宿主基础模块,缺失时降级不阻断契约导入) ---
|
||
try:
|
||
from .world_sync.init import (
|
||
load_world_sync as _mount_crud,
|
||
list_world_syncs,
|
||
get_world_sync,
|
||
create_world_sync,
|
||
update_world_sync,
|
||
delete_world_sync,
|
||
execute_world_sync,
|
||
module_tables,
|
||
get_table_schema,
|
||
)
|
||
except Exception as _exc: # pragma: no cover - 仅在宿主基础模块缺失时触发
|
||
_mount_crud = None
|
||
_WORLD_SYNC_INIT_ERROR = _exc
|
||
list_world_syncs = get_world_sync = create_world_sync = None
|
||
update_world_sync = delete_world_sync = execute_world_sync = None
|
||
module_tables = get_table_schema = None
|
||
else:
|
||
_WORLD_SYNC_INIT_ERROR = None
|
||
|
||
__all__ = [
|
||
# 挂载入口(三处接线统一名)
|
||
"load_world_sync",
|
||
# M11b-2 写入 / 读取契约
|
||
"write_event_with_state",
|
||
"read_entity_state",
|
||
"new_event_id",
|
||
"percentile",
|
||
"detect_dialect",
|
||
"resolve_conn_factory",
|
||
"build_sqlite_conn_factory",
|
||
# 接线常量
|
||
"MODULE_NAME",
|
||
"MODULE_VERSION",
|
||
"SERVER_ENV_CONN_FACTORY_KEYS",
|
||
# 异常族(fail-closed)
|
||
"PblRuntimeError",
|
||
"TxConfigError",
|
||
"ConnFactoryNotConfigured",
|
||
"EventWriteError",
|
||
"StateWriteError",
|
||
"ConcurrentStateConflict",
|
||
"TxAbortError",
|
||
# 既有 CRUD 能力(宿主基础模块可用时为真函数)
|
||
"list_world_syncs",
|
||
"get_world_sync",
|
||
"create_world_sync",
|
||
"update_world_sync",
|
||
"delete_world_sync",
|
||
"execute_world_sync",
|
||
"module_tables",
|
||
"get_table_schema",
|
||
]
|
||
|
||
|
||
def load_world_sync(server_env=None, conn_factory=None):
|
||
"""统一挂载入口:既有 CRUD/表注册 + M11b-2 运行时写入契约登记。
|
||
|
||
:param server_env: 宿主 ServerEnv 实例(None 时由内层实现自行取全局单例)
|
||
:param conn_factory: 宿主连接工厂;提供则登记到 ``pbl_runtime_conn_factory``,
|
||
使写入契约无需知道任何部署环境凭据来源
|
||
:return: 挂载后的 ServerEnv(宿主基础模块不可用时返回传入的 env)
|
||
"""
|
||
env = server_env
|
||
if _mount_crud is not None:
|
||
env = _mount_crud() or env
|
||
_mount_runtime(server_env=env, conn_factory=conn_factory)
|
||
return env
|