コード例 #1
0
ファイル: product.py プロジェクト: v-makarenko/vtoolsmq
    def batch_plate_do_upload(self, id=None):
        batch_plate = self.__load_batch_plate(id)
        if not batch_plate:
            abort(404)
        box2 = self.form_result['box2']
        plate = self.form_result['plate']
        plate_type = batch_plate.batch.plate_type
        if plate_type.code == 'fvtitr' and len(plate.analyzed_wells) == 4:
            # if four wells, it's really a MFGCC (FVTITR FAM+/VIC+ should have 2)
            plate_type = Session.query(PlateType).filter_by(code='mfgcc').one()

        plateobj = save_plate_from_upload_request(request.POST['plate'], plate, box2, plate_type_obj=plate_type)

        # I want to put this in the form validator, but it's field dependent, so not right now
        if plate_type.code in ('mfgcc', 'bcc'):
            ok, message = validate_colorcomp_plate(plate)
            if not ok:
                response = self._batch_plate_upload_base(id)
                Session.rollback()
                return h.render_bootstrap_form(response, errors={'plate': message})
        
        Session.add(plateobj)
        if batch_plate.batch.plate_type.code == plate_type.code:
            batch_plate.plate = plateobj
        else:
            batch_plate.secondary_plate = plateobj

        batch_plate.qc_plate = self.form_result['qc_plate']
        batch_plate.plate_notes = self.form_result['plate_notes']
        Session.commit()

        session['flash'] = 'Plate linked.'
        session.save()
        return redirect(url(controller='metrics', action='per_plate', id=plateobj.id))
コード例 #2
0
ファイル: product.py プロジェクト: v-makarenko/vtoolsmq
    def register_algorithm(self):
        storage = QSAlgorithmSource(config)
        existing_folders = [tup[0] for tup in Session.query(ReprocessConfig.original_folder).all()]

        errors = dict()
        src_dir = self.form_result['src_dir']
        if src_dir in existing_folders:
            errors['src_dir'] = 'This algorithm has already been registered.'

        elif not storage.source_path_exists(src_dir):
            errors['src_dir'] = 'This algorithm is not accessible in the file system.'

        if self.form_result['peak_detection_version'] == (0,0):
            # this is arbitrary
            peak_detection_version = (0, QUANTASOFT_DIR_VERSION_RE.search(src_dir).group(1).split('_')[-1])
        else:
            peak_detection_version = self.form_result['peak_detection_version']

        if self.form_result['peak_quantitation_version'] == (0,0):
            peak_quantitation_version = (0, QUANTASOFT_DIR_VERSION_RE.search(src_dir).group(1).split('_')[-1])
        else:
            peak_quantitation_version = self.form_result['peak_quantitation_version']

        if errors:
            resp = self._algorithms_base()
            defaults = AlgorithmRegisterForm.from_python(self.form_result)
            return h.render_bootstrap_form(resp,
                defaults=defaults,
                errors=errors,
                error_formatters=h.tw_bootstrap_error_formatters)

        try:
            rp = ReprocessConfig(name=src_dir.split(os.path.sep)[0],
                                 code=self.form_result['code'],
                                 peak_detection_major=peak_detection_version[0],
                                 peak_detection_minor=peak_detection_version[1],
                                 peak_quant_major=peak_quantitation_version[0],
                                 peak_quant_minor=peak_quantitation_version[1],
                                 trigger_fixed_width=100,
                                 active=True,
                                 cluster_mode=ReprocessConfig.CLUSTER_MODE_CLUSTER,
                                 original_folder=src_dir)

            storage.add_reprocessor(src_dir, self.form_result['code'])
            Session.add(rp)
            Session.commit()
            session['flash'] = 'New algorithm reprocessor created.'
            session.save()
            return redirect(url(controller='product', action='algorithms'))

        except shutil.Error:
            session['flash'] = 'Could not copy source algorithm to destination.'
            session['flash_class'] = 'error'
            session.save()
            return redirect(url(controller='product', action='algorithms'))
        except IOError:
            session['flash'] = "Could not access the algorithm's file system."
            session['flash_class'] = 'error'
            session.save()
            return redirect(url(controller='product', action='algorithms'))
