]> kaliko git repositories - mpd-sima.git/commitdiff
Allow choosing internal plugins from config file
authorkaliko <efrim@azylum.org>
Sun, 1 Dec 2013 16:37:13 +0000 (17:37 +0100)
committerkaliko <efrim@azylum.org>
Sun, 1 Dec 2013 16:37:13 +0000 (17:37 +0100)
doc/examples/all_settings.cfg
launch
setup.py
sima/plugins/internal/__init__.py [moved from sima/plugins/__init__.py with 100% similarity]
sima/plugins/internal/crop.py [moved from sima/plugins/crop.py with 94% similarity]
sima/plugins/internal/history.py [moved from sima/plugins/addhist.py with 95% similarity]
sima/plugins/internal/lastfm.py [moved from sima/plugins/lastfm.py with 99% similarity]
sima/plugins/internal/mpdoptions.py [moved from sima/plugins/mpd.py with 96% similarity]
sima/plugins/internal/randomfallback.py [moved from sima/plugins/randomfallback.py with 95% similarity]
sima/utils/config.py

index 87621e802ba1d7d5645fc55b16a28228c75a736d..bb5273b51c7f5f6785bcac8b485106091840c00c 100644 (file)
@@ -86,7 +86,7 @@ depth = 1
 # Possible values:
 #      track : Will queue tracks from similar artists (default).
 #      top   : Will queue top tracks from similar artists. # NOT IMPLEMENTED #
-#      album : Will queue whole album from similar artists. # NOT IMPLEMENTED #
+#      album : Will queue whole album from similar artists.
 queue_mode = track
 
 ## SIMILARITY
@@ -132,7 +132,7 @@ album_to_add = 1
 ## PLUGINS
 # type: comma separated string list
 # for ex.:
-#          plugins = Scrobble, AwesomePlugin,
+#          contrib = Scrobble, AwesomePlugin,
 #                    ExperimentalTest,AnotherTest
 #
 # Plugins list declaration.
@@ -140,8 +140,8 @@ album_to_add = 1
 # "AwesomePlugin" declared here gets its configuration from the
 # "[AwesomePlugin]" or "[awesomeplugin]" section (case insensitive).
 #
-#internals = 
-plugins = PlaceHolder
+#internal = Crop, History, MpdOptions, Lastfm, RandomFallBack 
+contrib = PlaceHolder
 
 ## HISTORY_DURATION
 # type: integer (in hours)
diff --git a/launch b/launch
index 618e1bcb980ab99dbc14edaff21019ef7613f23e..a4eb951a1f2ba7fb4fd120deb1b7c9a7f87c4d54 100755 (executable)
--- a/launch
+++ b/launch
@@ -22,27 +22,19 @@ from sima.utils.config import ConfMan
 from sima.utils.startopt import StartOpt
 from sima.utils.utils import exception_log
 ##
-# internal plugins
-from sima.plugins.crop import Crop
-from sima.plugins.addhist import History
-from sima.plugins.lastfm import Lastfm
-from sima.plugins.mpd import MpdOptions
-from sima.plugins.randomfallback import RandomFallBack
 
-# official plugins to start
-PLUGINS = (Crop, History, MpdOptions,
-           Lastfm, RandomFallBack)
 
