From 7d95670209a249860ad49763a77285f49d649790 Mon Sep 17 00:00:00 2001 From: Mike Hiretsky Date: Wed, 27 Jul 2011 15:21:27 +0400 Subject: [PATCH] Refactoring and improvement. Class process: add ability specify LANG by lang param. Rewrite runOsCommand, genpassword, getpathenv. Fix readFile function. Add function selectVar to varsShare for selecting variables from matrix. Add function getKernelUid by device. Rewrite cl_kernel_uid fill method by using getKernelUid. --- pym/cl_fill.py | 14 +------------- pym/cl_utils.py | 42 +++++++++++++++--------------------------- pym/cl_vars_share.py | 22 +++++++++++++++++++++- 3 files changed, 37 insertions(+), 41 deletions(-) diff --git a/pym/cl_fill.py b/pym/cl_fill.py index 9068caf..68cf24d 100644 --- a/pym/cl_fill.py +++ b/pym/cl_fill.py @@ -558,19 +558,7 @@ class fillVars(varsShare): def get_cl_kernel_uid(self): """Get UID of symlink kernel, initramfs and System.map""" - uuidpath = '/dev/disk/by-uuid' - if not os.access(uuidpath,os.R_OK): - return "" - uuidDevs = filter(path.islink,map(lambda x: path.join(uuidpath,x), - os.listdir(uuidpath))) - mapDevUuid = dict(map(lambda x:(path.normpath(path.join(uuidpath, - os.readlink(x))), - path.basename(x)), - uuidDevs)) - if self.Get('os_root_dev') in mapDevUuid: - return mapDevUuid[self.Get('os_root_dev')][:8] - else: - return "" + return self.getKernelUid(self.Get('os_root_dev')) def get_cl_chroot_status(self): """Detect chroot mode by mtab content""" diff --git a/pym/cl_utils.py b/pym/cl_utils.py index 0d72762..7d2e281 100644 --- a/pym/cl_utils.py +++ b/pym/cl_utils.py @@ -221,7 +221,10 @@ class process: else: stdin=kwarg["stdin"].getStdout self.stdout = kwarg.get("stdout",PIPE) - self.envdict = kwarg.get("envdict",None) + self.envdict = kwarg.get("envdict",{}) + if "lang" in kwarg: + self.envdict["LANG"] = kwarg.get('lang') + self.langc = "langc" in kwarg self.stderr = kwarg.get("stderr",PIPE) self.command = [command] + list(params) @@ -364,7 +367,7 @@ class processProgress(process): pass def runOsCommand(cmd,in_str=None, env_dict=None): - """Выполняет внешнюю программу + """Run system command Параметры: cmd внешняя программа @@ -392,30 +395,17 @@ def runOsCommand(cmd,in_str=None, env_dict=None): return retcode, res def genpassword(passlen=9): - '''Вернуть случайный набор символов указанной длины - - Параметры: - passlen длина пароля который нужно сгенерировать - - Возвращаемые параметры: - Сгенерированный пароль указанной длины - ''' - res=''.join([choice(string.ascii_letters+string.digits)\ - for i in xrange(passlen)]) - return res + """Return random charset specified lenght (passlen)""" + return ''.join(map(lambda x:choice(string.ascii_letters+string.digits), + xrange(0,passlen))) def getpathenv(): - """Вернуть пути для запуска утилит""" - bindir=['/sbin','/bin','/usr/sbin','/usr/bin'] + """Return path for run utilities""" + bindir=set(filter(path.exists, + ['/sbin','/bin','/usr/sbin','/usr/bin'])) env=os.environ - if env and env.has_key('PATH'): - lpath=env['PATH'].split(":") - npath=[] - for dirname in bindir: - if path.exists(dirname) and dirname not in lpath: - npath.append(dirname) - lpath=npath+lpath - return ":".join(lpath) + envPath = set(env.get('PATH','').split(":")) | bindir + return ":".join(envPath) class MultiReplace: """MultiReplace function object @@ -627,7 +617,6 @@ def isFstabMount(pathname,mapDevUuid={},listFstab=[]): absPath = "swap" else: absPath = path.abspath(pathname) - devuuid = '/dev/disk/by-uuid' if not mapDevUuid: mapDevUuid.update(getUUIDDict()) # convert fstab to @@ -844,8 +833,7 @@ def readFile(filename): return open(filename,'r').read() except (OSError,IOError): pass - finally: - return "" + return "" def getUUIDDict(revers=False): """Get dict UUID -> dev""" @@ -893,7 +881,7 @@ def getProgPath(progname): return False def checkUtils(*utils): - """Check utils and exit if it not found""" + """Check utils, exit if it not found and return fullpath""" retval = [] for util in utils: utilPath = getProgPath(util) diff --git a/pym/cl_vars_share.py b/pym/cl_vars_share.py index 71cadd8..29274c5 100644 --- a/pym/cl_vars_share.py +++ b/pym/cl_vars_share.py @@ -16,7 +16,7 @@ import os import sys -from cl_utils import getpathenv, runOsCommand, typeFile +from cl_utils import getpathenv, runOsCommand, typeFile,process import re from os import path, R_OK try: @@ -528,6 +528,16 @@ class varsShare: if reRes: return reRes[0] + def selectVar(self,selField,where="",eq=""): + """Select value from matrix variables + + Example: + selectVar("os_disk_dev",where="os_disk_mount",eq="/")""" + res = filter(lambda x:x[1] == eq, + zip(self.Get(selField), + self.Get(where))) or [("","")] + return res[0][0] + def getVersionFromGentooFiles(self,systemroot): """Get version from gentoo files""" gentooFile = path.join(systemroot,"etc/gentoo-release") @@ -607,3 +617,13 @@ class varsShare: return defaultDriver[hr_video] else: return "vesa" + + def getKernelUid(self,device): + """Get Kernel UID by UUID of device""" + blkidProcess = process('/sbin/blkid','-c','/dev/null','-s','UUID', + '-o','value',device) + res = blkidProcess.read().strip() + if res: + return res[:8] + else: + return "no_uid"