Beispiel #1
0
 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')
Beispiel #2
0
 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')