Yaniv Bronhaim has uploaded a new change for review. Change subject: configurator doesn't load pyc files under configurators folder ......................................................................
configurator doesn't load pyc files under configurators folder configurator loads dynamically modules from configurators folder. It searches for py files only. In ovirt-node installation we install only pyc files and this caused us to miss all configurators modules in ovirt-node installation. The listmodules function now returns a set to avoid duplicate module names. Change-Id: Ia529de0069e2f4ec168a4b9df82ba62c56d66730 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1259247 Signed-off-by: Yaniv Bronhaim <[email protected]> --- M lib/vdsm/tool/configurator.py M tests/toolTests.py 2 files changed, 27 insertions(+), 13 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/11/46011/1 diff --git a/lib/vdsm/tool/configurator.py b/lib/vdsm/tool/configurator.py index 5ed905d..20924ba 100644 --- a/lib/vdsm/tool/configurator.py +++ b/lib/vdsm/tool/configurator.py @@ -29,9 +29,9 @@ from collections import deque -from glob import iglob import argparse import os +import re import sys import traceback @@ -50,21 +50,18 @@ return __import__(pkg, globals(), locals(), [mname], level=0) -def _listmodules(pkg): +def _listmodules(path): """Return base file names for all modules under pkg.""" - path = os.path.join(os.path.abspath(pkg.__path__[0]), '') - getmname = lambda x: os.path.basename(os.path.splitext(x)[0]) - filter_ = lambda x: not x.startswith('_') - - return [ - getmname(module) - for module in iglob("%s*.py" % path) - if filter_(getmname(module)) - ] + is_module = re.compile(r"^[^_].*\.pyc?$").search + return set( + os.path.splitext(name)[0] + for name in os.listdir(path) + if is_module(name) + ) _CONFIGURATORS = {} -for module in _listmodules(configurators): +for module in _listmodules(configurators.__path__[0]): _CONFIGURATORS[module] = _import_module(configurators, module) if not hasattr(_CONFIGURATORS[module], 'name'): setattr(_CONFIGURATORS[module], 'name', module) diff --git a/tests/toolTests.py b/tests/toolTests.py index c8c7d1e..0c9666d 100644 --- a/tests/toolTests.py +++ b/tests/toolTests.py @@ -30,7 +30,8 @@ from vdsm.tool import upgrade from vdsm import utils import monkeypatch -from testlib import VdsmTestCase +from testlib import (VdsmTestCase, namedTemporaryDir, permutations, + expandPermutations) from testValidation import ValidateRunningAsRoot from unittest import TestCase import tempfile @@ -83,8 +84,24 @@ dict((m.name, m) for m in mockConfigurers)) +@expandPermutations class PatchConfiguratorsTests(VdsmTestCase): + @permutations([(('a.py', 'b.py'), ('a', 'b')), + (('a.py', 'b.py', 'a.pyc', 'a.pyioas'), ('a', 'b')), + (('a.py', 'b.py', 'a.pyc', 'a.py'), ('a', 'b')), + (('a.py', 'b.py', 'a.pyc', '_my.py'), ('a', 'b'))]) + def testListConfiguratorsModulesFolder(self, files, expected_modules): + expected = set(expected_modules) + with namedTemporaryDir() as path: + for f in files: + utils.touchFile(os.path.join(path, f)) + result = configurator._listmodules(path) + self.assertEquals( + result, + expected, + ) + def testPatch(self): self.configurator = MockModuleConfigurator('a') self.function_was_run = False -- To view, visit https://gerrit.ovirt.org/46011 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia529de0069e2f4ec168a4b9df82ba62c56d66730 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: ovirt-3.6 Gerrit-Owner: Yaniv Bronhaim <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
