Skip to content

Commit

Permalink
bash_completion: add suggestionForComa list and application to --roun…
Browse files Browse the repository at this point in the history
…ding in verrou_plot_stat and hide deprecated option
  • Loading branch information
lathuili-home committed Jun 29, 2024
1 parent 8b722de commit fce07fa
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 15 deletions.
90 changes: 77 additions & 13 deletions pyTools/gen_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,24 @@ def __init__(self, argv, environ,config_keys=["INTERFLOP"], lengthValidTab=[2]):
self.registryTab =[]
self.registerOptions()
self.readDefaultValueFromRegister()
if sys.argv[1]=="bash_completion":
self.write_bashCompletion_script()
sys.exit(0)
self.argv=argv
self.parseArgv(argv, lengthValidTab)
for config_key in self.config_keys:
self.read_environ(environ, config_key)

def addRegistry(self,attribut, optionType, ENV, tabOption, default, checkParam=None, additive=False, docStr=None ):
registry={"attribut":attribut, "type": optionType, "ENV":ENV, "tabOption":tabOption,
def addRegistry(self,attribut, optionType, ENV, tabOption, default, checkParam=None, additive=False, docStr=None,suggestionForComaList=None ):
registry={"attribut":attribut, "type": optionType, "ENV":ENV,
"tabOptionBrut":tabOption,
"tabOptionAll":[option.replace("#","") for option in tabOption],
"tabOptionVisible":[option for option in tabOption if not option.startswith("#")],
"default":default, "checkParam":checkParam,
"additive":additive,
"docStr":docStr}
"docStr":docStr,
"suggestionForComaList":suggestionForComaList,
}
self.registryTab+=[registry]
self.instr_ignore=[]
self.instr_prefix=None
Expand All @@ -48,8 +56,8 @@ def optionToStr(self):
return strOption

