Package libxyz :: Package core :: Package plugins :: Module base |
[hide private]
[frames] | no frames]

# Source Code for Module libxyz.core.plugins.base

      1  #-*- coding: utf8 -*
      2  #
      3  # Max E. Kuznecov ~syhpoon <syhpoon@syhpoon.name> 2008
      4  #
      5  # This file is part of XYZCommander.
      6  # XYZCommander is free software: you can redistribute it and/or modify
      7  # it under the terms of the GNU Lesser Public License as published by
      8  # the Free Software Foundation, either version 3 of the License, or
      9  # (at your option) any later version.
     10  # XYZCommander is distributed in the hope that it will be useful,
     11  # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     13  # GNU Lesser Public License for more details.
     14  # You should have received a copy of the GNU Lesser Public License
     15  # along with XYZCommander. If not, see <http://www.gnu.org/licenses/>.
     16
     17  from libxyz.exceptions import PluginError
     18  from libxyz.core.plugins import Namespace
     19
     20 -class BasePlugin(object):
     21      """
     22      Parent class for all xyz-plugins
     23      """
     24
     25      # NAME: Plugin name
     26      NAME = None
     27
     28      # AUTHOR: Author name
     29      AUTHOR = None
     30
     31      # VERSION: Plugin version
     32      VERSION = None
     33
     34      # Brief one line description
     35      BRIEF_DESCRIPTION = None
     36
     37      # Full plugin description
     38      FULL_DESCRIPTION = None
     39
     40      # NAMESPACE: Plugin namespace. For detailed information about
     41      #            namespaces see Plugins chapter of XYZCommander user manual.
     42      NAMESPACE = None
     43
     44      # MIN_XYZ_VERSION: Minimal XYZCommander version
     45      #                  the plugin is compatible with
     46      MIN_XYZ_VERSION = None
     47
     48      # Plugin documentation
     49      DOC = None
     50
     51      # Plugin home-page
     52      HOMEPAGE = None
     53
     54      # Events provided by plugin
     55      # List of (event_name, event_desc) tuples
     56      EVENTS = None
     57
     58 -    def __init__(self, xyz, *args, **kwargs):
     59          self.xyz = xyz
     60
     61          # Integer module version (for possible comparison)
     62          self.intversion = 0
     63
     64          # Public methods dictionary
     65          # Accessed as plugin attribute (plugin.method())
     66          self.public = {}
     67
     68          # Public data dictionary
     69          # Accessed as plugin items (plugin["data"])
     70          self.public_data = {}
     71
     72          self.ns = Namespace(u":".join(("", self.NAMESPACE, self.NAME)))
     73
     74          try:
     75              self.conf = self.xyz.conf[u"plugins"][self.ns.pfull]
     76          except KeyError:
     77              self.conf = {}
     78
     79      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     80
     81 -    def __getattr__(self, method):
     82          """
     83          Provide transparent access to public methods
     84          """
     85
     86          try:
     87              return self.public[method]
     88          except KeyError:
     89              raise AttributeError(_(u"%s is not a public method" % method))
     90
     91      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     92
     93 -    def __getitem__(self, obj):
     94          """
     95          Provide transparent access to public data
     96          """
     97
     98          try:
     99              return self.public_data[obj]
    100          except KeyError:
    101              raise AttributeError(_(u"%s is not a public data object " % obj))
    102
    103      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    104
    105 -    def prepare(self, *args, **kwargs):
    106          """
    107          Plugin constructor
    108          """
    109
    110          pass
    111
    112      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    113
    114 -    def finalize(self, *args, **kwargs):
    115          """
    116          Plugin destructor
    117          """
    118
    119          pass
    120
    121      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    122
    123 -    def export(self, func):
    124          """
    125          Export method
    126          """
    127
    128          _name = func.im_func.__name__
    129
    130          func.im_func.ns = u"%s:%s" % (self.ns.full, _name)
    131
    132          self.public[_name] = func
    133
    134      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    135
    136 -    def export_data(self, name, data):
    137          """
    138          Export data
    139          """
    140
    141          self.public_data[name] = data
    142
    143      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    144
    145 -    def fire_event(self, event, *args):
    146          """
    147          Fire event
    148          """
    149
    150          self.xyz.hm.dispatch(self.event_name(event), *args)
    151
    152      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    153
    154 -    def event_name(self, short):
    155          """
    156          Return full event name
    157          """
    158
    159          return "event%s:%s" % (self.ns.pfull, short)
    160