コード例 #3
0
ファイル: product.py プロジェクト: v-makarenko/vtoolsmq
    def batch_filter(self):
        criteria = self.form_result['plate_type']
        consumable_methods = (ManufacturingPlateBatch.DG_METHOD_WEIDMANN_V5,
                              ManufacturingPlateBatch.DG_METHOD_THINXXS_V2A,
                              ManufacturingPlateBatch.DG_METHOD_THINXXS_V2B,
                              ManufacturingPlateBatch.DG_METHOD_THINXXS_V2C)
        if criteria == 'CS' or criteria == 'CC':
            query = query_plate_type_dg_method(plate_type_code='mfgcc')
        elif criteria == 'CO':
            query = query_plate_type_dg_method(plate_type_code='mfgco')
        elif criteria == 'CSFV':
            query = query_plate_type_dg_method(plate_type_code='fvtitr')
        elif criteria == 'QP':
            query = query_plate_type_dg_method(plate_type_code='scc')
        else:
            query = Session.query(ManufacturingPlateBatch)
        
        query = query.order_by('creation_date desc, mfg_plate_batch.name')

        c.paginator = paginate.Page(
            query,
            page=int(request.params.get('page', 1)),
            items_per_page = 15
        )

        c.pager_kwargs = {'plate_type': self.form_result['plate_type']}
        c.plate_type_field = dg_plate_type_field()
        response = render('/product/batch/list.html')
        # TODO: need to do from_python?
        return h.render_bootstrap_form(response, defaults=self.form_result)
コード例 #4
0
ファイル: cutter.py プロジェクト: v-makarenko/vtoolsmq
 def multipick(self):
     response = self._multipick_base()
     defaults = {'left_padding': 500,
                 'right_padding': 500,
                 'allow_methylation': '',
                 'singles_as_doubles': '',
                 'scoring_function': 'multi_mean'}
     return h.render_bootstrap_form(response, defaults=defaults)
コード例 #5
0
ファイル: qc_chart.py プロジェクト: v-makarenko/vtoolsmq
 def search(self, *args, **kwargs):
     response = self._search_query_base()
     defaults = dict(request.params)
     if not request.params.get('group_by_plate'):
         defaults['group_by_plate'] = c.default_group_by_plate
     if not request.params.get('start_date'):
         defaults['start_date'] = c.default_start_date.strftime('%m/%d/%Y')
     return h.render_bootstrap_form(response, defaults=defaults)
コード例 #6
0
ファイル: product.py プロジェクト: v-makarenko/vtoolsmq
 def batch_plate_upload(self, id=None):
     response = self._batch_plate_upload_base(id)
     override_plate_type = request.params.get('plate_type_code', None)
     plate_defaults = self.__load_batch_plate_into_formvars(c.plate)
     if override_plate_type:
         plate_type = Session.query(PlateType).filter_by(code=override_plate_type).first()
         if plate_type:
             # weird
             plate_defaults['plate_type'] = PlateTypeConverter.from_python(plate_type.id)
     return h.render_bootstrap_form(response, defaults=plate_defaults)