def parseArgv(self,argv, lengthValidTab):
shortOptionsForGetOpt="h" + "".join([y[1:] for x in self.registryTab for y in x["tabOption"] if y.startswith("-") and y[1]!="-"])
longOptionsForGetOpt=["help"] + [y[2:] for x in self.registryTab for y in x["tabOption"] if y.startswith("--")]
shortOptionsForGetOpt="h" + "".join([y[1:] for x in self.registryTab for y in x["tabOptionAll"] if y.startswith("-") and y[1]!="-"])
longOptionsForGetOpt=["help"] + [y[2:] for x in self.registryTab for y in x["tabOptionAll"] if y.startswith("--")]
try:
opts,args=getopt.getopt(argv[1:], shortOptionsForGetOpt, longOptionsForGetOpt)
except getopt.GetoptError:
Expand All @@ -61,7 +69,7 @@ def parseArgv(self,argv, lengthValidTab):
self.usageCmd()
self.failure()
for registry in self.registryTab:
for registryName in registry["tabOption"]:
for registryName in registry["tabOptionAll"]:
fromRegistryName=registryName.replace("=","")
fromRegistryName=fromRegistryName.replace(":","")
if opt==fromRegistryName:
Expand All @@ -81,7 +89,7 @@ def read_environ(self,environ, PREFIX):
for registry in self.registryTab:
try:
strValue=self.environ[self.PREFIX+"_"+registry["ENV"]]
param=[registry["attribut"], registry["type"], registry["ENV"], registry["tabOption"][0],registry["checkParam"], registry["additive"]]
param=[registry["attribut"], registry["type"], registry["ENV"], registry["tabOptionAll"][0],registry["checkParam"], registry["additive"]]
self.readOneOption(strValue,*param, parse="environ")
except KeyError:
pass
Expand Down Expand Up @@ -245,17 +253,52 @@ def write_bashCompletion_script(self):
{
local cur prev words cword
_init_completion -n = || return
case $cur in
local value prefix localCmd
"""%(cmdName)
handler.write(begin)

handler.write(" "*4+ "case $cur in\n")
for registry in self.registryTab:
if registry["suggestionForComaList"]==None:
continue
optionTab=registry["tabOptionVisible"]
caseMatchComa="|".join([option+"*,*" for option in optionTab if option.endswith("=") ])
caseMatchStar="|".join([option+"*" for option in optionTab if option.endswith("=") ])
if caseMatchComa!="" and caseMatchStar!="" :
handler.write(" "*8+caseMatchComa+")\n")
handler.write(" "*12+"value=${cur#*=}\n")
handler.write(" "*12+"cur=${value}\n")
handler.write(" "*12+"prefix=${value%,*},\n")
handler.write(" "*12+"localCmd=${cur}\n")
handler.write(" "*12+"if (( COMP_TYPE == 63 )); then\n")
handler.write(" "*16+"prefix=\"\"\n")
handler.write(" "*16+"localCmd=${cur##*,}\n")
handler.write(" "*12+"fi\n")
prefixSuggest=["${prefix}"+suggest for suggest in registry["suggestionForComaList"]]
cmpReply=" "*12+ "COMPREPLY=($(compgen -W \"%s\" -- \"$localCmd\"))\n"%(" ".join(prefixSuggest))
handler.write(cmpReply)
handler.write(" "*12+"compopt -o nospace\n")
handler.write(" "*12+"return\n")
handler.write(" "*12+";;\n")

handler.write(" "*8+caseMatchStar+")\n")
handler.write(" "*12+"cur=${cur#*=}\n")
cmpReply=" "*12+ "COMPREPLY=($(compgen -W '%s' -- \"$cur\"))\n"%(" ".join(registry["suggestionForComaList"]))
handler.write(cmpReply)
handler.write(" "*12+"compopt -o nospace\n")
handler.write(" "*12+"return\n")
handler.write(" "*12+";;\n")

handler.write(" "*4+ "esac\n")
strOptionTab=""
handler.write(" "*4+ "case $cur in\n")
for registry in self.registryTab:
optionTab=registry["tabOption"]
strOptionTab+=" "+" ".join(optionTab)
optionTab=registry["tabOptionVisible"]
strOptionTab+=" "+" ".join([option.replace(":","") for option in optionTab])

if registry["suggestionForComaList"]!=None:
continue
expectedValue=registry["checkParam"]

caseMatch="|".join([option+"*" for option in optionTab if option.endswith("=") ])
if caseMatch!="":
handler.write(" "*8+caseMatch+")\n")
Expand All @@ -271,7 +314,28 @@ def write_bashCompletion_script(self):
handler.write(cmpReply)
handler.write(" "*12+"return\n")
handler.write(" "*12+";;\n")
handler.write("\n"+" "*4+"esac\n")

handler.write("\n"+ " "*4+"case $prev in\n")
for registry in self.registryTab:
optionTab=registry["tabOptionVisible"]
caseMatch="|".join([option.replace(":","") for option in optionTab if option.endswith(":") ])
if caseMatch!="":
handler.write(" "*8+caseMatch+")\n")
cmpReply=""
if str(type(expectedValue))=="<class 'list'>":
if None not in expectedValue and len(expectedValue)>0:
cmpReply=" "*12+ "COMPREPLY=($(compgen -W '%s' -- \"$cur\"))\n"%(" ".join(expectedValue))
if expectedValue=="rep_exists":
cmpReply=" "*12+ "_filedir -d\n"
if expectedValue=="file_exists":
cmpReply=" "*12+ "_filedir\n"
if cmpReply=="":
cmpReply=" "*12+"COMPREPLY=\n"
cmpReply+=" "*12+"compopt -o nospace\n"
handler.write(cmpReply)
handler.write(" "*12+"return\n")
handler.write(" "*12+";;\n")
handler.write("\n"+" "*4+"esac\n")

handler.write("\n"+" "*4+"COMPREPLY=($(compgen -W '%s' -- \"$cur\"))\n"%(strOptionTab))
Expand All @@ -291,7 +355,7 @@ def get_EnvDoc(self,PREFIX="INTERFLOP"):
for registry in self.registryTab:
# (attribut, attributType, envVar, option, default, expectedValue, add)=registry

optionTab=registry["tabOption"]
optionTab=registry["tabOptionBrut"]
if len(optionTab)==1:
optionStr=str(optionTab[0])
else:
Expand Down
8 changes: 6 additions & 2 deletions pyTools/verrou_plot_stat
Original file line number Diff line number Diff line change
Expand Up @@ -730,15 +730,19 @@ class config_stat(gen_config.gen_config):
self._hist=True
self.defaultRoundingTab=["det","random","average"]
super().__init__(argv,environ, config_keys,[1,2,3])
if sys.argv[1]=="bash_completion":
self.write_bashCompletion_script()
sys.exit(0)
self.normalize()
self.check()
self.cachePrepare()
self.instr_prefix="VERROU"
self.saveParam(os.path.join(self._rep,"cmd.last"))

def registerOptions(self):
self.addRegistry("_roundingList", "string", "ROUNDING_LIST", ["--rounding-list=","--rounding=","--rounding-mode"] , [], additive=True,
docStr="rounding mode list (coma separated) [default random,average,det]")
self.addRegistry("_roundingList", "string", "ROUNDING_LIST", ["--rounding=","#--rounding-list=","#--rounding-mode="] , [], additive=True,
docStr="rounding mode list (coma separated) [default random,average,det]",
suggestionForComaList= rounding_tool.roundingDetTab +rounding_tool.roundingNonDetTab + ["mca-rr-53-24", "mca-pb-53-24", "mca-mca-53-24"])
self.addRegistry("_rep", "string", "REP", ["--rep="], "verrou.stat", docStr="working directory (default verrou.stat)")
self.addRegistry("_cache", "string", "CACHE", ["--cache="], "continue" , checkParam=["continue", "rename", "clean"], docStr="cache policy: continue (default), rename, clean")
self.addRegistry("_nbSample", "int", "NRUNS", ["-s:", "--samples=","--nruns="], 100, docStr="number of samples [default 100] -1 means use what available without use run.sh")
Expand Down

0 comments on commit fce07fa

Please sign in to comment.