Stencil · Modelo racks
Propósito
Stencil es la plantilla visual de un dispositivo de rack. Encapsula la imagen representativa y los metadatos de altura por defecto para que el editor visual pueda renderizar el dispositivo sin datos reales de instancia. Soporta dos modos: global (organization=None, semilla del sistema visible para todos los tenants) y custom por tenant (subida manual o importación Visio .vssx/.vss/.vdx).
Contrato
Campos:
| Campo | Tipo | Notas |
|---|---|---|
name | CharField(100) | Nombre del stencil |
image_path | CharField(200) | Ruta relativa a MEDIA_ROOT o URL absoluta; expuesto como image en la API |
default_u_height | IntegerField(default=1) | Altura en unidades de rack |
manufacturer | CharField(100) | Fabricante; usado en fuzzy matching durante discovery |
category | CharField(100, default="General") | Campo string legacy (pendiente FK) |
extra_data | TextField(default="{}") | JSON libre para metadatos adicionales |
organization | FK(Organization, null) | null=True indica stencil global de sistema |
Métodos y propiedades:
image_url(property) — URL pública: siimage_pathes relativa antepone/media/; si es absoluta o empieza con/la retorna tal cual; vacío si el campo está vacío.__str__— retornaname.
Meta:
- Índice compuesto
idx_stencil_org_catsobre(organization, category).
Dependencias entrantes
| Módulo | Archivo | Uso |
|---|---|---|
LibraryService | racks/services/library.py | list_stencils, create_custom_stencil, import_visio |
library API router | racks/api/library.py | Endpoints REST stencils |
stencil_matching | network/services/device_discovery/stencil_matching.py | Fuzzy match durante discovery |
auto_config | network/services/auto_config.py | Sugiere stencil al Rack Editor vía suggested_stencil_id |
backup_service | core/services/backup_service.py | Serializa stencils custom en exports |
backup/restore API | racks/api/export/backup.py, restore.py | Ciclo de exportación e importación de rack |
blueprints schema | blueprints/api/schemas.py | Resuelve Stencil por nombre |
| Migración semilla | racks/migrations/0011_default_stencil_pack.py | Siembra 25 stencils globales |
Dependencias salientes
core.models.Organization— FK con CASCADE;null=Truepara stencils de sistema.racks.utils.visio_parser.VisioParser— usado porLibraryService.import_visiopara extraer masters.racks.utils.vss_converter.VSSConverter— convierte.vsslegado a.vssx.django.core.files.storage.default_storage— almacena imágenes bajostencils/<org_id>/<uuid>.<ext>.
Ejemplos
- Stencil global de sistema:
Stencil(name="Cisco Catalyst 9300", manufacturer="Cisco", category="Switches", default_u_height=1, organization=None). - Custom importado desde Visio: creado por
LibraryService.import_visioconcategory="Imported"eimage_path="stencils/<org_id>/<uuid>_master.png". - Fuzzy match en discovery:
match_stencil(vendor="Cisco", model="C9300-48P")→Stencil.objects.filter(manufacturer__icontains="Cisco", name__icontains="C9300-48P")devuelve{"stencil_id": 12, "confidence": 100, "reason": "Exact match"}.
Related
entity--racks--model--device— tomadefault_u_heightdel stencil seleccionado.entity--racks--model--rack— editor consume el catálogo de stencils.entity--core--model--organization— alcance de aislamiento;null= compartido global.
Véase también
- [[entity—racks—model—device]]
- [[entity—racks—model—rack]]
- [[entity—core—model—organization]]
Referenciado desde
- ¿Cómo está modelado un Rack y los dispositivos/stencils que se colocan en él en la app racks? ¿Cómo se representan las unidades U y las medias unidades (half-U), y existe ya algún concepto de orientac
- 🧩 Visio Stencil Import v2 — importación de ficheros reales de fabricante
- Agente · dev-rack-editor
- Auditoría Suprema — Racks: 6 arreglos de seguridad ALTA (s104)
- Auditoría Suprema 2 · Cola racks: librería de stencils, backup/restore, plantillas y rastro de auditoría
- Device · Modelo racks
- Endpoint: Full Backup (racks/api/export/backup.py)
- Endpoint: POST /api/racks/visio/confirm — Confirmar e importar stencils Visio
- Endpoint: POST /api/racks/visio/confirm — persistencia de stencils importados
- Endpoint: POST /api/visio/analyze — Iniciar conversión async de Visio
- Front/Back emparejados en el editor de racks — la trasera es la espalda del mismo aparato (v1.80.0)
- Full Backup: Scoping de uploads por organización (fix security)
- Función: svg_is_emf_only() — Detectar SVGs con solo arte EMF
- Import Visio v2: motor asíncrono .vsdx/.vsd → SVG + sanitización
- Import Visio: masters con arte EMF incrustado (Cisco) → PNG renderizable
- Rack · Modelo racks
- Rack Editor
- Rack Editor - Documentación Técnica
- Servicio de Backup (core/services/backup_service.py)
- Servicio de seguridad en filesystem (safe-fs)
- Servicio: Conversor EMF → SVG/PNG (stencils Visio)
- Stencils duplicados en paleta (bug restore, ronda funcional 13-08-2026)
- Toggle Stencils/Descriptions en la vista de Fila
- UI del preview de import Visio v2 — categorías por shape y renombrado inline
- Validación de esquemas de entrada en la API de biblioteca de stencils (R7-P1a)