def test_query(self): from databundles.library import QueryCommand tests = [ "column.name = 'column.name', identity.id='identity',", "column.name = 'column.name', identity.id='identity' ", "column.name = 'column.name' identity.id = 'identity'", "partition.vname ='partition.vname'", "partition.vname = '%partition.vname%'", "identity.name = '%clarinova foo bar%'" ] fails = [ "column.name='foobar" ] for s in tests: qc = QueryCommand.parse(s) print qc for s in fails: self.assertRaises(QueryCommand.ParseError, QueryCommand.parse, s)
def _find(args, l, config, remote): from databundles.library import QueryCommand terms = [] for t in args.term: if ' ' in t or '%' in t: terms.append("'{}'".format(t)) else: terms.append(t) qc = QueryCommand.parse(' '.join(terms)) prt("Query: {}", qc) if remote: identities = l.remote_find(qc) else: identities = l.find(qc) try: first = identities[0] except: first = None if not first: return t = ['{id:<14s}','{vname:20s}'] header = {'id': 'ID', 'vname' : 'Versioned Name'} multi = False if 'column' in first: multi = True t.append('{column:12s}') header['column'] = 'Column' if 'table' in first: multi = True t.append('{table:12s}') header['table'] = 'table' if 'partition' in first: multi = True t.append('{partition:50s}') header['partition'] = 'partition' ts = ' '.join(t) dashes = { k:'-'*len(v) for k,v in header.items() } prt(ts, **header) # Print the header prt(ts, **dashes) # print the dashes below the header last_rec = None first_rec_line = True for r in identities: if not last_rec or last_rec['id'] != r['identity']['vid']: rec = {'id': r['identity']['vid'], 'vname':r['identity']['vname']} last_rec = rec first_rec_line = True else: rec = {'id':'', 'vname':''} if 'column' in r: rec['column'] = '' if 'table' in r: rec['table'] = '' if 'partition' in r: rec['partition'] = '' if multi and first_rec_line: prt(ts, **rec) rec = {'id':'', 'vname':''} first_rec_line = False if 'column' in r: rec['id'] = r['column']['vid'] rec['column'] = r['column']['name'] if 'table' in r: rec['id'] = r['table']['vid'] rec['table'] = r['table']['name'] if 'partition' in r: rec['id'] = r['partition']['vid'] rec['partition'] = r['partition']['vname'] prt(ts, **rec) return