1
2 """
3
4 @author: Fabio Erculiani <lxnay@sabayonlinux.org>
5 @contact: lxnay@sabayonlinux.org
6 @copyright: Fabio Erculiani
7 @license: GPL-2
8
9 B{Entropy Source Package Manager Plugins factory module}.
10
11 """
12 from entropy.const import etpConst
13 from entropy.core import EntropyPluginFactory
14 from entropy.core.settings.base import SystemSettings
15 from entropy.i18n import _
16 from entropy.spm.plugins.skel import SpmPlugin
17 import entropy.spm.plugins.interfaces as plugs
18
19 _settings = SystemSettings()
20 _USER_PLUG = _settings['system'].get('spm_backend')
21
22 FACTORY = EntropyPluginFactory(SpmPlugin, plugs,
23 default_plugin_name = _USER_PLUG)
24
25 get_available_plugins = FACTORY.get_available_plugins
26
28 """
29 Return default Source Package Manager plugin class.
30
31 @return: default Source Package Manager plugin class
32 @raise SystemError: if no default plugin class has been specified.
33 This usually means a programming error.
34 """
35 fallback_used = False
36 myplugs = get_available_plugins()
37 if _USER_PLUG is not None:
38 user_plugin = myplugs.get(_USER_PLUG)
39 if user_plugin is not None:
40 return user_plugin
41 fallback_used = True
42
43 for plug_id in sorted(myplugs):
44 plug_class = myplugs[plug_id]
45 if plug_class.IS_DEFAULT:
46 if fallback_used:
47 import warnings
48 warnings.warn("%s: %s" % (
49 "User configured Source Package Manager Plugin not available, "
50 "using fallback", plug_id,))
51 return plug_class
52
53 raise SystemError("no SPM default plugin configured")
54
56 """
57 Return the currently configured Entropy SPM interface instance.
58
59 @param output_interface: Entropy Output Interface instance
60 @type output_interface: entropy.output.TextInterface based instance
61 @return: currently selected SPM interface
62 @rtype: entropy.spm.plugins.skel.SpmPlugin based instance
63 """
64 spm_class = get_default_class()
65 return spm_class(output_interface)
66