configfile: Only warn once for each message sent to runtime_warning()

Also simplify the maintenance of warnings.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor
2026-02-10 17:57:24 -05:00
parent 8a210d23fe
commit 1473b79ac0

View File

@@ -130,14 +130,8 @@ class ConfigWrapper:
def deprecate(self, option, value=None): def deprecate(self, option, value=None):
if not self.fileconfig.has_option(self.section, option): if not self.fileconfig.has_option(self.section, option):
return return
if value is None:
msg = ("Option '%s' in section '%s' is deprecated."
% (option, self.section))
else:
msg = ("Value '%s' in option '%s' in section '%s' is deprecated."
% (value, option, self.section))
pconfig = self.printer.lookup_object("configfile") pconfig = self.printer.lookup_object("configfile")
pconfig.deprecate(self.section, option, value, msg) pconfig.deprecate(self.section, option, value)
###################################################################### ######################################################################
@@ -468,8 +462,6 @@ class PrinterConfig:
self.autosave = ConfigAutoSave(printer) self.autosave = ConfigAutoSave(printer)
self.validate = ConfigValidate(printer) self.validate = ConfigValidate(printer)
self.deprecated = {} self.deprecated = {}
self.runtime_warnings = []
self.deprecate_warnings = []
self.status_raw_config = {} self.status_raw_config = {}
self.status_warnings = [] self.status_warnings = []
def get_printer(self): def get_printer(self):
@@ -496,27 +488,33 @@ class PrinterConfig:
def check_unused_options(self, config): def check_unused_options(self, config):
self.validate.check_unused(config.fileconfig) self.validate.check_unused(config.fileconfig)
# Deprecation warnings # Deprecation warnings
def _add_deprecated(self, data):
key = tuple(list(data.items()))
if key in self.deprecated:
return False
self.deprecated[key] = True
self.status_warnings = self.status_warnings + [data]
return True
def runtime_warning(self, msg): def runtime_warning(self, msg):
logging.warning(msg)
res = {'type': 'runtime_warning', 'message': msg} res = {'type': 'runtime_warning', 'message': msg}
self.runtime_warnings.append(res) did_add = self._add_deprecated(res)
self.status_warnings = self.runtime_warnings + self.deprecate_warnings if did_add:
logging.warning(msg)
def deprecate(self, section, option, value=None, msg=None): def deprecate(self, section, option, value=None, msg=None):
key = (section, option, value) if value is None:
if key in self.deprecated and self.deprecated[key] == msg: res = {'type': 'deprecated_option'}
return defmsg = ("Option '%s' in section '%s' is deprecated."
self.deprecated[key] = msg % (option, self.section))
self.deprecate_warnings = [] else:
for (section, option, value), msg in self.deprecated.items(): res = {'type': 'deprecated_value', 'value': value}
if value is None: defmsg = ("Value '%s' in option '%s' in section '%s' is deprecated."
res = {'type': 'deprecated_option'} % (value, option, self.section))
else: if msg is None:
res = {'type': 'deprecated_value', 'value': value} msg = defmsg
res['message'] = msg res['message'] = msg
res['section'] = section res['section'] = section
res['option'] = option res['option'] = option
self.deprecate_warnings.append(res) self._add_deprecated(res)
self.status_warnings = self.runtime_warnings + self.deprecate_warnings
# Status reporting # Status reporting
def _build_status_config(self, config): def _build_status_config(self, config):
self.status_raw_config = {} self.status_raw_config = {}