Volver a la wiki

resolve_signage_adapter — Resolución de adapter de marca en Digital Signage

Firma y ubicación

def resolve_signage_adapter(profile, adapters=None):
    """Resuelve el SignageVendorAdapter de un dispositivo por su vendor (auto-match).
    
    profile: SignageProfile (monitoringTarget.signage_profile)
    adapters: Optional[List[SignageVendorAdapter]] — adapters enabled precargados
    returns: SignageVendorAdapter | None
    """

Ubicación: monitoring/services/signage_service.py:97–127

Propósito

Espejo de resolve_signage_credential_id() (línea 65): implementa el matching entre el vendor del dispositivo y el registro de adapters para determinar qué API de despliegue (si alguna) está disponible.

Es el componente central que sustenta la honestidad en marcas: determina si push_implemented es verdad o la marca solo soporta monitorización.

Comportamiento

  1. Entrada: perfil de monitoreo (SignageProfile) + vendor string.
  2. Lógica de match:
    • Slug exacto: adapter.slug == vendor_slug (vendor normalizado con slugify()).
    • Nombre exacto: adapter.name.lower().strip() == vendor.lower().
    • Match parcial: vendor en nombre del adapter O slug en vendor O viceversa.
  3. Estrategia:
    • Primero match exacto (1 resultado).
    • Si hay match exacto: devolverlo.
    • Si hay match parcial: devolverlo si es único; si hay múltiples → None (no adivina).
    • Sin match: None (no fuerza).
  4. Restricción: solo adapters con enabled=True.

Cambio v1.64.0: parámetro adapters opcional

Antes: cada llamada hacía query SignageVendorAdapter.objects.filter(enabled=True).

Ahora:

Impacto:

Consumidores

ConsumidorUbicaciónPropósito
signage_view()monitoring/views.py:445Calcula badge push/monitor en listado.
deploy logic (vía supports_real_push())signage.services.adapters.registryValida capacidad de despliegue antes de enviar contenido.
Posibles workflows internosTBDAuditoría, logs, scheduling.

Datos de origen

Flujo típico en signage_view()

enabled_adapters = list(SignageVendorAdapter.objects.filter(enabled=True))

for profile in profiles:
    adapter = resolve_signage_adapter(profile, adapters=enabled_adapters)
    push_state = "" if adapter is None else ("push" if supports_real_push(adapter.slug) else "monitor")
    device_dict["push_state"] = push_state

Testing

Véase también

Subir