-
-def load_contrib_plugins(sima):
-    """Handles contrib/external plugins
+def load_plugins(sima, source):
+    """Handles internal/external plugins
+        sima:   sima.core.Sima instance
+        source: ['internal', 'contrib']
     """
-    if not sima.config.has_option('sima', 'plugins'):
+    if not sima.config.get('sima', source ):
         return
     logger = logging.getLogger('sima')
-    for plugin in sima.config.get('sima','plugins').split(','):
+    for plugin in sima.config.get('sima', source).split(','):
         plugin = plugin.strip(' \n')
-        module = 'sima.plugins.contrib.{}'.format(plugin.lower())
+        module = 'sima.plugins.{0}.{1}'.format(source, plugin.lower())
         try:
             mod_obj = __import__(module, fromlist=[plugin])
         except ImportError as err:
@@ -53,16 +45,10 @@ def load_contrib_plugins(sima):
         except AttributeError as err:
             logger.error('Failed to load plugin {0} ({1})'.format(plugin, err))
             sima.shutdown()
-        logger.info('Loading contrib plugin: {name} ({doc})'.format(**plugin_obj.info()))
+        logger.info('Loading {0} plugin: {name} ({doc})'.format(source, **plugin_obj.info()))
         sima.register_plugin(plugin_obj)
 
 
-def load_internal_plugins(sima):
-    """Handles contrib/external plugins
-    """
-    raise NotImplementedError
-
-
 def main():
     """Entry point, deal w/ CLI and starts application
     """
@@ -98,12 +84,10 @@ def main():
     sima = core.Sima(config)
 
     #  Loading internal plugins
-    for plugin in PLUGINS:
-        logger.info('Loading internal plugin: {name} ({doc})'.format(**plugin.info()))
-        sima.register_plugin(plugin)
+    load_plugins(sima, 'internal')
 
     #  Loading contrib plugins
-    load_contrib_plugins(sima)
+    load_plugins(sima, 'contrib')
 
     # Run as a daemon
     if config.getboolean('daemon', 'daemon'):
index 1211086bc218a58e5af3e059f740c15aa03087f0..9e1d847b0eafb5ab2aefda820cdd3483031ce5cd 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -51,7 +51,9 @@ setup(name='sima',
       long_description=DESCRIPTION,
       classifiers=classifiers,
       install_requires=['distribute', 'python-musicpd'],
-      packages=['sima','sima.lib', 'sima.utils', 'sima.plugins', 'sima.plugins.contrib'],
+      packages=['sima','sima.lib', 'sima.utils',
+                'sima.plugins.internal',
+                'sima.plugins.contrib'],
       include_package_data=True,
       data_files=data_files,
       scripts=['launch'],
similarity index 94%
rename from sima/plugins/crop.py
rename to sima/plugins/internal/crop.py
index 6bfbf6d7367cae7a559901d9e11cee06e649e47c..8ea889e7810d08c7b88664c8b3bf86b87f087467 100644 (file)
@@ -8,7 +8,7 @@
 # third parties componants
 
 # local import
-from ..lib.plugin import Plugin
+from ...lib.plugin import Plugin
 
 class Crop(Plugin):
     """
similarity index 95%
rename from sima/plugins/addhist.py
rename to sima/plugins/internal/history.py
index e9a36e8ddb53f008be8bee630b60046cd0a18f9e..67414a845f2a756e5f0314f9c1aee5be7b3891a8 100644 (file)
@@ -7,7 +7,7 @@
 # third parties components
 
 # local import
-from ..lib.plugin import Plugin
+from ...lib.plugin import Plugin
 
 class History(Plugin):
     """
similarity index 99%
rename from sima/plugins/lastfm.py
rename to sima/plugins/internal/lastfm.py
index 18f86e4741c213d8ecb2e939c83b72448b55cbd3..b28d34e679482da4e2bccd37cd688b61310fdbba 100644 (file)
@@ -13,9 +13,9 @@ from hashlib import md5
 # third parties componants
 
 # local import
-from ..lib.plugin import Plugin
-from ..lib.simafm import SimaFM, XmlFMHTTPError, XmlFMNotFound, XmlFMError
-from ..lib.track import Track
+from ...lib.plugin import Plugin
+from ...lib.simafm import SimaFM, XmlFMHTTPError, XmlFMNotFound, XmlFMError
+from ...lib.track import Track
 
 
 def cache(func):
similarity index 96%
rename from sima/plugins/mpd.py
rename to sima/plugins/internal/mpdoptions.py
index f7e1e0f5b1a0d874db660834e06ba0b50355a4d4..be47a40f94914aff65d81814042b4f005e6c75dc 100644 (file)
@@ -8,7 +8,7 @@
 # third parties components
 
 # local import
-from ..lib.plugin import Plugin
+from ...lib.plugin import Plugin
 
 
 class MpdOptions(Plugin):
similarity index 95%
rename from sima/plugins/randomfallback.py
rename to sima/plugins/internal/randomfallback.py
index 4951c80141ad0ef4c55fb79ef9d35ba7c13391f6..b8902ec6233e9978ff30987fd6fd5998b12e58c3 100644 (file)
@@ -9,8 +9,8 @@ import random
 # third parties componants
 
 # local import
-from ..lib.plugin import Plugin
-from ..lib.track import Track
+from ...lib.plugin import Plugin
+from ...lib.track import Track
 
 
 class RandomFallBack(Plugin):
index 15c1a3dd2ca8c54f5d5769d5bf5fcabac7fc3167..5d62505a972d0f9857d27ac55c53c00559e030b4 100644 (file)
@@ -45,6 +45,8 @@ DEFAULT_CONF = {
             #'password': "",
             'port': "6600"},
         'sima': {
+            'internal': "Crop, History, MpdOptions, Lastfm, RandomFallBack",
+            'contrib': "",
             'user_db': "false",
             'history_duration': "8",
             'queue_length': "1",