diff --git a/gracedb/views.py b/gracedb/views.py index ef8f504bc20ea3ca75cc06bf45c070de37f45a1e..99cfdf81249f0178a47d836ca8b9f2a834c4df23 100644 --- a/gracedb/views.py +++ b/gracedb/views.py @@ -505,20 +505,29 @@ def cli_search(request): query = form.cleaned_data['query'] objects = Event.objects.filter(query).distinct() # Assemble the output... should be able to choose format. - outTable = ["#graceid\tlabels\tgroup\ttype\tfar\tgpstime\tcreatetime\turl"] - outTable += [ - "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % ( - e.graceid(), + accessFun = { + "labels" : lambda e: \ ",".join([labelling.label.name for labelling in e.labelling_set.all()]), - e.group, - e.get_analysisType_display(), - e.far, - e.gpstime or "", - e.created.isoformat(), - e.weburl(), - ) - for e in objects - ] + "analysisType" : lambda e: e.get_analysisType_display(), + "gpstime" : lambda e: str(e.gpstime) or "", + "created" : lambda e: e.created.isoformat(), + "dataurl" : lambda e: e.weburl(), + "graceid" : lambda e: e.graceid(), + "group" : lambda e: e.group.name, + } + defaultAccess = lambda e, a: str(getattr(e,a,None) or "") + + defaultColumns = "graceid,labels,group,analysisType,far,gpstime,created,dataurl" + columns = request.POST.get('columns') + if not columns: + columns = defaultColumns + columns = columns.split(',') + + header = "#" + "\t".join(columns) + outTable = [header] + for e in objects: + row = [ accessFun.get(column, lambda e: defaultAccess(e,column))(e) for column in columns ] + outTable.append("\t".join(row)) d = {'output': "\n".join(outTable)} else: d = {'error': ""}