class CaseBuilderDialog(CaseBuilderTUI): """A dialog for a CaswBuilder-dialog""" def __init__(self,fName): CaseBuilderTUI.__init__(self) self.desc=CaseBuilderFile(fName) # print "Read case description",self.desc.name() items=[] items.append( urwid.AttrWrap( urwid.Text("Builder Template: " + self.desc.name()+"\n"+self.desc.description() ),'banner')) items.append( urwid.AttrWrap( urwid.Divider("-"),'banner')) items.append( urwid.AttrWrap( urwid.Text("Data Template: " + self.desc.templatePath() ),'banner')) items.append( urwid.AttrWrap( urwid.Divider("="),'banner')) self.caseField=urwid.Edit(('banner',"Name of the generated case ")) items.append(urwid.AttrWrap(self.caseField,'editbox')) items.append( urwid.AttrWrap( urwid.Divider("="),'banner')) args=self.desc.arguments() mLen=apply(max,map(len,args)) aDesc=self.desc.argumentDescriptions() aDef=self.desc.argumentDefaults() self.argfields=[] groups=[None]+self.desc.argumentGroups() gDesc=self.desc.argumentGroupDescription() for g in groups: if g!=None: items.append(urwid.AttrWrap(urwid.Text("\n"+g+" - "+gDesc[g]),"group")) for a in self.desc.groupArguments(g): items.append(urwid.Text(aDesc[a])) fld=urwid.Edit(('banner',a+" "*(mLen+1-len(a))),edit_text=aDef[a]) self.argfields.append(fld) items.append(urwid.AttrWrap(fld,'editbox')) items.append( urwid.AttrWrap( urwid.Divider("="),'banner')) self.forceCheck=urwid.CheckBox("ForceOverwrite") items.append( urwid.Columns( [ urwid.AttrWrap(self.forceCheck,'bgbutton') ] )) items.append( urwid.Padding( urwid.AttrWrap(urwid.Button("Generate Case",self.doGenerate),'bgbutton','button'), align='center',width=20)) self.items = urwid.SimpleListWalker(items) self.listbox = urwid.ListBox(self.items) self.statusText = urwid.Text("Dummy") footer = urwid.AttrWrap( self.statusText, 'header' ) self.setStatus("") top = urwid.Frame(self.listbox, footer=footer) self.top=urwid.AttrWrap(top,'bg') self.done=False def run(self): self.ui.run_wrapper(self.runTUI) return self.done def setStatus(self,text): self.statusText.set_text([('alert',text)," Press ESC to exit"]) def doGenerate(self,button): self.goOn=False self.ui.stop() caseName=self.caseField.get_edit_text() if len(caseName)==0: self.setStatus("Casename empty") self.goOn=True return if path.exists(caseName): if not self.forceCheck.get_state(): self.setStatus("Directory "+caseName+" already existing") self.goOn=True return else: self.setStatus("Overwriting directory "+caseName) shutil.rmtree(caseName) self.setStatus("Generating the case "+caseName) args={} for i,a in enumerate(self.desc.arguments()): args[a]=self.argfields[i].get_edit_text() if len(args[a])==0: self.setStatus("No argument "+a+" was given") self.goOn=True return msg=self.desc.verifyArguments(args) if msg: self.setStatus(msg) self.goOn=True return self.setStatus("With the arguments "+str(args)) self.desc.buildCase(caseName,args) self.done=True def runTUI(self): size = self.ui.get_cols_rows() txt = urwid.Text(('banner', " Hello World "), align="center") wrap1 = urwid.AttrWrap( txt, 'streak' ) fill = urwid.Filler( wrap1 ) wrap2 = urwid.AttrWrap( fill, 'bg' ) self.goOn=True while self.goOn: self.draw_screen(size) keys = self.ui.get_input() if "esc" in keys: break for k in keys: if k=="window resize": size = self.ui.get_cols_rows() continue self.top.keypress( size, k ) def draw_screen(self,size): canvas = self.top.render( size, focus=True ) self.ui.draw_screen( size, canvas )
def __init__(self,fName): CaseBuilderTUI.__init__(self) self.desc=CaseBuilderFile(fName) # print "Read case description",self.desc.name() items=[] items.append( urwid.AttrWrap( urwid.Text("Builder Template: " + self.desc.name()+"\n"+self.desc.description() ),'banner')) items.append( urwid.AttrWrap( urwid.Divider("-"),'banner')) items.append( urwid.AttrWrap( urwid.Text("Data Template: " + self.desc.templatePath() ),'banner')) items.append( urwid.AttrWrap( urwid.Divider("="),'banner')) self.caseField=urwid.Edit(('banner',"Name of the generated case ")) items.append(urwid.AttrWrap(self.caseField,'editbox')) items.append( urwid.AttrWrap( urwid.Divider("="),'banner')) args=self.desc.arguments() mLen=apply(max,map(len,args)) aDesc=self.desc.argumentDescriptions() aDef=self.desc.argumentDefaults() self.argfields=[] groups=[None]+self.desc.argumentGroups() gDesc=self.desc.argumentGroupDescription() for g in groups: if g!=None: items.append(urwid.AttrWrap(urwid.Text("\n"+g+" - "+gDesc[g]),"group")) for a in self.desc.groupArguments(g): items.append(urwid.Text(aDesc[a])) fld=urwid.Edit(('banner',a+" "*(mLen+1-len(a))),edit_text=aDef[a]) self.argfields.append(fld) items.append(urwid.AttrWrap(fld,'editbox')) items.append( urwid.AttrWrap( urwid.Divider("="),'banner')) self.forceCheck=urwid.CheckBox("ForceOverwrite") items.append( urwid.Columns( [ urwid.AttrWrap(self.forceCheck,'bgbutton') ] )) items.append( urwid.Padding( urwid.AttrWrap(urwid.Button("Generate Case",self.doGenerate),'bgbutton','button'), align='center',width=20)) self.items = urwid.SimpleListWalker(items) self.listbox = urwid.ListBox(self.items) self.statusText = urwid.Text("Dummy") footer = urwid.AttrWrap( self.statusText, 'header' ) self.setStatus("") top = urwid.Frame(self.listbox, footer=footer) self.top=urwid.AttrWrap(top,'bg') self.done=False
def run(self): if self.pathInfo(): return if len(self.parser.getArgs())<1: error("No description file given") fName=self.searchDescriptionFile(self.parser.getArgs()[0]) desc=CaseBuilderFile(fName) print "Read case description",desc.name() stopIt=False if self.opts.long: self.opts.short=True self.opts.args=True self.opts.bounds=True self.opts.help=True if self.opts.short: print print "Description: ",desc.description() print "Template: ",desc.templatePath() print "Initial Condition:",desc.initialDir() stopIt=True if self.opts.help: self.printTitle("Help") print desc.helpText() stopIt=True if self.opts.args: args=desc.arguments() mLen=apply(max,map(len,args)) aDesc=desc.argumentDescriptions() format="%%%ds : %%s" % mLen self.printTitle("Arguments") for a in args: print format % (a,aDesc[a]) stopIt=True if self.opts.bounds: bounds=desc.boundaries() mLen=apply(max,map(len,bounds)) bDesc=desc.boundaryDescriptions() bPat=desc.boundaryPatternDict() format="%%%ds : %%s \n\tPattern: '%%s'" % mLen self.printTitle("Boundaries") for i,a in enumerate(bounds): print format % (a,bDesc[a],bPat[a]) stopIt=True if stopIt: print print "Not doing anything" return args=desc.arguments() if len(self.parser.getArgs())<2: error("Missing a casename:",self.buildUsage(args)) cName=self.parser.getArgs()[1] if len(self.parser.getArgs())!=len(args)+2: error("Wrong number of arguments:",self.buildUsage(args)) aDict={} for i,a in enumerate(args): tmp=self.parser.getArgs()[2+i] if (tmp[0]=='"' or tmp[0]=="'") and tmp[0]==tmp[-1]: tmp=tmp[1:-1] aDict[a]=tmp if path.exists(cName): if self.opts.force: shutil.rmtree(cName) else: error("Case directory",cName,"already exists") print "Building case",cName msg=desc.verifyArguments(aDict) if msg: error("Error verifying arguments:",msg) desc.buildCase(cName,aDict)