def plate_query(self): # simple AND case labels = [] for idx, cond in enumerate(self.form_result['conditions']): labels.append(cond['field'].label("condition%s" % idx)) conditions = and_(*[getattr(cond['field'], cond['compare'])(cond['value']) for cond in self.form_result['conditions']]) labels = [] label_names = [] for idx, cond in enumerate(self.form_result['conditions']): field_name = 'field%s' % idx labels.append(cond['field'].label(field_name)) label_names.append(QLBPlateForm.col_display_names.get(full_column_name(cond['field']), cond['field'].name)) if self.form_result['order_by'].name not in [cond['field'].name for cond in self.form_result['conditions']]: order_by = self.form_result['order_by'] field_name = 'field%s' % len(label_names) labels.append(order_by.label(field_name)) label_names.append(QLBPlateForm.col_display_names.get(full_column_name(order_by), order_by.name)) for col in self.form_result['return_fields']: field_name = 'field%s' % len(label_names) labels.append(col.label(field_name)) label_names.append(QLBPlateForm.col_display_names.get(full_column_name(col), col.name)) if self.form_result['order_by_direction'] == "desc": sort_column = self.form_result['order_by'].desc() else: sort_column = self.form_result['order_by'] c.plates = Session.query(QLBPlate, *labels).join(QLBFile).outerjoin(Plate, Project, Experiment, Assay, Person).filter(conditions) \ .order_by(sort_column) \ .options(contains_eager(QLBPlate.file)) c.grouped_results = False # TODO: support and, or c.field = self.form_result['conditions'][0]['field'] # TODO: fix (hack) c.compare = request.params.get('conditions-0.compare') c.value = self.form_result['conditions'][0]['value'] c.label_names = label_names return render('/box2/plate_list.html')
def well_query(self): # simple AND case labels = [] for idx, cond in enumerate(self.form_result['conditions']): labels.append(cond['field'].label("condition%s" % idx)) conditions = and_(*[getattr(cond['field'], cond['compare'])(cond['value']) for cond in self.form_result['conditions']]) labels = [] label_names = [] for idx, cond in enumerate(self.form_result['conditions']): field_name = 'field%s' % idx labels.append(cond['field'].label(field_name)) label_names.append(QLBWellForm.col_display_names.get(full_column_name(cond['field']), cond['field'].name)) if self.form_result['order_by'].name not in [cond['field'].name for cond in self.form_result['conditions']]: order_by = self.form_result['order_by'] field_name = 'field%s' % len(label_names) labels.append(order_by.label(field_name)) label_names.append(QLBWellForm.col_display_names.get(full_column_name(order_by), order_by.name)) for col in self.form_result['return_fields']: field_name = 'field%s' % len(label_names) labels.append(col.label(field_name)) label_names.append(QLBWellForm.col_display_names.get(full_column_name(col), col.name)) if self.form_result['group_by_directory']: field_name = 'field%s' % len(label_names) if self.form_result['order_by_direction'] == 'desc': order_by_dir = "desc" sort_column = func.max(self.form_result['order_by']) else: order_by_dir = "asc" sort_column = func.min(self.form_result['order_by']) labels.append(sort_column.label('group_col')) well_extremes = Session.query(QLBWell, *labels).join(QLBFile).filter(conditions) \ .group_by('qlbfile_dirname') \ .order_by('group_col %s' % order_by_dir) \ .options(contains_eager(QLBWell.file)) c.wells = self.__well_dirname_iterator(well_extremes, Session.query(QLBWell, *labels[:-1]).join(QLBFile), conditions) c.grouped_results = True else: if self.form_result['order_by_direction'] == "desc": sort_column = self.form_result['order_by'].desc() else: sort_column = self.form_result['order_by'] c.wells = Session.query(QLBWell, *labels).join(QLBFile).filter(conditions) \ .order_by(sort_column) \ .options(contains_eager(QLBWell.file)) c.grouped_results = False # TODO: support and, or c.field = self.form_result['conditions'][0]['field'] # TODO: fix (hack) c.compare = request.params.get('conditions-0.compare') c.value = self.form_result['conditions'][0]['value'] c.label_names = label_names return render('/box2/well_list.html')