* src/PluginMgr.py (reload_plugins): Remove function.

* src/Plugins.py (reload_plugins): Add function.


svn: r3895
This commit is contained in:
Alex Roitman 2005-01-11 03:51:27 +00:00
parent a70bf6bf46
commit 0a86499dbe
3 changed files with 92 additions and 91 deletions

View File

@ -1,5 +1,7 @@
2005-01-10 Alex Roitman <shura@alex.neuro.umn.edu>
* src/plugins/StatisticsChart.py: Misc fixes.
* src/PluginMgr.py (reload_plugins): Remove function.
* src/Plugins.py (reload_plugins): Add function.
2005-01-10 Eero Tamminen <eerot@sf>
* src/plugins/Makefile.am:

View File

@ -67,7 +67,6 @@ cl_list = []
_success_list = []
status_up = None
#-------------------------------------------------------------------------
#
# Default relationship calculator
@ -136,74 +135,6 @@ def load_plugins(direct):
else:
return True
#-------------------------------------------------------------------------
#
# reload_plugins
#
#-------------------------------------------------------------------------
def reload_plugins(obj=None,junk1=None,junk2=None,junk3=None):
"""Treated as a callback, causes all plugins to get reloaded. This is
useful when writing and debugging a plugin"""
pymod = re.compile(r"^(.*)\.py$")
global _success_list,attempt_list,loaddir_list,failmsg_list
oldfailmsg = failmsg_list[:]
failmsg_list = []
# attempt to reload all plugins that have succeeded in the past
for plugin in _success_list:
filename = os.path.basename(plugin.__file__)
filename = filename.replace('pyc','py')
filename = filename.replace('pyo','py')
try:
reload(plugin)
except:
failmsg_list.append((filename,sys.exc_info()))
# attempt to load the plugins that have failed in the past
for (filename,message) in oldfailmsg:
name = os.path.split(filename)
match = pymod.match(name[1])
if not match:
continue
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)
_success_list.append(a)
except:
failmsg_list.append((filename,sys.exc_info()))
# attempt to load any new files found
for directory in loaddir_list:
for filename in os.listdir(directory):
name = os.path.split(filename)
match = pymod.match(name[1])
if not match:
continue
if filename in attempt_list:
continue
attempt_list.append(filename)
plugin = match.groups()[0]
try:
a = __import__(plugin)
if a not in _success_list:
_success_list.append(a)
except:
failmsg_list.append((filename,sys.exc_info()))
global status_up
if not len(failmsg_list):
status_up.close(None)
status_up = None
#-------------------------------------------------------------------------
#
# Plugin registering
@ -401,15 +332,3 @@ def register_image_attribute(name):
def get_image_attributes():
return _image_attributes
#-------------------------------------------------------------------------
#
# Register the plugin reloading tool
#
#-------------------------------------------------------------------------
register_tool(
reload_plugins,
_("Reload plugins"),
category=_("Debug"),
description=_("Attempt to reload plugins. Note: This tool itself is not reloaded!"),
)

View File

@ -47,7 +47,7 @@ import traceback
import os
import sys
import string
from re import compile
import re
from gettext import gettext as _
#-------------------------------------------------------------------------
@ -67,6 +67,7 @@ import PluginMgr
# PluginDialog interface class
#
#-------------------------------------------------------------------------
class PluginDialog:
"""Displays the dialog box that allows the user to select the
report that is desired."""
@ -346,13 +347,16 @@ class ToolPlugins(PluginDialog):
# PluginStatus
#
#-------------------------------------------------------------------------
status_up = None
class PluginStatus:
"""Displays a dialog showing the status of loaded plugins"""
def __init__(self):
if PluginMgr.status_up:
PluginMgr.status_up.close(None)
PluginMgr.status_up = self
global status_up
if status_up:
status_up.close(None)
status_up = self
import cStringIO
@ -361,10 +365,7 @@ class PluginStatus:
self.top.set_title("%s - GRAMPS" % _('Plugin status'))
window = self.glade.get_widget("text")
self.pop_button = self.glade.get_widget("pop_button")
if GrampsKeys.get_pop_plugin_status():
self.pop_button.set_active(1)
else:
self.pop_button.set_active(0)
self.pop_button.set_active(GrampsKeys.get_pop_plugin_status())
self.pop_button.connect('toggled',
lambda obj: GrampsKeys.save_pop_plugin_status(self.pop_button.get_active()))
GrampsKeys.client.notify_add("/apps/gramps/behavior/pop-plugin-status",
@ -397,11 +398,11 @@ class PluginStatus:
window.get_buffer().set_text(info.read())
def on_delete(self,obj1,obj2):
PluginMgr.status_up = None
status_up = None
def close(self,obj):
self.top.destroy()
PluginMgr.status_up = None
status_up = None
def help(self,obj):
"""Display the GRAMPS manual"""
@ -631,3 +632,82 @@ class GrampsBookFormatComboBox(gtk.ComboBox):
def get_printable(self):
return self.data[self.get_active()][6]
#-------------------------------------------------------------------------
#
# reload_plugins
#
#-------------------------------------------------------------------------
def reload_plugins(obj=None,junk1=None,junk2=None,junk3=None):
"""Treated as a callback, causes all plugins to get reloaded. This is
useful when writing and debugging a plugin"""
pymod = re.compile(r"^(.*)\.py$")
oldfailmsg = PluginMgr.failmsg_list[:]
PluginMgr.failmsg_list = []
# attempt to reload all plugins that have succeeded in the past
for plugin in PluginMgr._success_list:
filename = os.path.basename(plugin.__file__)
filename = filename.replace('pyc','py')
filename = filename.replace('pyo','py')
try:
reload(plugin)
except:
PluginMgr.failmsg_list.append((filename,sys.exc_info()))
# attempt to load the plugins that have failed in the past
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)
match = pymod.match(name[1])
if not match:
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:
status_up.close(None)
status_up = None
#-------------------------------------------------------------------------
#
# Register the plugin reloading tool
#
#-------------------------------------------------------------------------
PluginMgr.register_tool(
reload_plugins,
_("Reload plugins"),
category=_("Debug"),
description=_("Attempt to reload plugins. Note: This tool itself is not reloaded!"),
)