dialog; Convert plugin reloading tool to new API.
svn: r5277
This commit is contained in:
parent
b4426eb514
commit
cd28f97e1e
@ -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
|
||||||
|
@ -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!"),
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user