Show the kiosk label prefix, and let a plugin declare the settings it owns
This commit is contained in:
@@ -9,7 +9,7 @@ from flask import Flask, Blueprint
|
||||
import click
|
||||
|
||||
from shopdb.plugins.base import BasePlugin, PluginMeta
|
||||
from shopdb.api import db, AssetType, Setting
|
||||
from shopdb.api import db, AssetType
|
||||
|
||||
from .models import (
|
||||
Printer, PrinterType, ModelSupply, PrinterDriver, PrinterSupplyAlert
|
||||
@@ -106,40 +106,65 @@ class PrintersPlugin(BasePlugin):
|
||||
with app.app_context():
|
||||
self._ensure_asset_type()
|
||||
self._ensure_printer_types()
|
||||
self._seed_settings()
|
||||
logger.info("Printers plugin installed")
|
||||
|
||||
def on_enable(self, app: Flask) -> None:
|
||||
# Idempotent re-seed so settings added in later versions reach sites
|
||||
# that installed earlier (enable runs on every upgrade cycle).
|
||||
with app.app_context():
|
||||
self._seed_settings()
|
||||
def get_settings_defaults(self) -> List[dict]:
|
||||
"""Low-toner alert settings.
|
||||
|
||||
def _seed_settings(self) -> None:
|
||||
"""Seed low-toner alert recipient settings (idempotent)."""
|
||||
defaults = [
|
||||
('printers_alert_email', '', 'string',
|
||||
'Comma-separated low-toner alert recipients; empty uses the '
|
||||
'site alert_recipients'),
|
||||
('printers_alert_userids', '', 'string',
|
||||
'Comma-separated shopdb user ids whose account emails receive '
|
||||
'low-toner alerts'),
|
||||
('printers_alert_roleids', '', 'string',
|
||||
'Comma-separated role ids; every active member of these roles '
|
||||
'receives low-toner alerts'),
|
||||
('printers_alert_supportteamid', '', 'string',
|
||||
'Support team whose webhook receives low-toner alerts; empty '
|
||||
'uses the site alert_webhook_url'),
|
||||
('printers_alert_warning_threshold', '5', 'integer',
|
||||
'Toner percent remaining at or below which a warning email fires'),
|
||||
('printers_alert_critical_threshold', '0', 'integer',
|
||||
'Toner percent remaining at or below which a critical email fires'),
|
||||
The framework seeds these at install, at enable, and on every
|
||||
`flask plugin upgrade-all`, so a key added in a later version reaches a
|
||||
site that installed an earlier one.
|
||||
"""
|
||||
return [
|
||||
{
|
||||
'key': 'printers_alert_email',
|
||||
'value': '',
|
||||
'valuetype': 'string',
|
||||
'category': 'printers',
|
||||
'description': 'Comma-separated low-toner alert recipients; '
|
||||
'empty uses the site alert_recipients',
|
||||
},
|
||||
{
|
||||
'key': 'printers_alert_userids',
|
||||
'value': '',
|
||||
'valuetype': 'string',
|
||||
'category': 'printers',
|
||||
'description': 'Comma-separated shopdb user ids whose account '
|
||||
'emails receive low-toner alerts',
|
||||
},
|
||||
{
|
||||
'key': 'printers_alert_roleids',
|
||||
'value': '',
|
||||
'valuetype': 'string',
|
||||
'category': 'printers',
|
||||
'description': 'Comma-separated role ids; every active member '
|
||||
'of these roles receives low-toner alerts',
|
||||
},
|
||||
{
|
||||
'key': 'printers_alert_supportteamid',
|
||||
'value': '',
|
||||
'valuetype': 'string',
|
||||
'category': 'printers',
|
||||
'description': 'Support team whose webhook receives low-toner '
|
||||
'alerts; empty uses the site alert_webhook_url',
|
||||
},
|
||||
{
|
||||
'key': 'printers_alert_warning_threshold',
|
||||
'value': '5',
|
||||
'valuetype': 'integer',
|
||||
'category': 'printers',
|
||||
'description': 'Toner percent remaining at or below which a '
|
||||
'warning email fires',
|
||||
},
|
||||
{
|
||||
'key': 'printers_alert_critical_threshold',
|
||||
'value': '0',
|
||||
'valuetype': 'integer',
|
||||
'category': 'printers',
|
||||
'description': 'Toner percent remaining at or below which a '
|
||||
'critical email fires',
|
||||
},
|
||||
]
|
||||
for key, value, valuetype, description in defaults:
|
||||
if Setting.get(key) is None:
|
||||
Setting.set(key, value, valuetype=valuetype,
|
||||
category='printers', description=description)
|
||||
db.session.commit()
|
||||
|
||||
def _ensure_asset_type(self) -> None:
|
||||
"""Ensure printer asset type exists."""
|
||||
|
||||
Reference in New Issue
Block a user