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.
develop
Mike Hiretsky 13 years ago
parent 2e74407d9b
commit 7d95670209

@ -558,19 +558,7 @@ class fillVars(varsShare):
def get_cl_kernel_uid(self): def get_cl_kernel_uid(self):
"""Get UID of symlink kernel, initramfs and System.map""" """Get UID of symlink kernel, initramfs and System.map"""
uuidpath = '/dev/disk/by-uuid' return self.getKernelUid(self.Get('os_root_dev'))
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 ""
def get_cl_chroot_status(self): def get_cl_chroot_status(self):
"""Detect chroot mode by mtab content""" """Detect chroot mode by mtab content"""

@ -221,7 +221,10 @@ class process:
else: else:
stdin=kwarg["stdin"].getStdout stdin=kwarg["stdin"].getStdout
self.stdout = kwarg.get("stdout",PIPE) 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.stderr = kwarg.get("stderr",PIPE)
self.command = [command] + list(params) self.command = [command] + list(params)
@ -364,7 +367,7 @@ class processProgress(process):
pass pass
def runOsCommand(cmd,in_str=None, env_dict=None): def runOsCommand(cmd,in_str=None, env_dict=None):
"""Выполняет внешнюю программу """Run system command
Параметры: Параметры:
cmd внешняя программа cmd внешняя программа
@ -392,30 +395,17 @@ def runOsCommand(cmd,in_str=None, env_dict=None):
return retcode, res return retcode, res
def genpassword(passlen=9): def genpassword(passlen=9):
'''Вернуть случайный набор символов указанной длины """Return random charset specified lenght (passlen)"""
return ''.join(map(lambda x:choice(string.ascii_letters+string.digits),
Параметры: xrange(0,passlen)))
passlen длина пароля который нужно сгенерировать
Возвращаемые параметры:
Сгенерированный пароль указанной длины
'''
res=''.join([choice(string.ascii_letters+string.digits)\
for i in xrange(passlen)])
return res
def getpathenv(): def getpathenv():
"""Вернуть пути для запуска утилит""" """Return path for run utilities"""
bindir=['/sbin','/bin','/usr/sbin','/usr/bin'] bindir=set(filter(path.exists,
['/sbin','/bin','/usr/sbin','/usr/bin']))
env=os.environ env=os.environ
if env and env.has_key('PATH'): envPath = set(env.get('PATH','').split(":")) | bindir
lpath=env['PATH'].split(":") return ":".join(envPath)
npath=[]
for dirname in bindir:
if path.exists(dirname) and dirname not in lpath:
npath.append(dirname)
lpath=npath+lpath
return ":".join(lpath)
class MultiReplace: class MultiReplace:
"""MultiReplace function object """MultiReplace function object
@ -627,7 +617,6 @@ def isFstabMount(pathname,mapDevUuid={},listFstab=[]):
absPath = "swap" absPath = "swap"
else: else:
absPath = path.abspath(pathname) absPath = path.abspath(pathname)
devuuid = '/dev/disk/by-uuid'
if not mapDevUuid: if not mapDevUuid:
mapDevUuid.update(getUUIDDict()) mapDevUuid.update(getUUIDDict())
# convert fstab to # convert fstab to
@ -844,8 +833,7 @@ def readFile(filename):
return open(filename,'r').read() return open(filename,'r').read()
except (OSError,IOError): except (OSError,IOError):
pass pass
finally: return ""
return ""
def getUUIDDict(revers=False): def getUUIDDict(revers=False):
"""Get dict UUID -> dev""" """Get dict UUID -> dev"""
@ -893,7 +881,7 @@ def getProgPath(progname):
return False return False
def checkUtils(*utils): def checkUtils(*utils):
"""Check utils and exit if it not found""" """Check utils, exit if it not found and return fullpath"""
retval = [] retval = []
for util in utils: for util in utils:
utilPath = getProgPath(util) utilPath = getProgPath(util)

@ -16,7 +16,7 @@
import os import os
import sys import sys
from cl_utils import getpathenv, runOsCommand, typeFile from cl_utils import getpathenv, runOsCommand, typeFile,process
import re import re
from os import path, R_OK from os import path, R_OK
try: try:
@ -528,6 +528,16 @@ class varsShare:
if reRes: if reRes:
return reRes[0] 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): def getVersionFromGentooFiles(self,systemroot):
"""Get version from gentoo files""" """Get version from gentoo files"""
gentooFile = path.join(systemroot,"etc/gentoo-release") gentooFile = path.join(systemroot,"etc/gentoo-release")
@ -607,3 +617,13 @@ class varsShare:
return defaultDriver[hr_video] return defaultDriver[hr_video]
else: else:
return "vesa" 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"

Loading…
Cancel
Save