feat: 自研 agtype 解析与 psycopg3 loader

- graph/agtype.py:解析 ::vertex / ::edge / ::path 后缀,返回 Vertex/Edge/Path
- register_agtype() 直接查 ag_catalog.agtype 的 OID 注册 loader(TypeInfo.fetch 取不到)
- 18 条单元测试,样本全部从真实 AGE 库抓取;7 条畸形输入用例
- tests/test_agtype_live.py:连真库的集成测试,默认跳过(ADAPTER_TEST_DSN)
- AGENTS.md 技术栈表:图驱动改为自研解析,注明不用 apache-age-python 的原因
This commit is contained in:
Donny committed 2026-11-05 02:30:11 +08:00
1 parent ace505cc6b
commit f042452fe6
5 files changed
+443 -14

No files matched your search

+1 -1
View File
@@ -35,7 +35,7 @@ app.include_router(build_router(adapter), prefix="/ontology")
| 包管理 | **uv**(`uv.lock` 入库) | 不用手工 venv + pip |
| 构建 | hatchling | `src/` 布局,带 `py.typed` |
| 驱动 | **psycopg 3**(async + `psycopg_pool`) | 不用 asyncpg、不用任何 ORM |
| 图 | **`age`**(AGE 官方 psycopg3 驱动) | `AgeLoader` 处理 agtype,不手写解析 |
| 图 | **自研 agtype 解析**(`graph/agtype.py`),注册 psycopg3 loader | 不用 PyPI 的 `apache-age-python`(0.0.7 依赖 psycopg2+antlr4);AGE master 的 psycopg3 驱动未发布 |
| 对象 | **pydantic v2** + `create_model()` | 运行期按本体动态建类 |
| 本体校验 | pydantic 模型 + 导出 JSON Schema | 本体先自查,schema 供其他语言消费 |
| 表达式 | **SQL 下推** + **CEL**(`cel-python`) | 不自研表达式解析器,不 `eval` |