Changeset 238


Ignore:
Timestamp:
07/27/2010 06:19:00 PM (12 years ago)
Author:
marcus
Message:

Parser work (options on command procedure call).

Location:
SHX/trunk/src/SeismicHandler
Files:
2 edited

Legend:

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

    r237 r238  
    239239        # also qualifiers. 
    240240        if parameters: 
    241             self.parameters = translate(parameters, self) 
     241#            print parameters 
     242#            self.parameters = translate(parameters, self) 
     243            self.parameters = parameters 
    242244 
    243245        if "searchpath" in kwargs: 
     
    317319        self.targets = targets 
    318320 
    319     def traceBack(self): 
    320         pass 
     321    def traceBack(self, error, msg = ""): 
     322        # Respect global settings: 
     323        if Settings.swSherrstop: 
     324            import sys 
     325            print >> sys.stderr, error, msg 
     326            quit() 
     327 
     328        if Settings.swCmderrstop: 
     329            raise Exception(error, msg) 
     330 
     331        if not Settings.swNoerrmsg: 
     332            import warnings 
     333            warnings.warn((error, msg)) 
    321334     
    322335    def run(self): 
     
    339352                        x(*cmd["shx_parameter"], **cmd["shx_qualifiers"]) 
    340353                    except Exception, e: 
    341                         print e 
     354                        self.traceBack(e) 
    342355 
    343356                # or execute command... 
     
    346359                        print cmd["shx_translated"] 
    347360                     
    348                     # also supply recent symbolset 
    349                     commands.list[cmd["shx_command"]](shx_symbols=self.symbols, \ 
    350                                  *cmd["shx_parameter"], **cmd["shx_qualifiers"]) 
     361                    try: 
     362                        # also supply recent symbolset 
     363                        commands.list[cmd["shx_command"]]( 
     364                            shx_symbols=self.symbols, 
     365                            *cmd["shx_parameter"], 
     366                            **cmd["shx_qualifiers"] 
     367                        ) 
     368                    except Exception, e: 
     369                        self.traceBack(e) 
    351370 
    352371                # .. or start script. 
     
    361380                        ) 
    362381                        ns.run() 
    363                     except Exception: 
     382                    except Exception, e: 
    364383                        msg = "Cannot run script '%s'!" % cmd["shx_command"] 
    365  
    366                         # Respect global settings: 
    367                         if Settings.swSherrstop: 
    368                             import sys 
    369                             print >> sys.stderr, msg 
    370                             quit() 
    371  
    372                         if Settings.swCmderrstop: 
    373                             raise Exception(msg) 
    374  
    375                         if not Settings.swNoerrmsg: 
    376                             import warnings 
    377                             warnings.warn(msg) 
    378  
     384                        self.traceBack(e, msg) 
    379385            except StopIteration: 
    380386                break 
     
    526532        # translate parameters 
    527533        for i, p in enumerate(cmd["shx_parameter"]): 
    528             cmd["shx_parameter"][i] = self.__translate(p) 
     534            cmd["shx_parameter"][i] = self._translate(p) 
    529535 
    530536        # translate qualifiers 
     
    536542                continue 
    537543 
    538             cmd["shx_qualifiers"][q] = self.__translate(p) 
     544            cmd["shx_qualifiers"][q] = self._translate(p) 
    539545 
    540546        # Actually this is only for debugging purposes. 
     
    556562        ]) 
    557563 
    558     def __translate(self, value): 
     564    def _translate(self, value): 
    559565        idmap = { 
    560             '$': self.handleSystem, 
    561             '"': self.handleSymbol, 
    562             '^': self.handleTrace, 
    563             '#': self.handleOption, 
    564             '%': self.handleFile, 
     566            '$': self.__handleSystem, 
     567            '"': self.__handleSymbol, 
     568            '^': self.__handleTrace, 
     569            '#': self.__handleOption, 
     570            '%': self.__handleFile, 
    565571        } 
    566572 
     
    570576        if id == "|": 
    571577            parts = filter(None, value.split("|")) 
    572             newparts = [self.__translate(i) for i in parts] 
     578            newparts = [self._translate(i) for i in parts] 
    573579            return "".join(newparts) 
    574580 
     
    578584        value = value[1:] 
    579585 
    580         return idmap[id](value) 
    581  
    582     def handleSystem(self, name): 
     586        try: 
     587            return idmap[id](value) 
     588        except NotImplementedError: 
     589            raise NotImplementedError 
     590        except: 
     591            raise Exception("'%s' could not be translated!" % value) 
     592 
     593    def __handleSystem(self, name): 
    583594        try: 
    584595            x = self.system[name.upper()] 
     
    600611            return x 
    601612 
    602     def handleSymbol(self, name): 
     613    def __handleSymbol(self, name): 
    603614        try: 
    604615            return getattr(self.script.symbols, name) 
     
    606617            raise NameError("Symbol '%s' not found!" % name) 
    607618 
    608     def handleTrace(self, name): 
     619    def __handleTrace(self, name): 
    609620        raise NotImplementedError 
    610621 
    611     def handleOption(self, name): 
    612         raise NotImplementedError 
    613  
    614     def handleFile(self, name): 
     622    def __handleOption(self, name): 
     623        if name.isdigit(): 
     624            return self.script.parameters['shx_parameter'][int(name)-1] 
     625        else: 
     626            return self.script.parameters['shx_qualifiers'][name] 
     627 
     628    def __handleFile(self, name): 
    615629        raise NotImplementedError 
    616630 
  • SHX/trunk/src/SeismicHandler/tests/test_parser.py

    r237 r238  
    221221        x.run() 
    222222 
    223         expect = "SCRIPT2: 23\nSCRIPT1: 42\n" 
     223        expect = "SCRIPT2: 23 BAR 1\nSCRIPT1: 42\n" 
    224224 
    225225        res = self.getResults() 
Note: See TracChangeset for help on using the changeset viewer.