wic: move PluginMgr class to pluginbase

As PluginMgr class contains only one method it's
better to move it to pluginbase to have all plugin
related APIs in one module.

(From OE-Core rev: 244585b369ecc0019002ca51bf7f8fd506234462)

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ed Bartosh 2017-02-15 21:24:38 +02:00 committed by Richard Purdie
parent 93b3eb37ff
commit 0c0ed61992
6 changed files with 48 additions and 74 deletions

View File

@ -32,7 +32,7 @@ import logging
import os
from wic import WicError
from wic.plugin import PluginMgr
from wic.pluginbase import PluginMgr
from wic.utils.misc import get_bitbake_var
logger = logging.getLogger('wic')

View File

@ -28,7 +28,7 @@
import subprocess
import logging
from wic.plugin import PluginMgr, PLUGIN_TYPES
from wic.pluginbase import PluginMgr, PLUGIN_TYPES
logger = logging.getLogger('wic')

View File

@ -30,7 +30,7 @@ import tempfile
from wic import WicError
from wic.utils.misc import exec_cmd, exec_native_cmd, get_bitbake_var
from wic.plugin import PluginMgr
from wic.pluginbase import PluginMgr
logger = logging.getLogger('wic')

View File

@ -1,66 +0,0 @@
#!/usr/bin/env 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 logging
from importlib.machinery import SourceFileLoader
from wic import pluginbase, WicError
from wic.utils.misc import get_bitbake_var
PLUGIN_TYPES = ["imager", "source"]
SCRIPTS_PLUGIN_DIR = "scripts/lib/wic/plugins"
logger = logging.getLogger('wic')
class PluginMgr:
_plugin_dirs = []
_plugins = {}
@classmethod
def get_plugins(cls, ptype):
"""Get dictionary of <plugin_name>:<class> pairs."""
if ptype not in PLUGIN_TYPES:
raise WicError('%s is not valid plugin type' % ptype)
if ptype in cls._plugins:
return cls._plugins[ptype]
# collect plugin directories
if not cls._plugin_dirs:
cls._plugin_dirs = [os.path.join(os.path.dirname(__file__), 'plugins')]
layers = get_bitbake_var("BBLAYERS") or ''
for layer_path in layers.split():
path = os.path.join(layer_path, SCRIPTS_PLUGIN_DIR)
path = os.path.abspath(os.path.expanduser(path))
if path not in cls._plugin_dirs and os.path.isdir(path):
cls._plugin_dirs.insert(0, path)
# load plugins
for pdir in cls._plugin_dirs:
ppath = os.path.join(pdir, ptype)
if os.path.isdir(ppath):
for fname in os.listdir(ppath):
if fname.endswith('.py'):
mname = fname[:-3]
mpath = os.path.join(ppath, fname)
SourceFileLoader(mname, mpath).load_module()
cls._plugins[ptype] = pluginbase.get_plugins(ptype)
return cls._plugins[ptype]

View File

@ -15,16 +15,59 @@
# with this program; if not, write to the Free Software Foundation, Inc., 59
# Temple Place - Suite 330, Boston, MA 02111-1307, USA.
__all__ = ['ImagerPlugin', 'SourcePlugin', 'get_plugins']
__all__ = ['ImagerPlugin', 'SourcePlugin']
import os
import logging
from collections import defaultdict
from importlib.machinery import SourceFileLoader
from wic import WicError
from wic.utils.misc import get_bitbake_var
PLUGIN_TYPES = ["imager", "source"]
SCRIPTS_PLUGIN_DIR = "scripts/lib/wic/plugins"
logger = logging.getLogger('wic')
class PluginMgr:
_plugin_dirs = []
_plugins = {}
@classmethod
def get_plugins(cls, ptype):
"""Get dictionary of <plugin_name>:<class> pairs."""
if ptype not in PLUGIN_TYPES:
raise WicError('%s is not valid plugin type' % ptype)
if ptype in cls._plugins:
return cls._plugins[ptype]
# collect plugin directories
if not cls._plugin_dirs:
cls._plugin_dirs = [os.path.join(os.path.dirname(__file__), 'plugins')]
layers = get_bitbake_var("BBLAYERS") or ''
for layer_path in layers.split():
path = os.path.join(layer_path, SCRIPTS_PLUGIN_DIR)
path = os.path.abspath(os.path.expanduser(path))
if path not in cls._plugin_dirs and os.path.isdir(path):
cls._plugin_dirs.insert(0, path)
# load plugins
for pdir in cls._plugin_dirs:
ppath = os.path.join(pdir, ptype)
if os.path.isdir(ppath):
for fname in os.listdir(ppath):
if fname.endswith('.py'):
mname = fname[:-3]
mpath = os.path.join(ppath, fname)
SourceFileLoader(mname, mpath).load_module()
cls._plugins[ptype] = PluginMeta.plugins.get(ptype)
return cls._plugins[ptype]
class PluginMeta(type):
plugins = defaultdict(dict)
def __new__(cls, name, bases, attrs):
@ -97,5 +140,3 @@ class SourcePlugin(metaclass=PluginMeta):
"""
logger.debug("SourcePlugin: do_prepare_partition: part: %s", part)
def get_plugins(typen):
return PluginMeta.plugins.get(typen)

View File

@ -35,8 +35,7 @@ from time import strftime
from wic import WicError
from wic.filemap import sparse_copy
from wic.ksparser import KickStart, KickStartError
from wic.plugin import PluginMgr
from wic.pluginbase import ImagerPlugin
from wic.pluginbase import PluginMgr, ImagerPlugin
from wic.utils.misc import get_bitbake_var, exec_cmd, exec_native_cmd
logger = logging.getLogger('wic')