dialog; Convert plugin reloading tool to new API.

svn: r5277
This commit is contained in:
Alex Roitman 2005-10-06 06:09:48 +00:00
parent b4426eb514
commit cd28f97e1e
2 changed files with 72 additions and 55 deletions

View File

@ -12,7 +12,7 @@
+ prepend all handles and hlinks with "_" (conform to XML ID) + prepend all handles and hlinks with "_" (conform to XML ID)
+ replace "aka" with "name", "name" with "name preferred=1" + replace "aka" with "name", "name" with "name preferred=1"
* src/Plugins.py: Factor out common code for plugins; fix tool * src/Plugins.py: Factor out common code for plugins; fix tool
dialog. dialog; Convert plugin reloading tool to new API.
2005-10-05 Julio Sanchez <jsanchez@users.sourceforge.net> 2005-10-05 Julio Sanchez <jsanchez@users.sourceforge.net>
* src/plugins/ReorderIds.py: handle more cases correctly * src/plugins/ReorderIds.py: handle more cases correctly

View File

@ -584,81 +584,98 @@ class GrampsBookFormatComboBox(gtk.ComboBox):
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# reload_plugins # Reload plugins
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def reload_plugins(obj=None,junk1=None,junk2=None,junk3=None): class Reload(Tool.Tool):
"""Treated as a callback, causes all plugins to get reloaded. This is def __init__(self,db,person,options_class,name,callback=None,parent=None):
useful when writing and debugging a plugin""" Tool.Tool.__init__(self,db,person,options_class,name)
"""
Treated as a callback, causes all plugins to get reloaded.
This is useful when writing and debugging a plugin.
"""
pymod = re.compile(r"^(.*)\.py$") pymod = re.compile(r"^(.*)\.py$")
oldfailmsg = PluginMgr.failmsg_list[:] oldfailmsg = PluginMgr.failmsg_list[:]
PluginMgr.failmsg_list = [] PluginMgr.failmsg_list = []
# attempt to reload all plugins that have succeeded in the past # attempt to reload all plugins that have succeeded in the past
for plugin in PluginMgr._success_list: for plugin in PluginMgr._success_list:
filename = os.path.basename(plugin.__file__) filename = os.path.basename(plugin.__file__)
filename = filename.replace('pyc','py') filename = filename.replace('pyc','py')
filename = filename.replace('pyo','py') filename = filename.replace('pyo','py')
try: try:
reload(plugin) reload(plugin)
except: except:
PluginMgr.failmsg_list.append((filename,sys.exc_info())) PluginMgr.failmsg_list.append((filename,sys.exc_info()))
# attempt to load the plugins that have failed in the past # attempt to load the plugins that have failed in the past
for (filename,message) in oldfailmsg: for (filename,message) in oldfailmsg:
name = os.path.split(filename)
match = pymod.match(name[1])
if not match:
continue
PluginMgr.attempt_list.append(filename)
plugin = match.groups()[0]
try:
# For some strange reason second importing of a failed plugin
# results in success. Then reload reveals the actual error.
# Looks like a bug in Python.
a = __import__(plugin)
reload(a)
PluginMgr._success_list.append(a)
except:
PluginMgr.failmsg_list.append((filename,sys.exc_info()))
# attempt to load any new files found
for directory in PluginMgr.loaddir_list:
for filename in os.listdir(directory):
name = os.path.split(filename) name = os.path.split(filename)
match = pymod.match(name[1]) match = pymod.match(name[1])
if not match: if not match:
continue continue
if filename in PluginMgr.attempt_list:
continue
PluginMgr.attempt_list.append(filename) PluginMgr.attempt_list.append(filename)
plugin = match.groups()[0] plugin = match.groups()[0]
try: try:
# For some strange reason second importing of a failed plugin
# results in success. Then reload reveals the actual error.
# Looks like a bug in Python.
a = __import__(plugin) a = __import__(plugin)
if a not in PluginMgr._success_list: reload(a)
PluginMgr._success_list.append(a) PluginMgr._success_list.append(a)
except: except:
PluginMgr.failmsg_list.append((filename,sys.exc_info())) PluginMgr.failmsg_list.append((filename,sys.exc_info()))
if GrampsKeys.get_pop_plugin_status() and len(PluginMgr.failmsg_list): # attempt to load any new files found
PluginStatus() for directory in PluginMgr.loaddir_list:
else: for filename in os.listdir(directory):
global status_up name = os.path.split(filename)
if status_up: match = pymod.match(name[1])
status_up.close(None) if not match:
status_up = None continue
if filename in PluginMgr.attempt_list:
continue
PluginMgr.attempt_list.append(filename)
plugin = match.groups()[0]
try:
a = __import__(plugin)
if a not in PluginMgr._success_list:
PluginMgr._success_list.append(a)
except:
PluginMgr.failmsg_list.append((filename,sys.exc_info()))
if GrampsKeys.get_pop_plugin_status() and len(PluginMgr.failmsg_list):
PluginStatus()
else:
global status_up
if status_up:
status_up.close(None)
status_up = None
class ReloadOptions(Tool.ToolOptions):
"""
Defines options and provides handling interface.
"""
def __init__(self,name,person_id=None):
Tool.ToolOptions.__init__(self,name,person_id)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Register the plugin reloading tool # Register the plugin reloading tool
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
## PluginMgr.register_tool( PluginMgr.register_tool(
## reload_plugins, name = 'reload',
## _("Reload plugins"), category = Tool.TOOL_DEBUG,
## category=_("Debug"), tool_class = Reload,
## description=_("Attempt to reload plugins. Note: This tool itself is not reloaded!"), options_class = ReloadOptions,
## ) modes = Tool.MODE_GUI,
translated_name = _("Reload plugins"),
description=_("Attempt to reload plugins. "
"Note: This tool itself is not reloaded!"),
)