diff options
Diffstat (limited to 'scripts/lib/mic/pluginbase.py')
-rw-r--r-- | scripts/lib/mic/pluginbase.py | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/scripts/lib/mic/pluginbase.py b/scripts/lib/mic/pluginbase.py new file mode 100644 index 0000000000..6ac195b42d --- /dev/null +++ b/scripts/lib/mic/pluginbase.py @@ -0,0 +1,101 @@ +#!/usr/bin/python -tt +# +# Copyright (c) 2011 Intel, Inc. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; version 2 of the License +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., 59 +# Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +import os +import shutil +from mic import msger +from mic.utils import errors + +class _Plugin(object): + class __metaclass__(type): + def __init__(cls, name, bases, attrs): + if not hasattr(cls, 'plugins'): + cls.plugins = {} + + elif 'mic_plugin_type' in attrs: + if attrs['mic_plugin_type'] not in cls.plugins: + cls.plugins[attrs['mic_plugin_type']] = {} + + elif hasattr(cls, 'mic_plugin_type') and 'name' in attrs: + cls.plugins[cls.mic_plugin_type][attrs['name']] = cls + + def show_plugins(cls): + for cls in cls.plugins[cls.mic_plugin_type]: + print cls + + def get_plugins(cls): + return cls.plugins + +class ImagerPlugin(_Plugin): + mic_plugin_type = "imager" + + @classmethod + def check_image_exists(self, destdir, apacking=None, + images=(), + release=None): + + # if it's a packing file, reset images + if apacking: + images = [apacking] + + # release option will override images + if release is not None: + images = [os.path.basename(destdir.rstrip('/'))] + destdir = os.path.dirname(destdir.rstrip('/')) + + for name in images: + if not name: + continue + + image = os.path.join(destdir, name) + if not os.path.exists(image): + continue + + if msger.ask("Target image/dir: %s already exists, " + "clean up and continue?" % image): + if os.path.isdir(image): + shutil.rmtree(image) + else: + os.unlink(image) + else: + raise errors.Abort("Cancled") + + def do_create(self): + pass + + def do_chroot(self): + pass + +class BackendPlugin(_Plugin): + mic_plugin_type="backend" + + # suppress the verbose rpm warnings + if msger.get_loglevel() != 'debug': + import rpm + rpm.setVerbosity(rpm.RPMLOG_ERR) + + def addRepository(self): + pass + +def get_plugins(typen): + ps = ImagerPlugin.get_plugins() + if typen in ps: + return ps[typen] + else: + return None + +__all__ = ['ImagerPlugin', 'BackendPlugin', 'get_plugins'] |