コード例 #7
0
ファイル: box2.py プロジェクト: v-makarenko/vtoolsmq
    def upload_file(self, id=None):
        self.__setup_box2_code_context(id)
        source = QLStorageSource(config)
        basename = upload_basename(self.form_result['file'].filename)
        errors = {}

        existing_path = self.__file_name_query(c.box2.id, basename)
        if existing_path and not self.form_result['file_id'] == existing_path.id:
            # todo, if existing update path
            errors = dict(file='File with this name already exists for this reader.  Use the Update page.')

        path = "%s_%s" % (int(round(time.time())), basename)
        thefile = self.form_result['file'].file

        filerec = self.__file_id_query(c.box2.id, self.form_result['file_id'])
        new_record = False
        if not filerec:
            filerec = Box2File(box2_id=c.box2.id)
            new_record = True

        filerec.name = basename
        filerec.deleted = False
        filerec.path = path
        filerec.updated = datetime.datetime.now()
        filerec.description = self.form_result['description']
        filerec.mime_type = guess_type(basename)[0] or 'text/plain'


        if errors:
            response = self._upload_base(id)
            return h.render_bootstrap_form(response, errors=errors, error_formatters=h.tw_bootstrap_error_formatters)

        try:
            attachment_dir = self.__upload_file_dir(c.box2)
            if not os.path.exists(attachment_dir):
                os.mkdir(attachment_dir)

            permanent_path = self.__upload_file_path(c.box2, path)
            permanent_file = open(permanent_path, 'wb')
            shutil.copyfileobj(thefile, permanent_file)
            thefile.close()
            permanent_file.close()

            filerec.size = os.stat(permanent_path).st_size
            if new_record:
                Session.add(filerec)
            else:
                Session.merge(filerec)
            Session.commit()
            session['flash'] = 'File uploaded.'
            write_success = True
        except Exception, e:
            session['flash'] = 'Could not upload file: %s' % str(e)
            session['flash_class'] = 'error'
            write_success = False
コード例 #8
0
ファイル: groove.py プロジェクト: v-makarenko/vtoolsmq
 def create(self):
     setup, errors = self.__update_groove_record()
     if errors:
         response = self._new_base()
         defaults = GrooveCreateSetupForm().from_python(self.form_result)
         return h.render_bootstrap_form(
             response, defaults=defaults, errors=errors, error_formatters=h.tw_bootstrap_error_formatters
         )
     session["flash"] = "Plate created."
     session.save()
     return redirect(url(controller="groove", action="plates", id=setup.id))
コード例 #9
0
ファイル: assay_group.py プロジェクト: v-makarenko/vtoolsmq
 def edit(self, id=None):
     if not id:
         abort(404)
     
     tag = Session.query(SequenceGroupTag).get(int(id))
     c.tag = tag
     if not tag:
         abort(404)
     
     response = self._edit_base()
     return h.render_bootstrap_form(response, defaults=tag.__dict__)
コード例 #10
0
ファイル: cutter.py プロジェクト: v-makarenko/vtoolsmq
    def index(self):
        assay_field = fl.sequence_group_field(blank=True, selected=request.params.get('assay', None))

        # this will need to change based on the mode...
        enzyme_field = fl.enzyme_select_field()

        c.assays = assay_field
        c.enzymes = enzyme_field
        
        response = render('/cutter/index.html')
        defaults = {'left_padding': 500, 'right_padding': 500}
        return h.render_bootstrap_form(response, defaults=defaults)
コード例 #11
0
ファイル: product.py プロジェクト: v-makarenko/vtoolsmq
 def batch_create(self):
     try:
         self.__update_batch_record()
     except IntegrityError:
         response = self._batch_new_base()
         defaults = PlateBatchForm().from_python(self.form_result)
         return h.render_bootstrap_form(response,
                                        defaults=defaults,
                                        errors={'name': 'A batch already exists with this name.'},
                                        error_formatters=h.tw_bootstrap_error_formatters)
     
     session['flash'] = 'Batch created.'
     session.save()
     return redirect(url(controller='product', action='batch_list'))
コード例 #12
0
ファイル: trend.py プロジェクト: v-makarenko/vtoolsmq
 def category(self, *args, **kwargs):
     response = self._category_query_base()
     defaults = dict(request.params)
     if not request.params.get('start_date'):
         defaults['start_date'] = c.default_start_date.strftime('%m/%d/%Y')
     return h.render_bootstrap_form(response, defaults=defaults)
コード例 #13
0
ファイル: product.py プロジェクト: v-makarenko/vtoolsmq
 def logfile(self):
     response = self._logfile_base()
     return h.render_bootstrap_form(response)
コード例 #14
0
ファイル: product.py プロジェクト: v-makarenko/vtoolsmq
 def batch_plate_template(self, id=None):
     return h.render_bootstrap_form(self._batch_plate_template_base(id), defaults=self.__load_batch_plate_into_formvars(c.plate))
