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
|
# 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:
|
def cmd_group_page(args) -> None:
|
||||||
"""Lista entidades hijas de un Group (entities.group_id = ?).
|
"""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("--offset", type=int, default=0)
|
||||||
sp.add_argument("--limit", type=int, default=200)
|
sp.add_argument("--limit", type=int, default=200)
|
||||||
sp.set_defaults(fn=cmd_group_page)
|
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
|
# enricher
|
||||||
e = sub.add_parser("enricher").add_subparsers(dest="op", required=True)
|
e = sub.add_parser("enricher").add_subparsers(dest="op", required=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user