Ejemplo n.º 1
0
    def validate(self):
        try: self.lang = lower(self.request['LANG'])
        except: self.errormsg = 'Cannot find LANG in request.\n'
        else:
            if self.lang not in ('vss1','vss2'):
                self.errormsg += 'Only LANG=VSS1 or LANG=VSS2 is supported.\n'

        try: self.query = self.request['QUERY']
        except: self.errormsg += 'Cannot find QUERY in request.\n'

        try: self.format=lower(self.request['FORMAT'])
        except: self.errormsg += 'Cannot find FORMAT in request.\n'

        try: self.parsedSQL=SQL.parseString(self.query,parseAll=True)
        except: # if this fails, we're done
            self.errormsg += 'Could not parse the SQL query string: %s\n'%self.query
            self.isvalid=False
            return

        self.requestables = set()
        self.where = self.parsedSQL.where
        if self.parsedSQL.columns not in ('*', 'ALL'):
            for r in self.parsedSQL.columns:
                r = r.lower()
                if r not in REQUESTABLES:
                    self.errormsg += 'Unknown Requestable: %s\n' % r
                else:
                    self.requestables.add(r)

            if 'species' in self.requestables:
                self.requestables.add('atoms')
                self.requestables.add('molecules')
                self.requestables.add('particles')
                self.requestables.add('solids')
            if 'states' in self.requestables:
                self.requestables.add('atomstates')
                self.requestables.add('moleculestates')
            if 'atomstates' in self.requestables:
                self.requestables.add('atoms')
            if 'moleculestates' in self.requestables:
                self.requestables.add('molecules')
            if 'moleculequantumnumbers' in self.requestables:
                self.requestables.add('molecules')
                self.requestables.add('moleculestates')
            if 'moleculebasisstates' in self.requestables:
                self.requestables.add('molecules')
                self.requestables.add('moleculestates')
            if 'processes' in self.requestables:
                self.requestables.add('radiativetransitions')
                self.requestables.add('nonradiativetransitions')
                self.requestables.add('collisions')
            # Always return sources, methods, functions for now.
            self.requestables.add('sources')
            self.requestables.add('functions')
            self.requestables.add('methods')

        if self.errormsg: self.isvalid=False
Ejemplo n.º 2
0
    def validate(self):
        try:
            self.lang = lower(self.request['LANG'])
        except:
            log.debug('LANG is empty, assuming VASS2')
            self.lang = 'vss2'
        else:
            if self.lang not in ('vss1', 'vss2'):
                self.errormsg += 'Only LANG=VSS1 or LANG=VSS2 is supported.\n'

        try:
            self.query = self.request['QUERY']
        except:
            self.errormsg += 'Cannot find QUERY in request.\n'

        if (type(self.query) == list) and (len(self.query) == 1):
            self.query = self.query[0]

        try:
            self.format = lower(self.request['FORMAT'])
        except:
            log.debug('FORMAT is empty, assuming XSAMS')
            self.format = 'xsams'
        else:
            if self.format != 'xsams':
                log.debug(
                    'Requested FORMAT is not XSAMS, letting it pass anyway.')
        try:
            self.parsedSQL = SQL.parseString(self.query, parseAll=True)
        except:  # if this fails, we're done
            self.errormsg += 'Could not parse the SQL query string: %s\n' % self.query
            self.isvalid = False
            return

        self.requestables = set()
        self.where = self.parsedSQL.where
        if self.parsedSQL.columns not in ('*', 'ALL'):
            for r in self.parsedSQL.columns:
                r = r.lower()
                if r not in REQUESTABLES:
                    self.errormsg += 'Unknown Requestable: %s\n' % r
                else:
                    self.requestables.add(r)

            if 'species' in self.requestables:
                self.requestables.add('atoms')
                self.requestables.add('molecules')
                self.requestables.add('particles')
                self.requestables.add('solids')
            if 'states' in self.requestables:
                self.requestables.add('atomstates')
                self.requestables.add('moleculestates')
            if 'atomstates' in self.requestables:
                self.requestables.add('atoms')
            if 'moleculestates' in self.requestables:
                self.requestables.add('molecules')
            if 'moleculequantumnumbers' in self.requestables:
                self.requestables.add('molecules')
                self.requestables.add('moleculestates')
            if 'moleculebasisstates' in self.requestables:
                self.requestables.add('molecules')
                self.requestables.add('moleculestates')
            if 'processes' in self.requestables:
                self.requestables.add('radiativetransitions')
                self.requestables.add('nonradiativetransitions')
                self.requestables.add('collisions')
            # Always return sources, methods, functions for now.
            self.requestables.add('sources')
            self.requestables.add('functions')
            self.requestables.add('methods')

        if self.errormsg:
            self.isvalid = False
Ejemplo n.º 3
0
 def parseSQL(self):
     self.parsedSQL = SQL.parseString(self.query)