X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=system%2Futils.py;h=fbdd3f64ab1468bcec6f2933d6dbc766faa04b1b;hb=b9e119571675a2eda425baf89798ce6261fb48d2;hp=589f77a6c503c00ab9658e94f1e8592edb0789f1;hpb=e0eebfd5c5ba792c89ceedb5ecaf5804d645a63d;p=tests.git diff --git a/system/utils.py b/system/utils.py index 589f77a..fbdd3f6 100644 --- a/system/utils.py +++ b/system/utils.py @@ -1,38 +1,81 @@ -# $Id$ -import time -import os -import commands -import pprint +# Thierry Parmentelat +# Copyright (C) 2010 INRIA +# +import time, os, re, glob, sys +from pprint import PrettyPrinter + +options={} + +def init_options(options_arg): + global options + options=options_arg # how could this accept a list again ? def header(message): now=time.strftime("%H:%M:%S", time.localtime()) print "*",now,'--',message -def show_spec(message,spec,depth=2): +def pprint(message,spec,depth=2): now=time.strftime("%H:%M:%S", time.localtime()) print ">",now,"--",message - pprint.PrettyPrinter(indent=6,depth=depth).pprint(spec) + PrettyPrinter(indent=8,depth=depth).pprint(spec) + + + +def system(command,background=False,silent=False): + if getattr(options,'dry_run',None): + print 'dry_run:',command + return 0 + + if silent : + if command.find(';')>=0: command = "(%s) 2> /dev/null" % command + else: command += " 2> /dev/null" + if background: command += " &" + if silent: + print '.', + sys.stdout.flush() + else: + now=time.strftime("%H:%M:%S", time.localtime()) + # don't show in summary + print "->",now,'--', + sys.stdout.flush() + if not silent: + command = "set -x; " + command + return os.system(command) + +### WARNING : this ALWAYS does its job, even in dry_run mode +def output_of (command): + import commands + (code,string) = commands.getstatusoutput(command) + return (code,string) -def system(command): + +# convenience: translating shell-like pattern into regexp +def match (string, pattern): + # tmp - there's probably much simpler + # rewrite * into .*, ? into . + pattern=pattern.replace("*",".*") + pattern=pattern.replace("?",".") + return re.compile(pattern).match(string) + +def locate_hooks_scripts (message,path,extensions): + print message,'searching',path,'for extensions',extensions + scripts=[] + for ext in extensions: + # skip helper programs + scripts += glob.glob (path+'/[a-zA-Z]*.'+ext) + return scripts + +# quick & dirty - should probably use the parseroption object instead +# and move to TestMain as well +exclude_options_keys = [ 'ensure_value' , 'read_file', 'read_module' ] +def show_options (message,options): now=time.strftime("%H:%M:%S", time.localtime()) - print "+",now - return os.system("set -x; " + command) - -# checks whether a given hostname/ip responds to ping -ping_timeout_option = None -def check_ping (hostname): - # check OS (support for macos) - global ping_timeout_option - if not ping_timeout_option: - (status,osname) = commands.getstatusoutput("uname -s") - if status != 0: - raise Exception, "Cannot figure your OS name" - if osname == "Linux": - ping_timeout_option="-w" - elif osname == "Darwin": - ping_timeout_option="-t" - - command="ping -c 1 %s 1 %s"%(ping_timeout_option,hostname) - (status,output) = commands.getstatusoutput(command) - return status == 0 + print ">",now,"--",message + for k in dir(options): + if k.find("_")==0: continue + if k in exclude_options_keys: continue + print " ",k,":",getattr(options,k) + + +