コード例 #15
0
ファイル: product.py プロジェクト: v-makarenko/vtoolsmq
 def algorithms(self):
     response = self._algorithms_base()
     return h.render_bootstrap_form(response)
コード例 #16
0
ファイル: auth.py プロジェクト: v-makarenko/vtoolsmq
 def login(self):
     response = self._login_base()
     defaults = {"came_from": request.params.get("came_from", url(controller="auth", action="logged_in"))}
     return h.render_bootstrap_form(response, defaults=defaults)
コード例 #17
0
ファイル: groove.py プロジェクト: v-makarenko/vtoolsmq
 def list(self):
     response = self._list_base()
     return h.render_bootstrap_form(response)
コード例 #18
0
ファイル: assay_group.py プロジェクト: v-makarenko/vtoolsmq
 def new(self):
     response = self._new_base()
     return h.render_bootstrap_form(response)
コード例 #19
0
ファイル: product.py プロジェクト: v-makarenko/vtoolsmq
 def algcommand(self, *args, **kwargs):
     response = self._algcommand_base()
     return h.render_bootstrap_form(response)
コード例 #20
0
ファイル: groove.py プロジェクト: v-makarenko/vtoolsmq
 def edit(self, id=None):
     response = self._edit_base(id)
     return h.render_bootstrap_form(response, defaults=self.__load_setup_into_formvars(c.setup))
コード例 #21
0
ファイル: qc_chart.py プロジェクト: v-makarenko/vtoolsmq
 def reader_qcc(self, *args, **kwargs):
     query, objects_expected = build_reader_query(self.form_result)
     c.back_url = url(controller='qc_chart', action='reader')
     response = self._process_and_display_qcc(query, objects_expected)
     return h.render_bootstrap_form(response, defaults=ReaderQueryForm.from_python(self.form_result))
コード例 #22
0
ファイル: groove.py プロジェクト: v-makarenko/vtoolsmq
 def new(self):
     response = self._new_base()
     now = datetime.now()
     return h.render_bootstrap_form(response, defaults={"creation_date": now.strftime("%Y%m%d")})
コード例 #23
0
ファイル: box2.py プロジェクト: v-makarenko/vtoolsmq
 def robocopy(self):
     self.__setup_robocopy_context()
     response = render("/box2/robocopy.html")
     return h.render_bootstrap_form(response)
コード例 #24
0
ファイル: product.py プロジェクト: v-makarenko/vtoolsmq
 def batch_editplate(self, id=None):
     response = self._batch_editplate_base(id)
     return h.render_bootstrap_form(response, defaults=self.__load_batch_plate_into_formvars(c.plate))
コード例 #25
0
ファイル: trend.py プロジェクト: v-makarenko/vtoolsmq
 def search_trend(self, *args, **kwargs):
     query, objects_expected = build_search_query(self.form_result)
     c.back_url = url(controller='trend', action='search')
     response = self._process_and_display_trends(query, objects_expected)
     return h.render_bootstrap_form(response, defaults=SearchQueryForm.from_python(self.form_result))
コード例 #26
0
ファイル: box2.py プロジェクト: v-makarenko/vtoolsmq
 def update(self, id=None):
     file_id = self.form_result['file_id']
     response = self._update_base(file_id, id)
     thefile = self.__file_id_query(c.box2.id, file_id)
     
     return h.render_bootstrap_form(response, defaults={'file_id': thefile.id, 'description': thefile.description})
コード例 #27
0
ファイル: box2.py プロジェクト: v-makarenko/vtoolsmq
 def upload(self, id=None):
     response = self._upload_base(code=id)
     return h.render_bootstrap_form(response)
コード例 #28
0
ファイル: admin.py プロジェクト: v-makarenko/vtoolsmq
 def register_lab(self):
     response = self._register_lab_base()
     return h.render_bootstrap_form(response)
コード例 #29
0
ファイル: template.py プロジェクト: v-makarenko/vtoolsmq
 def validation(self, *args, **kwargs):
     response = self._validation_base()
     plate_template_id = request.params.get('plate_template_id', '')
     return h.render_bootstrap_form(response, defaults={'plate_template_id': plate_template_id})