Extensions: New environment variables

This commit is contained in:
Thomas Perl 2012-03-11 08:12:49 +01:00
parent bca9751b75
commit e787bef4e3
3 changed files with 32 additions and 11 deletions

17
README
View file

@ -164,6 +164,23 @@
export GPODDER_WRITE_LOGS=no
[ EXTENSIONS ]
Extensions are normally loaded from gPodder's "extensions/" folder (in
share/gpodder/extensions/) and from $GPODDER_HOME/Extensions/ You can
override this by setting an environment variable:
export GPODDER_EXTENSIONS="/path/to/extension1.py extension2.py"
In addition to that, if you want to disable loading of all extensions,
you can do this by setting the following environment variable to a non-
empty value:
export GPODDER_DISABLE_EXTENSIONS=yes
If you want to report a bug, please try to disable all extensions and
check if the bug still appears to see if an extension causes the bug.
[ MORE INFORMATION ]

View file

@ -34,8 +34,7 @@ class Core(object):
def __init__(self,
config_class=config.Config,
database_class=dbsqlite.Database,
model_class=model.Model,
extension_list=[]):
model_class=model.Model):
# Initialize the gPodder home directory
util.make_directory(gpodder.home)
@ -45,8 +44,7 @@ class Core(object):
self.config = config_class(gpodder.config_file)
# Load extension modules and install the extension manager
gpodder.user_extensions = extensions.ExtensionManager(self,
extension_list=extension_list)
gpodder.user_extensions = extensions.ExtensionManager(self)
# Load installed/configured plugins
gpodder.load_plugins()

View file

@ -214,14 +214,18 @@ class ExtensionContainer(object):
class ExtensionManager(object):
"""Loads extensions and manages self-registering plugins"""
def __init__(self, core, extension_list=[]):
def __init__(self, core):
self.core = core
self.extension_list = extension_list
self.filenames = os.environ.get('GPODDER_EXTENSIONS', '').split()
self.containers = []
core.config.add_observer(self._config_value_changed)
enabled_extensions = core.config.extensions.enabled
if os.environ.get('GPODDER_DISABLE_EXTENSIONS', '') != '':
logger.info('Disabling all extensions (from environment)')
return
for name, filename in self._find_extensions():
logger.debug('Found extension "%s" in %s', name, filename)
config = getattr(core.config.extensions, name)
@ -246,16 +250,18 @@ class ExtensionManager(object):
def _find_extensions(self):
extensions = {}
if self.extension_list:
files = self.extension_list
else:
if not self.filenames:
builtins = os.path.join(gpodder.prefix, 'share', 'gpodder',
'extensions', '*.py')
user_extensions = os.path.join(gpodder.home, 'Extensions', '*.py')
files = glob.glob(builtins) + glob.glob(user_extensions)
self.filenames = glob.glob(builtins) + glob.glob(user_extensions)
# Let user extensions override built-in extensions of the same name
for filename in files:
for filename in self.filenames:
if not filename or not os.path.exists(filename):
logger.info('Skipping non-existing file: %s', filename)
continue
name, _ = os.path.splitext(os.path.basename(filename))
extensions[name] = filename