feat(0035e): gx-cli group visual <id> espejea visual heredado del Group
Subcomando que ejecuta SELECT DISTINCT type_ref FROM entities WHERE group_id = ? AND type_ref != 'Group' (mismo SQL que el lado C++ de apply_group_inherited_visuals). Devuelve homogeneous bool, child_types ordenado y inherited (tipo unico o 'Group' generico). Permite a los tests pytest validar el contrato sin ejecutar el binario.
This commit is contained in:
@@ -570,6 +570,39 @@ def cmd_table_page(args) -> None:
|
||||
# group ops (issue 0036b) — espejo Python del loader C++ kind=Group
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
def cmd_group_visual(args) -> None:
|
||||
"""Resuelve la iconografia heredada de un Group (issue 0035e).
|
||||
|
||||
Mira los `type_ref` distintos de los hijos de `container_id`
|
||||
(entities con group_id=container_id, excluyendo subgrupos). Si todos
|
||||
comparten un solo tipo, devuelve `inherited: <type>`. Si la familia
|
||||
es heterogenea (>1 tipos distintos) o vacia, devuelve
|
||||
`inherited: 'Group'` (visual generico).
|
||||
|
||||
Espejea la query SQL del lado C++ (`apply_group_inherited_visuals`
|
||||
en data.cpp) para que los tests pytest verifiquen el contrato sin
|
||||
el binario. La forma sigue siendo siempre 'square'.
|
||||
"""
|
||||
cn = _connect(_ops_db(), readonly=True)
|
||||
cur = cn.execute(
|
||||
"SELECT DISTINCT type_ref FROM entities "
|
||||
"WHERE group_id = ? AND type_ref != 'Group'",
|
||||
(args.container_id,),
|
||||
)
|
||||
types = sorted({r["type_ref"] for r in cur.fetchall() if r["type_ref"]})
|
||||
cn.close()
|
||||
homogeneous = (len(types) == 1)
|
||||
inherited = types[0] if homogeneous else "Group"
|
||||
_emit({
|
||||
"ok": True,
|
||||
"container": args.container_id,
|
||||
"child_types": types,
|
||||
"homogeneous": homogeneous,
|
||||
"inherited": inherited,
|
||||
"shape": "square",
|
||||
})
|
||||
|
||||
|
||||
def cmd_group_page(args) -> None:
|
||||
"""Lista entidades hijas de un Group (entities.group_id = ?).
|
||||
|
||||
@@ -1155,6 +1188,11 @@ def main() -> None:
|
||||
sp.add_argument("--offset", type=int, default=0)
|
||||
sp.add_argument("--limit", type=int, default=200)
|
||||
sp.set_defaults(fn=cmd_group_page)
|
||||
# 0035e: visual heredado del tipo mayoritario
|
||||
sp = g.add_parser("visual",
|
||||
help="Resuelve iconografia heredada del Group (homogeneo vs heterogeneo)")
|
||||
sp.add_argument("container_id")
|
||||
sp.set_defaults(fn=cmd_group_visual)
|
||||
|
||||
# enricher
|
||||
e = sub.add_parser("enricher").add_subparsers(dest="op", required=True)
|
||||
|
||||
Reference in New Issue
Block a user