Package entropy :: Package db :: Module plugin_store

Source Code for Module entropy.db.plugin_store

  1  # -*- coding: utf-8 -*- 
  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 Framework repository database plugin store module}. 
 10   
 11  """ 
 12  from entropy.core import EntropyPluginStore 
 13  from entropy.db.skel import EntropyRepositoryPlugin 
14 15 -class EntropyRepositoryPluginStore(EntropyPluginStore):
16 17 """ 18 EntropyRepository plugin interface. This is the EntropyRepository part 19 aimed to handle connected plugins. 20 """ 21 22 _PERMANENT_PLUGINS = {} 23
24 - def __init__(self):
25 EntropyPluginStore.__init__(self) 26 permanent_plugs = EntropyRepositoryPluginStore.get_permanent_plugins() 27 for plug in permanent_plugs.values(): 28 plug.add_plugin_hook(self)
29
30 - def add_plugin(self, entropy_repository_plugin):
31 """ 32 Overloaded from EntropyPluginStore, adds support for hooks execution. 33 """ 34 inst = entropy_repository_plugin 35 if not isinstance(inst, EntropyRepositoryPlugin): 36 raise AttributeError("EntropyRepositoryPluginStore: " + \ 37 "expected valid EntropyRepositoryPlugin instance") 38 EntropyPluginStore.add_plugin(self, inst.get_id(), inst) 39 inst.add_plugin_hook(self)
40
41 - def remove_plugin(self, plugin_id):
42 """ 43 Overloaded from EntropyPluginStore, adds support for hooks execution. 44 """ 45 plugins = self.get_plugins() 46 plug_inst = plugins.get(plugin_id) 47 if plug_inst is not None: 48 plug_inst.remove_plugin_hook(self) 49 return EntropyPluginStore.remove_plugin(self, plugin_id)
50 51 @staticmethod
52 - def add_permanent_plugin(entropy_repository_plugin):
53 """ 54 Add EntropyRepository permanent plugin. This plugin object will be 55 used across all the instantiated EntropyRepositoryPluginStore classes. 56 Each time a new instance is created, add_plugin_hook will be executed 57 for all the permanent plugins. 58 59 @param entropy_repository_plugin: EntropyRepositoryPlugin instance 60 @type entropy_repository_plugin: EntropyRepositoryPlugin instance 61 """ 62 inst = entropy_repository_plugin 63 if not isinstance(inst, EntropyRepositoryPlugin): 64 raise AttributeError("EntropyRepositoryPluginStore: " + \ 65 "expected valid EntropyRepositoryPlugin instance") 66 EntropyRepositoryPluginStore._PERMANENT_PLUGINS[inst.get_id()] = inst
67 68 @staticmethod
69 - def remove_permanent_plugin(plugin_id):
70 """ 71 Remove EntropyRepository permanent plugin. This plugin object will be 72 removed across all the EntropyRepository instances around. 73 Please note: due to the fact that there are no destructors around, 74 the "remove_plugin_hook" callback won't be executed when calling this 75 static method. 76 77 @param plugin_id: EntropyRepositoryPlugin identifier 78 @type plugin_id: string 79 @raise KeyError: in case of unavailable plugin identifier 80 """ 81 del EntropyRepositoryPluginStore._PERMANENT_PLUGINS[plugin_id]
82 83 @staticmethod
85 """ 86 Return EntropyRepositoryStore installed permanent plugins. 87 88 @return: copy of internal permanent plugins dict 89 @rtype: dict 90 """ 91 return EntropyRepositoryPluginStore._PERMANENT_PLUGINS.copy()
92
93 - def get_plugins(self):
94 """ 95 Overloaded from EntropyPluginStore, adds support for permanent plugins. 96 """ 97 plugins = EntropyPluginStore.get_plugins(self) 98 plugins.update(EntropyRepositoryPluginStore.get_permanent_plugins()) 99 return plugins
100
101 - def get_plugins_metadata(self):
102 """ 103 Return EntropyRepositoryPluginStore registered plugins metadata. 104 105 @return: plugins metadata 106 @rtype: dict 107 """ 108 plugins = self.get_plugins() 109 meta = {} 110 for plugin_id in plugins: 111 meta.update(plugins[plugin_id].get_metadata()) 112 return meta
113
114 - def get_plugin_metadata(self, plugin_id, key):
115 """ 116 Return EntropyRepositoryPlugin metadata value referenced by "key". 117 118 @param plugin_id. EntropyRepositoryPlugin identifier 119 @type plugin_id: string 120 @param key: EntropyRepositoryPlugin metadatum identifier 121 @type key: string 122 @return: metadatum value 123 @rtype: any Python object 124 @raise KeyError: if provided key or plugin_id is not available 125 """ 126 plugins = self.get_plugins() 127 return plugins[plugin_id][key]
128
129 - def set_plugin_metadata(self, plugin_id, key, value):
130 """ 131 Set EntropyRepositoryPlugin stored metadata. 132 133 @param plugin_id. EntropyRepositoryPlugin identifier 134 @type plugin_id: string 135 @param key: EntropyRepositoryPlugin metadatum identifier 136 @type key: string 137 @param value: value to set 138 @type value: any valid Python object 139 @raise KeyError: if plugin_id is not available 140 """ 141 plugins = self.get_plugins() 142 meta = plugins[plugin_id].get_metadata() 143 meta[key] = value
144