Descripción
Ruta: POST /api/racks/visio/analyze
Endpoint que recibe un fichero de stencil (Visio moderno .vsdx/.vsd, clásico .vssx/.vdx/.vss, o SVG directo) y dispara el análisis/conversión. Para formatos Visio modernos, la conversión corre asíncrona en worker Huey; para otros, análisis sincrónico.
Parámetros
Body: multipart/form-data
file(required): fichero a analizar, máx 50 MB
Validación:
- Extensión permitida:
.vsdx,.vsd,.vssx,.vdx,.vss,.svg - Tamaño: ≤ 50 MB
Respuesta (200)
Para .vsdx/.vsd (asíncrono)
{
"session_id": "uuid-string",
"filename": "cisco_racks.vsdx",
"status": "processing",
"masters": []
}
Frontend hace polling a GET /api/racks/visio/session/{session_id} para obtener masters.
Para .svg subido directo
{
"session_id": "uuid-string",
"filename": "layout.svg",
"masters": [
{
"name": "layout",
"u_height": 1,
"image_path": "uploads/temp/uuid.../layout.svg"
}
]
}
Para .vssx/.vdx/.vss (sincrónico, parser VisioParser)
{
"session_id": "uuid-string",
"filename": "stencils.vssx",
"masters": [
{
"name": "Rack",
"u_height": 2.5,
"image_path": "uploads/temp/uuid.../Rack.svg"
},
...
]
}
Flujo interno
- Validación: extensión, tamaño
- Guardar en disco:
temp/{session_id}/{filename} - Ramificación según extensión:
.svg: sanitizar, devolver master inmediatamente.vsdx/.vsd: encolarconvert_visio_async()en Huey, devolverstatus=processing.vssx/.vdx/.vss: parsear conVisioParser`, extraer masters sincronicamente
- Respuesta: 200 + payload
Permisos
- Requiere autenticación
- Requiere
require_perm(request, "racks", "admin")
Seguridad
- SVG directo: sanitización XSS antes de guardar
- Conversión Visio: sanitización post-conversión en task Huey
- Path traversal: sesión_id validada (
is_valid_session_id)
Códigos de respuesta
| Código | Condición |
|---|---|
200 | Análisis exitoso / conversión encolada |
400 | Sin fichero, extensión inválida, tamaño excedido, SVG inválido |
500 | Error en parsing (VisioParser) o libvisio_ng |
Testing
- Suites
tests/api/test_visio_import_v2.pyytests/api/test_racks_visio_confirm.py- Upload de
.vsdx→ processing - Upload de
.svgmalicioso → sanitizado - Upload oversized → 400
- Upload extensión inválida → 400
- Upload de
Véase también
- [[feature—racks—import-visio-v2]]
- [[entity—racks—endpoint—visio-session-status]]
- [[entity—racks—endpoint—visio-confirm]]
- [[entity—racks—service—convert-visio-async]]
- [[entity—racks—service—svg-sanitizer]]