Extensions: New environment variables
This commit is contained in:
parent
bca9751b75
commit
e787bef4e3
3 changed files with 32 additions and 11 deletions
17
README
17
README
|
@ -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 ]
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue