Changeset 242


Ignore:
Timestamp:
07/28/2010 02:59:40 PM (11 years ago)
Author:
marcus
Message:
  • parser work and minor bug fixes
  • closes #26 (default), tests included
Location:
SHX/trunk/src/SeismicHandler
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/src/SeismicHandler/core/parser.py

    r240 r242  
    239239        # also qualifiers. 
    240240        if parameters: 
    241 #            print parameters 
    242 #            self.parameters = translate(parameters, self) 
    243241            self.parameters = parameters 
    244242 
     
    263261 
    264262                self.filename = inputdata 
    265                  
     263 
    266264                # look for file in search path 
    267265                for folder in self.searchpath: 
     
    335333            import warnings 
    336334            warnings.warn((error, msg)) 
    337      
     335 
    338336    def run(self): 
    339337        while True: 
     
    361359                    if Settings.swVerify: 
    362360                        print cmd["shx_translated"] 
    363                      
     361 
    364362                    try: 
    365363                        # also supply recent symbolset 
     
    411409        # jump to end of script 
    412410        self.pointer = len(self.content) 
     411 
     412    def commandDefault(self, *args): 
     413        """ 
     414        Query default values. 
     415 
     416        Since this statement manipulates script option variables, it's not done 
     417        as command class. 
     418 
     419        Note: No qualifiers are supported! Input is read from stdin. 
     420        """ 
     421 
     422        # no parameters given at all -> request user input 
     423        # set as class attribute for caching. 
     424        try: 
     425            self.userreq = self.userreq and True or \ 
     426                                      len(self.parameters["shx_parameter"]) == 0 
     427        except AttributeError: 
     428            self.userreq = len(self.parameters["shx_parameter"]) == 0 
     429 
     430        id = int(args[0])-1 
     431        default = args[1] 
     432 
     433        val = None 
     434        try: 
     435            val = self.parameters["shx_parameter"][id] 
     436        except IndexError: 
     437            if self.userreq: 
     438                # request user input 
     439                if len(default): 
     440                    q = " [default: %s]: " % default 
     441                else: 
     442                    q = " : " 
     443 
     444                userinput = raw_input(" ".join(args[2:]) + q) 
     445                if userinput: 
     446                    default = userinput 
     447 
     448        if not val: 
     449            # fill from default 
     450            try: 
     451                self.parameters["shx_parameter"][id] = default 
     452            except IndexError: 
     453                self.parameters["shx_parameter"].append(default) 
    413454 
    414455    def commandGoto(self, target): 
     
    472513 
    473514    After translation all parameter and qualifiers are replaced. 
    474      
     515 
    475516    If the global option "Verify" is set the translated command string is saved 
    476517    into "shx_translated". This string is rebuild from the translated parts, 
     
    530571    def __init__(self, cmd, script=None): 
    531572        self.script = script 
    532          
     573 
    533574        # translate parameters 
    534575        for i, p in enumerate(cmd["shx_parameter"]): 
     
    548589        if not Settings.swVerify: 
    549590            return 
    550          
     591 
    551592        qual = [] 
    552593        for q in cmd["shx_qualifiers"]: 
     
    555596            else: 
    556597                qual.append("%s=%s" % (q, cmd["shx_qualifiers"][q])) 
    557              
     598 
    558599        cmd["shx_translated"] = " ".join([ 
    559600            cmd["shx_converted"] and cmd["shx_command"].upper() or \ 
     
    564605 
    565606    def _translate(self, value): 
     607        if not value: 
     608            return '' 
     609 
    566610        idmap = { 
    567611            '$': self.__handleSystem, 
     
    622666 
    623667    def __handleOption(self, name): 
     668        """ 
     669        Return parameters set on procedure call. 
     670 
     671        Possible values: 
     672        #0 - filename 
     673        #1..#99 - parameter number xx 
     674        #name - qualifier "name" 
     675        """ 
    624676        if name.isdigit(): 
    625             return self.script.parameters['shx_parameter'][int(name)-1] 
     677            id = int(name)-1 
     678            if id >= 0: 
     679                return self.script.parameters['shx_parameter'][id] 
     680            else: 
     681                return self.script.filename 
    626682        else: 
    627683            return self.script.parameters['shx_qualifiers'][name] 
     
    647703                return line.strip() 
    648704 
    649         return str(cnt+1) 
     705        if l == 0: 
     706            return str(cnt+1) 
     707        else: 
     708            raise Exception("Line %d not found in file '%s'!" % (l, f)) 
    650709 
    651710class symbol(object): 
  • SHX/trunk/src/SeismicHandler/tests/data

    • Property svn:ignore
      •  

        old new  
        11.SCRIPT1.SHC.swp 
         2.SCRIPT4.SHC.swp 
         3.nfs00000000002188580000016d 
  • SHX/trunk/src/SeismicHandler/tests/data/SCRIPT1.SHC

    r236 r242  
    1010! close output stream 
    1111echo_ch 
     12return 
  • SHX/trunk/src/SeismicHandler/tests/data/SCRIPT2.SHC

    r240 r242  
    1 echo script2: "foo #1 #qux 
     1echo #0 "foo #1 #qux 
    22sdef bar /global 42 
    33return 
  • SHX/trunk/src/SeismicHandler/tests/test_parser.py

    r241 r242  
    234234        self.assertEqual(res, expect) 
    235235 
     236    def test2Default(self): 
     237        """ 
     238        Default options. 
     239 
     240        Uses SCRIPT3 and SCRIPT4 for testing. 
     241        """ 
     242 
     243        from SeismicHandler.core.parser import script, symbol 
     244 
     245        s = symbol() 
     246        x = script("script3", s, searchpath=["data"]) 
     247        x.run() 
     248 
     249        expect = 'ONE "FOO" QUX\nFOO "BAR" QUX\nONE "bar" QUX\n' 
     250 
     251        res = self.getResults() 
     252        self.assertEqual(res, expect) 
     253 
    236254    def testScript1(self): 
    237255        """ 
     
    256274        x.run() 
    257275 
    258         expect = "SCRIPT2: 23 BAR 1\nSCRIPT1: 42\n" 
     276        expect = "SCRIPT2.SHC 23 BAR 1\nSCRIPT1: 42\n" 
    259277 
    260278        res = self.getResults() 
     
    262280 
    263281def suite(): 
    264     return unittest.makeSuite(parserTestCase, 'test') 
     282    return unittest.makeSuite(parserTestCase, 'test2') 
    265283 
    266284if __name__ == "__main__": 
Note: See TracChangeset for help on using the changeset viewer.