NetBox Customer Export plugin with configurable branding
Plugin for NetBox 4.6.8–4.6.99 that exports customer documentation (PDF, Word, HTML preview) for a site, location, tenant or tenant group. Technicians pick sections, device roles and columns before exporting. Branding profiles (colors, font, logo, footer, Word template incl. .dotx, table style, extra CSS) are configurable via PLUGINS_CONFIG and selectable per export. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
"""Rack-Ansichten offline (ohne HTTP-Aufruf der API) als SVG erzeugen."""
|
||||
import logging
|
||||
|
||||
from django.utils.module_loading import import_string
|
||||
from netbox.plugins import get_plugin_config
|
||||
|
||||
logger = logging.getLogger("netbox_customer_export")
|
||||
|
||||
|
||||
def render_rack_svg(rack, face, user):
|
||||
"""Gibt das SVG als String zurück oder None bei Fehlern.
|
||||
|
||||
Ist ``rack_svg_renderer`` gesetzt (z.B. der Offline-Renderer aus Netbox-Utilities, der mehrere
|
||||
Geräte pro HE korrekt darstellt), wird dieser aufgerufen: ``fn(rack=..., face=..., user=...)``.
|
||||
Andernfalls wird NetBox' eigener RackElevationSVG direkt in-process genutzt.
|
||||
"""
|
||||
try:
|
||||
renderer = get_plugin_config("netbox_customer_export", "rack_svg_renderer")
|
||||
if renderer:
|
||||
svg = import_string(renderer)(rack=rack, face=face, user=user)
|
||||
else:
|
||||
from dcim.svg import RackElevationSVG
|
||||
|
||||
svg = RackElevationSVG(rack, user=user, include_images=False, base_url="").render(face)
|
||||
return svg.tostring() if hasattr(svg, "tostring") else str(svg)
|
||||
except Exception: # noqa: BLE001 – ein defektes Rack soll nicht den ganzen Export abbrechen
|
||||
logger.exception("Rack-SVG für %s (%s) fehlgeschlagen", rack, face)
|
||||
return None
|
||||
Reference in New Issue
Block a user