2023-06-21 23:31:47 +02:00
|
|
|
from django.conf import settings
|
|
|
|
from extras.plugins import PluginTemplateExtension
|
|
|
|
|
|
|
|
from .utils import generate_qrcode, get_base64
|
|
|
|
|
|
|
|
plugin_settings = settings.PLUGINS_CONFIG.get("netbox_qrgen", {})
|
|
|
|
|
|
|
|
|
|
|
|
class QRGen(PluginTemplateExtension):
|
2023-06-26 11:55:18 +02:00
|
|
|
def _get_url(self) -> str:
|
2023-06-21 23:31:47 +02:00
|
|
|
obj = self.context["object"]
|
|
|
|
request = self.context["request"]
|
|
|
|
url: str = request.build_absolute_uri(obj.get_absolute_url())
|
|
|
|
|
|
|
|
return url
|
|
|
|
|
2023-06-26 11:55:18 +02:00
|
|
|
def _get_qrcode(self, url: str) -> tuple[str, str]:
|
|
|
|
img_png, img_svg = generate_qrcode(url=url, **plugin_settings)
|
|
|
|
b64_png = get_base64(img_png)
|
|
|
|
b64_svg = get_base64(img_svg)
|
2023-06-21 23:31:47 +02:00
|
|
|
|
2023-06-26 11:55:18 +02:00
|
|
|
return b64_png, b64_svg
|
2023-06-21 23:31:47 +02:00
|
|
|
|
|
|
|
def right_page(self):
|
2023-06-26 11:55:18 +02:00
|
|
|
b64_png, b64_svg = self._get_qrcode(self._get_url())
|
2023-06-21 23:31:47 +02:00
|
|
|
return self.render(
|
|
|
|
"netbox_qrgen/qrgen.html",
|
2023-06-26 11:55:18 +02:00
|
|
|
extra_context={
|
|
|
|
"image_width": plugin_settings["qr_width"],
|
|
|
|
"image_png": b64_png,
|
|
|
|
"image_svg": b64_svg,
|
|
|
|
},
|
2023-06-21 23:31:47 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
2023-07-03 23:12:51 +02:00
|
|
|
class QRGenLocation(QRGen):
|
|
|
|
model = "dcim.location"
|
2023-06-21 23:31:47 +02:00
|
|
|
|
|
|
|
|
|
|
|
class QRGenRack(QRGen):
|
|
|
|
model = "dcim.rack"
|
|
|
|
|
|
|
|
|
2023-07-03 23:12:51 +02:00
|
|
|
class QRGenDevice(QRGen):
|
|
|
|
model = "dcim.device"
|
|
|
|
|
|
|
|
|
|
|
|
class QRGenPowerFeed(QRGen):
|
|
|
|
model = "dcim.powerfeed"
|
|
|
|
|
|
|
|
|
|
|
|
class QRGenPowerPanel(QRGen):
|
|
|
|
model = "dcim.powerpanel"
|
|
|
|
|
|
|
|
|
2023-06-21 23:31:47 +02:00
|
|
|
class QRGenCable(QRGen):
|
|
|
|
model = "dcim.cable"
|
|
|
|
|
|
|
|
|
|
|
|
class QRGenInventoryItem(QRGen):
|
|
|
|
model = "dcim.inventoryitem"
|
|
|
|
|
|
|
|
|
|
|
|
class QRGenCircuit(QRGen):
|
|
|
|
model = "circuits.circuit"
|
|
|
|
|
|
|
|
|
2023-07-03 23:12:51 +02:00
|
|
|
class QRGenVirtualizationCluster(QRGen):
|
|
|
|
model = "virtualization.cluster"
|
|
|
|
|
|
|
|
|
|
|
|
class QRGenPluginInventoryAsset(QRGen):
|
|
|
|
model = "netbox_inventory.asset"
|
|
|
|
|
|
|
|
|
|
|
|
class QRGenPluginInventoryItemType(QRGen):
|
|
|
|
model = "netbox_inventory.inventoryitemtype"
|
|
|
|
|
|
|
|
|
2023-06-21 23:31:47 +02:00
|
|
|
template_extensions = [
|
2023-07-03 23:12:51 +02:00
|
|
|
QRGenLocation,
|
2023-06-21 23:31:47 +02:00
|
|
|
QRGenRack,
|
2023-07-03 23:12:51 +02:00
|
|
|
QRGenDevice,
|
|
|
|
QRGenPowerFeed,
|
|
|
|
QRGenPowerPanel,
|
2023-06-21 23:31:47 +02:00
|
|
|
QRGenCable,
|
|
|
|
QRGenInventoryItem,
|
|
|
|
QRGenCircuit,
|
2023-07-03 23:12:51 +02:00
|
|
|
QRGenVirtualizationCluster,
|
|
|
|
QRGenPluginInventoryAsset,
|
|
|
|
QRGenPluginInventoryItemType,
|
2023-06-21 23:31:47 +02:00
|
|
|
]
|