self.query = pqf.parse(query) except: raise QuerySyntaxError elif typ == 'C2': # Cheshire2 Syntax self.typ = 'RPN' try: q = c2.parse(query) self.query = q[0] except: raise QuerySyntaxError elif typ == 'ZSQL': # External SQL self.typ = typ xq = asn1.EXTERNAL() xq.direct_reference = oids.Z3950_QUERY_SQL_ov q = z3950.SQLQuery() q.queryExpression = query xq.encoding = ('single-ASN1-type', q) self.query = ('type_104', xq) elif typ == 'CQL-TREE': # Tree to RPN self.typ = 'RPN' try: rpnq = z3950.RPNQuery() # XXX Allow Attribute Architecture rpnq.attributeSet = oids.Z3950_ATTRS_BIB1_ov rpnq.rpn = query.toRPN() self.query = ('type_1', rpnq) except SRWDiagnostics.SRWDiagnostic, err: raise err except: raise QuerySyntaxError
def __init__ (self, typ, query): """Creates Query object. Supported query types: CCL, S-CCL, CQL, S-CQL, PQF, C2, ZSQL, CQL-TREE """ typ = typ.upper() # XXX maybe replace if ... elif ... with dict mapping querytype to func if typ == 'CCL': self.typ = 'RPN' try: self.query = ccl.mk_rpn_query (query) except ccl.QuerySyntaxError as err: raise QuerySyntaxError (str(err)) elif typ == 'S-CCL': # server-side ccl self.typ = typ self.query = ('type-2', query) elif typ == 'S-CQL': # server-side cql self.typ = typ xq = asn1.EXTERNAL() xq.direct_reference = oids.Z3950_QUERY_CQL_ov xq.encoding = ('single-ASN1-type', query) self.query = ('type_104', xq) elif typ == 'CQL': # CQL to RPN transformation self.typ = 'RPN' try: q = CQLParser.parse(query) rpnq = z3950.RPNQuery() # XXX Allow Attribute Architecture somehow? rpnq.attributeSet = oids.Z3950_ATTRS_BIB1_ov rpnq.rpn = q.toRPN() self.query = ('type_1', rpnq) except SRWDiagnostics.SRWDiagnostic as err: raise err except: raise QuerySyntaxError elif typ == 'PQF': # PQF to RPN transformation self.typ = 'RPN' try: self.query = pqf.parse(query) except: raise QuerySyntaxError elif typ == 'C2': # Cheshire2 Syntax self.typ = 'RPN' try: q = c2.parse(query) self.query = q[0] except: raise QuerySyntaxError elif typ == 'ZSQL': # External SQL self.typ = typ xq = asn1.EXTERNAL() xq.direct_reference = oids.Z3950_QUERY_SQL_ov q = z3950.SQLQuery() q.queryExpression = query xq.encoding = ('single-ASN1-type', q) self.query = ('type_104', xq) elif typ == 'CQL-TREE': # Tree to RPN self.typ = 'RPN' try: rpnq = z3950.RPNQuery() # XXX Allow Attribute Architecture rpnq.attributeSet = oids.Z3950_ATTRS_BIB1_ov rpnq.rpn = query.toRPN() self.query = ('type_1', rpnq) except SRWDiagnostics.SRWDiagnostic as err: raise err except: raise QuerySyntaxError else: raise ClientNotImplError ('%s queries not supported' % typ)