Source code for PyFoam.Applications.CaseBuilder

"""
Application-class that implements pyFoamCaseBuilder.py
"""
from optparse import OptionGroup
from os import path
import shutil

from .PyFoamApplication import PyFoamApplication
from .CaseBuilderBackend import CaseBuilderFile
from .CommonCaseBuilder import CommonCaseBuilder

from PyFoam.Error import error

from PyFoam.ThirdParty.six import print_

[docs]class CaseBuilder(PyFoamApplication, CommonCaseBuilder): def __init__(self, args=None, **kwargs): description="""\ Gets a XML-file that describes how to build a case from a case template and some parameters """ PyFoamApplication.__init__(self, args=args, description=description, usage="%prog <DescriptionFile>", interspersed=True, nr=0, exactNr=False, **kwargs)
[docs] def addOptions(self): info=OptionGroup(self.parser, "Information", "Information about the case") self.parser.add_option_group(info) info.add_option("--short-description", action="store_true", dest="short", default=False, help="Print a short description of the case and exit") info.add_option("--arguments", action="store_true", dest="args", default=False, help="Describes the additional arguments") info.add_option("--help-text", action="store_true", dest="help", default=False, help="Prints the help text in the description file") info.add_option("--boundaries", action="store_true", dest="bounds", default=False, help="Describes the boundaries") info.add_option("--long-description", action="store_true", dest="long", default=False, help="Print a long description of the case and exit") CommonCaseBuilder.addOptions(self) how=OptionGroup(self.parser, "How", "How the case should be built") self.parser.add_option_group(how) how.add_option("--force", action="store_true", dest="force", default=False, help="Remove the case-directory if it exists")
[docs] def printTitle(self,title): print_() print_(title) print_("="*len(title))
[docs] 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=max(*list(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=max(*list(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)
[docs] def buildUsage(self,args): usage="<casename>" for a in args: usage+=" <"+a+">" return usage
# Should work with Python3 and Python2