From 7a6185756ab516083f7339ebb02242cc41860e98 Mon Sep 17 00:00:00 2001 From: Nikita Zubkov Date: Wed, 27 Apr 2016 17:24:14 +0300 Subject: [PATCH] Static modules loading Now all active modules should be imported explicitly. Also rename all modules classes and remove priority. Change-Id: I9114165f15bf1b4f82bc9a60ae2fd4719d80fa36 Closes-Bug: #1576544 --- fuelmenu/fuelmenu.py | 50 +++++------------------------- fuelmenu/modules/__init__.py | 48 ++++++++++++++++++++++++++++ fuelmenu/modules/bootstrapimg.py | 3 +- fuelmenu/modules/cobblerconf.py | 3 +- fuelmenu/modules/dnsandhostname.py | 3 +- fuelmenu/modules/feature_groups.py | 3 +- fuelmenu/modules/fueluser.py | 3 +- fuelmenu/modules/interfaces.py | 3 +- fuelmenu/modules/ntpsetup.py | 3 +- fuelmenu/modules/restore.py | 3 +- fuelmenu/modules/rootpw.py | 3 +- fuelmenu/modules/saveandquit.py | 3 +- fuelmenu/modules/security.py | 3 +- fuelmenu/modules/servicepws.py | 3 +- fuelmenu/modules/shell.py | 3 +- 15 files changed, 68 insertions(+), 69 deletions(-) create mode 100644 fuelmenu/modules/__init__.py diff --git a/fuelmenu/fuelmenu.py b/fuelmenu/fuelmenu.py index 04256bf..d946825 100755 --- a/fuelmenu/fuelmenu.py +++ b/fuelmenu/fuelmenu.py @@ -22,11 +22,11 @@ from fuelmenu.common import timeout from fuelmenu.common import urwidwrapper as widget from fuelmenu.common import utils from fuelmenu import consts +from fuelmenu import modules from fuelmenu import settings as settings_module import logging -import operator from optparse import OptionParser import os import signal @@ -42,44 +42,6 @@ logging.basicConfig(filename=consts.LOGFILE, log = logging.getLogger('fuelmenu.loader') -class Loader(object): - - def __init__(self, parent): - self.modlist = [] - self.choices = [] - self.child = None - self.children = [] - self.childpage = None - self.parent = parent - - def load_modules(self, module_dir): - if module_dir not in sys.path: - sys.path.append(module_dir) - - modules = [os.path.splitext(f)[0] for f in os.listdir(module_dir) - if f.endswith('.py')] - - for module in modules: - log.info('loading module %s' % module) - try: - imported = __import__(module) - pass - except ImportError as e: - log.error('module could not be imported: %s' % e) - continue - - clsobj = getattr(imported, module, None) - modobj = clsobj(self.parent) - - # add the module to the list - self.modlist.append(modobj) - # sort modules - self.modlist.sort(key=operator.attrgetter('priority')) - for module in self.modlist: - self.choices.append(module.name) - return (self.modlist, self.choices) - - class FuelSetup(object): def __init__(self): @@ -172,10 +134,12 @@ class FuelSetup(object): self.header = urwid.AttrWrap(urwid.Text(text_header), 'header') self.footer = urwid.AttrWrap(urwid.Text(text_footer), 'footer') - # Prepare submodules - loader = Loader(self) - moduledir = "%s/modules" % (os.path.dirname(__file__)) - self.children, self.choices = loader.load_modules(module_dir=moduledir) + self.children = [] + for clsobj in modules.__all__: + modobj = clsobj(self) + self.children.append(modobj) + + self.choices = [m.name for m in self.children] if len(self.children) == 0: import sys diff --git a/fuelmenu/modules/__init__.py b/fuelmenu/modules/__init__.py new file mode 100644 index 0000000..3384566 --- /dev/null +++ b/fuelmenu/modules/__init__.py @@ -0,0 +1,48 @@ +# coding: utf-8 + +# Copyright 2016 Mirantis, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from fuelmenu.modules.bootstrapimg import BootstrapImage +from fuelmenu.modules.cobblerconf import CobblerConfig +from fuelmenu.modules.dnsandhostname import DnsAndHostname +from fuelmenu.modules.feature_groups import FeatureGroups +from fuelmenu.modules.fueluser import FuelUser +from fuelmenu.modules.interfaces import Interfaces +from fuelmenu.modules.ntpsetup import NtpSetup +from fuelmenu.modules.restore import Restore +from fuelmenu.modules.rootpw import RootPassword +from fuelmenu.modules.saveandquit import SaveAndQuit +from fuelmenu.modules.security import Security +from fuelmenu.modules.servicepws import ServicePasswords +from fuelmenu.modules.shell import Shell + + +# Note that order matters. +# objects loading and settings dumping will be made in this order +__all__ = [ + FuelUser, + Interfaces, + Security, + CobblerConfig, + DnsAndHostname, + BootstrapImage, + NtpSetup, + RootPassword, + FeatureGroups, + Shell, + Restore, + SaveAndQuit, + ServicePasswords, +] diff --git a/fuelmenu/modules/bootstrapimg.py b/fuelmenu/modules/bootstrapimg.py index ec94a20..8324c61 100644 --- a/fuelmenu/modules/bootstrapimg.py +++ b/fuelmenu/modules/bootstrapimg.py @@ -42,10 +42,9 @@ BOOTSTRAP_SKIP_BUILD_KEY = "BOOTSTRAP/skip_default_img_build" ADD_REPO_BUTTON_KEY = 'add_repo_button' -class bootstrapimg(urwid.WidgetWrap): +class BootstrapImage(urwid.WidgetWrap): def __init__(self, parent): self.name = "Bootstrap Image" - self.priority = 55 self.visible = True self.parent = parent diff --git a/fuelmenu/modules/cobblerconf.py b/fuelmenu/modules/cobblerconf.py index 7528fd0..7a72a3c 100644 --- a/fuelmenu/modules/cobblerconf.py +++ b/fuelmenu/modules/cobblerconf.py @@ -29,10 +29,9 @@ log = logging.getLogger('fuelmenu.pxe_setup') blank = urwid.Divider() -class cobblerconf(urwid.WidgetWrap): +class CobblerConfig(urwid.WidgetWrap): def __init__(self, parent): self.name = "PXE Setup" - self.priority = 20 self.visible = True self.netsettings = dict() self.parent = parent diff --git a/fuelmenu/modules/dnsandhostname.py b/fuelmenu/modules/dnsandhostname.py index 34a0898..f8c7ce7 100644 --- a/fuelmenu/modules/dnsandhostname.py +++ b/fuelmenu/modules/dnsandhostname.py @@ -32,10 +32,9 @@ log = logging.getLogger('fuelmenu.mirrors') blank = urwid.Divider() -class dnsandhostname(urwid.WidgetWrap): +class DnsAndHostname(urwid.WidgetWrap): def __init__(self, parent): self.name = "DNS & Hostname" - self.priority = 50 self.visible = True self.netsettings = dict() self.getNetwork() diff --git a/fuelmenu/modules/feature_groups.py b/fuelmenu/modules/feature_groups.py index ce07d7b..26fc390 100644 --- a/fuelmenu/modules/feature_groups.py +++ b/fuelmenu/modules/feature_groups.py @@ -24,10 +24,9 @@ from fuelmenu.common.modulehelper import WidgetType log = logging.getLogger(__name__) -class feature_groups(urwid.WidgetWrap): +class FeatureGroups(urwid.WidgetWrap): def __init__(self, parent): self.name = "Feature groups" - self.priority = 70 self.visible = True self.parent = parent diff --git a/fuelmenu/modules/fueluser.py b/fuelmenu/modules/fueluser.py index 7eaedbd..e6f804e 100644 --- a/fuelmenu/modules/fueluser.py +++ b/fuelmenu/modules/fueluser.py @@ -24,10 +24,9 @@ log = logging.getLogger('fuelmenu.rootpw') blank = urwid.Divider() -class fueluser(urwid.WidgetWrap): +class FuelUser(urwid.WidgetWrap): def __init__(self, parent): self.name = "Fuel User" - self.priority = 1 self.visible = True self.parent = parent # UI text diff --git a/fuelmenu/modules/interfaces.py b/fuelmenu/modules/interfaces.py index 3d6f86d..6c8eeb2 100644 --- a/fuelmenu/modules/interfaces.py +++ b/fuelmenu/modules/interfaces.py @@ -35,10 +35,9 @@ blank = urwid.Divider() # Need to define fields in order so it will render correctly -class interfaces(urwid.WidgetWrap): +class Interfaces(urwid.WidgetWrap): def __init__(self, parent): self.name = "Network Setup" - self.priority = 5 self.visible = True self.netsettings = dict() self.parent = parent diff --git a/fuelmenu/modules/ntpsetup.py b/fuelmenu/modules/ntpsetup.py index 6c794ea..3f2b25d 100644 --- a/fuelmenu/modules/ntpsetup.py +++ b/fuelmenu/modules/ntpsetup.py @@ -25,10 +25,9 @@ log = logging.getLogger('fuelmenu.mirrors') blank = urwid.Divider() -class ntpsetup(urwid.WidgetWrap): +class NtpSetup(urwid.WidgetWrap): def __init__(self, parent): self.name = "Time Sync" - self.priority = 60 self.visible = True self.parent = parent diff --git a/fuelmenu/modules/restore.py b/fuelmenu/modules/restore.py index 9a48f00..d8b5678 100644 --- a/fuelmenu/modules/restore.py +++ b/fuelmenu/modules/restore.py @@ -64,10 +64,9 @@ KEYS_TO_RESTORE = [ ] -class restore(urwid.WidgetWrap): +class Restore(urwid.WidgetWrap): def __init__(self, parent): self.name = "Restore settings" - self.priority = 98 self.visible = True self.parent = parent self.deployment = "pre" diff --git a/fuelmenu/modules/rootpw.py b/fuelmenu/modules/rootpw.py index 3381910..f8644c5 100644 --- a/fuelmenu/modules/rootpw.py +++ b/fuelmenu/modules/rootpw.py @@ -24,10 +24,9 @@ log = logging.getLogger('fuelmenu.rootpw') blank = urwid.Divider() -class rootpw(urwid.WidgetWrap): +class RootPassword(urwid.WidgetWrap): def __init__(self, parent): self.name = "Root Password" - self.priority = 60 self.visible = True self.parent = parent # UI text diff --git a/fuelmenu/modules/saveandquit.py b/fuelmenu/modules/saveandquit.py index 3c2cfac..b7945ce 100644 --- a/fuelmenu/modules/saveandquit.py +++ b/fuelmenu/modules/saveandquit.py @@ -23,10 +23,9 @@ import urwid.web_display blank = urwid.Divider() -class saveandquit(object): +class SaveAndQuit(object): def __init__(self, parent): self.name = "Quit Setup" - self.priority = 99 self.visible = True self.parent = parent self.screen = None diff --git a/fuelmenu/modules/security.py b/fuelmenu/modules/security.py index bebcb5c..ce49aad 100644 --- a/fuelmenu/modules/security.py +++ b/fuelmenu/modules/security.py @@ -26,10 +26,9 @@ log = logging.getLogger('fuelmenu.security') SSH_NETWORK = 'ADMIN_NETWORK/ssh_network' -class security(urwid.WidgetWrap): +class Security(urwid.WidgetWrap): def __init__(self, parent): self.name = "Security Setup" - self.priority = 6 self.visible = True self.parent = parent self.screen = None diff --git a/fuelmenu/modules/servicepws.py b/fuelmenu/modules/servicepws.py index ab92b4a..95095a5 100644 --- a/fuelmenu/modules/servicepws.py +++ b/fuelmenu/modules/servicepws.py @@ -23,10 +23,9 @@ log = logging.getLogger('fuelmenu.servicepws') blank = urwid.Divider() -class servicepws(urwid.WidgetWrap): +class ServicePasswords(urwid.WidgetWrap): def __init__(self, parent): self.name = "Service Passwords" - self.priority = 99 self.visible = False self.parent = parent # UI text diff --git a/fuelmenu/modules/shell.py b/fuelmenu/modules/shell.py index e56134a..e322f0f 100644 --- a/fuelmenu/modules/shell.py +++ b/fuelmenu/modules/shell.py @@ -23,10 +23,9 @@ import urwid.web_display blank = urwid.Divider() -class shell(object): +class Shell(object): def __init__(self, parent): self.name = "Shell Login" - self.priority = 90 self.visible = True self.parent = parent self.screen = None