Der einfachste weg ist natürlich das plugin_cfg Objekt nicht existent zu machen. Es kommt dann halt immer ein Attribut Fehler, bei egal welchem Zugriff...
Aber ich möchte gern einen Aussagekräftigeren Fehler zurück liefern. Deswegen packe ich zwar ein plugin_cfg Objekt in das Plugin, aber das ist diese Klasse:
Code: Alles auswählen
class NoPluginConfig(object):
def __init__(self, module_name):
self.module_name = module_name
def __contains__(self, key): self._error()
def has_key(self, key): self._error()
def __repr__(self): self._error()
def __str__(self): self._error()
def get(self, key): self._error()
def __setitem__(self, key, item): self._error()
def commit(self):
# Der Module-Manager ruft immer commit auf ;)
pass
def _error(self):
try:
import inspect
for stack_frame in inspect.stack():
# Im stack vorwärts gehen, bis außerhalb dieser Datei
filename = stack_frame[1]
lineno = stack_frame[2]
if filename != __file__:
break
filename = "...%s" % filename[-25:]
fileinfo = "%-25s line %3s: " % (filename, lineno)
except Exception, e:
fileinfo = "(inspect Error: %s)" % e
msg = (
"Error: Plugin/Module '%s' has no plugin-config!"
" But in %s you access to the plugin_cfg object ;)"
" If you would like to use plugin_cfg, you must setup your"
" module/plugin config file!"
) % (self.module_name, fileinfo)
raise AttributeError(msg)
Es muß doch möglich sein, eines der beiden Methoden zu nutzten um jeden Zugriff mit der _error() Meldung zu quitieren...
Zur Info: Das config-Objekt kann im Grunde alles sein, was mit pickle verarbeitet werden kann.