コード例 #1
0
ファイル: barcode_util.py プロジェクト: ElDeveloper/labadmin
    def get(self):
        barcode = self.get_argument('barcode', None)
        if barcode is None:
            self.render("barcode_util.html", div_and_msg=None,
                        barcode_projects=[], parent_project=None,
                        project_names=[], barcode=None, email_type=None,
                        barcode_info=None, proj_barcode_info=None, msgs=None,
                        currentuser=self.current_user)
            return
        # gather info to display
        barcode_details = db.get_barcode_details(barcode)
        if len(barcode_details) == 0:
            div_id = "invalid_barcode"
            message = ("Barcode %s does not exist in the database" %
                       barcode)
            self.render("barcode_util.html",
                        div_and_msg=(div_id, message, barcode),
                        barcode_projects=[], parent_project=None,
                        project_names=[],
                        barcode=barcode, email_type=None,
                        barcode_info=None, proj_barcode_info=None,
                        msgs=None, currentuser=self.current_user)
            return

        barcode_projects, parent_project = db.getBarcodeProjType(
            barcode)
        project_names = db.getProjectNames()

        # barcode exists get general info
        if barcode_details['status'] is None:
            barcode_details['status'] = 'Received'
        if barcode_details['biomass_remaining'] is None:
            barcode_details['biomass_remaining'] = 'Unknown'
        if barcode_details['sequencing_status'] is None:
            barcode_details['sequencing_status']
        if barcode_details['obsolete'] is None:
            barcode_details['obsolete'] = 'N'
        div_id = message = ""
        if (barcode_details['obsolete'] == "Y"):
                # the barcode is obsolete
                div_id = "obsolete"
                message = "Barcode is Obsolete"
        # get project info for div
        ag_details = []
        if parent_project == 'American Gut':
            div_id, message, ag_details = self.get_ag_details(barcode)
        else:
            div_id = "verified"
            message = "Barcode Info is correct"
        div_and_msg = (div_id, message, barcode)
        self.render("barcode_util.html", div_and_msg=div_and_msg,
                    barcode_projects=barcode_projects,
                    parent_project=parent_project,
                    project_names=project_names,
                    barcode=barcode, email_type=None,
                    barcode_info=barcode_details,
                    proj_barcode_info=ag_details, msgs=None,
                    currentuser=self.current_user)
コード例 #2
0
ファイル: ag_search.py プロジェクト: josenavas/labadmin
    def post(self):
        term = self.get_argument('search_term')
        results = {}
        # search participant info
        logins = db.search_participant_info(term)
        results = set(logins)
        # search kit info and add to resluts
        logins = db.search_kits(term)
        results = results | set(logins)
        #  search barcode and add to results
        logins = db.search_barcodes(term)
        results = results | set(logins)
        # search handout kits
        handouts = db.search_handout_kits(term)

        # now take the ag_login_ids and collect the information to display
        display_results = []  # list of dictionatries
        for login in results:
            login_display = {}
            login_display['login_info'] = db.get_login_info(login)
            login_display['humans'] = db.getHumanParticipants(
                login)
            login_display['animals'] = db.getAnimalParticipants(
                login)
            login_display['kit'] = db.get_kit_info_by_login(login)
            for kit in login_display['kit']:
                barcode_info = {}
                ag_barcodes = db.get_barcode_info_by_kit_id(
                    kit['ag_kit_id'])
                barcode_info = {}
                for ag_barcode in ag_barcodes:
                    barcode_info[ag_barcode['barcode']] = {}
                    barcode_info[ag_barcode['barcode']]['ag_info'] = ag_barcode
                    lab_barcode_info = db.get_barcode_details(
                        ag_barcode['barcode'])
                    plate = db.get_plate_for_barcode(
                        ag_barcode['barcode'])
                    barcode_info[ag_barcode['barcode']]['barcode_info'] = \
                        lab_barcode_info
                    barcode_info[ag_barcode['barcode']]['plate'] = plate
                kit['barcode_info'] = barcode_info
            display_results.append(login_display)

        # now render the page
        self.render("ag_search.html",
                    results=display_results,
                    handouts=handouts,
                    currentuser=self.current_user)
コード例 #3
0
    def post(self):
        term = self.get_argument('search_term')
        results = {}
        # search participant info
        logins = db.search_participant_info(term)
        results = set(logins)
        # search kit info and add to resluts
        logins = db.search_kits(term)
        results = results | set(logins)
        #  search barcode and add to results
        logins = db.search_barcodes(term)
        results = results | set(logins)
        # search handout kits
        handouts = db.search_handout_kits(term)

        # now take the ag_login_ids and collect the information to display
        display_results = []  # list of dictionatries
        for login in results:
            login_display = {}
            login_display['login_info'] = db.get_login_info(login)
            login_display['humans'] = db.getHumanParticipants(
                login)
            login_display['animals'] = db.getAnimalParticipants(
                login)
            login_display['kit'] = db.get_kit_info_by_login(login)
            for kit in login_display['kit']:
                barcode_info = {}
                ag_barcodes = db.get_barcode_info_by_kit_id(
                    kit['ag_kit_id'])
                barcode_info = {}
                for ag_barcode in ag_barcodes:
                    barcode_info[ag_barcode['barcode']] = {}
                    barcode_info[ag_barcode['barcode']]['ag_info'] = ag_barcode
                    lab_barcode_info = db.get_barcode_details(
                        ag_barcode['barcode'])
                    plate = db.get_plate_for_barcode(
                        ag_barcode['barcode'])
                    barcode_info[ag_barcode['barcode']]['barcode_info'] = \
                        lab_barcode_info
                    barcode_info[ag_barcode['barcode']]['plate'] = plate
                kit['barcode_info'] = barcode_info
            display_results.append(login_display)

        # now render the page
        self.render("ag_search.html", results=display_results,
                    handouts=handouts, currentuser=self.current_user)
コード例 #4
0
    def test_post(self):
        data = {
            'barcode': '000029153',
            'parent_project': 'American+Gut',
            'postmark_date': '2015-06-25',
            'scan_date': '2015-07-01',
            'bstatus': 'Recieved',
            'biomass_remaining': 'Unknown',
            'sequencing_status': 'WAITING',
            'obsolete_status': 'N',
            'sent_date': '2015-01-07',
            'login_user': '******',
            'login_email': 'REMOVED',
            'email_type': '1',
            'sample_date': '2015-06-24',
            'sample_time': '22%3A50%3A00',
            'sample_site': 'Stool',
            'other_text': 'REMOVED',
            'send_mail': 'send_mail',
        }

        self.mock_login_admin()

        # check normal behaviour
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertIn('Barcode %s general details updated' % data['barcode'],
                      response.body)
        self.assertIn('Project successfully changed', response.body)
        dbInfo = db.get_barcode_details(data['barcode'])
        self.assertEqual(date(2015, 6, 25), dbInfo['sample_postmark_date'])
        self.assertEqual(date(2015, 7, 1), dbInfo['scan_date'])

        # check that postmark_date and scan_date is set to None
        # if missed as an argument
        del data['postmark_date']
        del data['scan_date']
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        dbInfo = db.get_barcode_details(data['barcode'])
        self.assertEqual(None, dbInfo['sample_postmark_date'])
        self.assertEqual(None, dbInfo['scan_date'])
        data['postmark_date'] = '2015-06-25'
        data['scan_date'] = '2015-07-01'

        # TODO: Stefan Janssen: looks like we can successfully update a non
        # existing barcode!!
        data['barcode'] = 'rdskjmxykgrlyh'
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertTrue(
            '<p> Barcode %s general details updated </p>' % data['barcode'],
            response.body)
        data['barcode'] = '000029153'

        # check that update failes for wrong data types
        data['postmark_date'] = 'invalid date'
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertIn("Barcode %s general details failed" % data['barcode'],
                      response.body)

        # test changing the barcode's project to a non existing one
        # TODO: Stefan Janssen: I think this should not result in a positive
        # message like 'Project successfully changed', because this does not
        # trigger the creation of a new project!
        data['project'] = 'NotAProject'
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertTrue(
            '<p> Barcode %s general details updated </p>' % data['barcode'],
            response.body)
        self.assertIn('Project successfully changed', response.body)

        # check updating a AGP barcode
        del data['project']
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertIn(
            "Barcode %s AG info was successfully updated" % data['barcode'],
            response.body)

        data = {
            'barcode': db.ut_get_arbitrary_non_ag_barcode(),
            'parent_project': db.getProjectNames()[1],
            'scan_date': '2014-12-15',
            'bstatus': 'Recieved',
            'biomass_remaining': 'Unknown',
            'sequencing_status': 'WAITING',
            'obsolete_status': 'N',
            'project': 'UNKNOWN',
        }

        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertNotIn(
            "Barcode %s AG info was successfully updated" % data['barcode'],
            response.body)
        self.assertTrue(
            '<p> Barcode %s general details updated </p>' % data['barcode'],
            response.body)
コード例 #5
0
ファイル: barcode_util.py プロジェクト: biocore/labadmin
    def get(self):
        barcode = self.get_argument('barcode', None)
        if barcode is None:
            self.render("barcode_util.html",
                        div_and_msg=None,
                        barcode_projects=[],
                        parent_project=None,
                        project_names=[],
                        barcode=None,
                        email_type=None,
                        barcode_info=None,
                        proj_barcode_info=None,
                        msgs=None,
                        currentuser=self.current_user)
            return
        # gather info to display
        barcode_details = db.get_barcode_details(barcode)
        if len(barcode_details) == 0:
            div_id = "invalid_barcode"
            message = ("Barcode %s does not exist in the database" % barcode)
            self.render("barcode_util.html",
                        div_and_msg=(div_id, message, barcode),
                        barcode_projects=[],
                        parent_project=None,
                        project_names=[],
                        barcode=barcode,
                        email_type=None,
                        barcode_info=None,
                        proj_barcode_info=None,
                        msgs=None,
                        currentuser=self.current_user)
            return

        barcode_projects, parent_project = db.getBarcodeProjType(barcode)
        project_names = db.getProjectNames()

        # barcode exists get general info
        # TODO (Stefan Janssen): check spelling of "received", i.e. tests in
        # the template check for 'Recieved'. I think the logic is broken due
        # to that.
        if barcode_details['status'] is None:
            barcode_details['status'] = 'Received'
        if barcode_details['biomass_remaining'] is None:
            barcode_details['biomass_remaining'] = 'Unknown'
        if barcode_details['sequencing_status'] is None:
            barcode_details['sequencing_status']
        if barcode_details['obsolete'] is None:
            barcode_details['obsolete'] = 'N'
        div_id = message = ""
        if (barcode_details['obsolete'] == "Y"):
            # the barcode is obsolete
            div_id = "obsolete"
            # TODO: Stefan: why is that set here, as far as I see, this
            # message will in all cases be overwritten!
            message = "Barcode is Obsolete"
        # get project info for div
        ag_details = []
        if parent_project == 'American Gut':
            div_id, message, ag_details = self.get_ag_details(barcode)
        else:
            div_id = "verified"
            message = "Barcode Info is correct"
        div_and_msg = (div_id, message, barcode)
        self.render("barcode_util.html",
                    div_and_msg=div_and_msg,
                    barcode_projects=barcode_projects,
                    parent_project=parent_project,
                    project_names=project_names,
                    barcode=barcode,
                    email_type=None,
                    barcode_info=barcode_details,
                    proj_barcode_info=ag_details,
                    msgs=None,
                    currentuser=self.current_user)
コード例 #6
0
    def get(self):
        barcode = self.get_argument('barcode', None)
        if barcode is None:
            self.render("barcode_util.html",
                        div_and_msg=None,
                        barcode_projects=[],
                        parent_project=None,
                        project_names=[],
                        barcode=None,
                        email_type=None,
                        barcode_info=None,
                        proj_barcode_info=None,
                        msgs=None,
                        currentuser=self.current_user)
            return
        # gather info to display
        barcode_details = db.get_barcode_details(barcode)
        if len(barcode_details) == 0:
            div_id = "invalid_barcode"
            message = ("Barcode %s does not exist in the database" % barcode)
            self.render("barcode_util.html",
                        div_and_msg=(div_id, message, barcode),
                        barcode_projects=[],
                        parent_project=None,
                        project_names=[],
                        barcode=barcode,
                        email_type=None,
                        barcode_info=None,
                        proj_barcode_info=None,
                        msgs=None,
                        currentuser=self.current_user)
            return

        barcode_projects, parent_project = db.getBarcodeProjType(barcode)
        project_names = db.getProjectNames()

        # barcode exists get general info
        if barcode_details['status'] is None:
            barcode_details['status'] = 'Received'
        if barcode_details['biomass_remaining'] is None:
            barcode_details['biomass_remaining'] = 'Unknown'
        if barcode_details['sequencing_status'] is None:
            barcode_details['sequencing_status']
        if barcode_details['obsolete'] is None:
            barcode_details['obsolete'] = 'N'
        div_id = message = ""
        if (barcode_details['obsolete'] == "Y"):
            # the barcode is obsolete
            div_id = "obsolete"
            message = "Barcode is Obsolete"
        # get project info for div
        ag_details = []
        if parent_project == 'American Gut':
            div_id, message, ag_details = self.get_ag_details(barcode)
        else:
            div_id = "verified"
            message = "Barcode Info is correct"
        div_and_msg = (div_id, message, barcode)
        self.render("barcode_util.html",
                    div_and_msg=div_and_msg,
                    barcode_projects=barcode_projects,
                    parent_project=parent_project,
                    project_names=project_names,
                    barcode=barcode,
                    email_type=None,
                    barcode_info=barcode_details,
                    proj_barcode_info=ag_details,
                    msgs=None,
                    currentuser=self.current_user)
コード例 #7
0
ファイル: test_barcode_util.py プロジェクト: biocore/labadmin
    def test_post(self):
        data = {
            "barcode": "000029153",
            "parent_project": "American+Gut",
            "postmark_date": "2015-06-25",
            "scan_date": "2015-07-01",
            "bstatus": "Recieved",
            "biomass_remaining": "Unknown",
            "sequencing_status": "WAITING",
            "obsolete_status": "N",
            "sent_date": "2015-01-07",
            "login_user": "******",
            "login_email": "REMOVED",
            "email_type": "1",
            "sample_date": "2015-06-24",
            "sample_time": "22%3A50%3A00",
            "sample_site": "Stool",
            "other_text": "REMOVED",
            "send_mail": "send_mail",
        }

        self.mock_login_admin()

        # check normal behaviour
        response = self.post("/barcode_util/", data)
        self.assertEqual(response.code, 200)
        self.assertIn("Barcode %s general details updated" % data["barcode"], response.body)
        self.assertIn("Project successfully changed", response.body)
        dbInfo = db.get_barcode_details(data["barcode"])
        self.assertEqual(date(2015, 6, 25), dbInfo["sample_postmark_date"])
        self.assertEqual(date(2015, 7, 1), dbInfo["scan_date"])

        # check that postmark_date and scan_date is set to None
        # if missed as an argument
        del data["postmark_date"]
        del data["scan_date"]
        response = self.post("/barcode_util/", data)
        self.assertEqual(response.code, 200)
        dbInfo = db.get_barcode_details(data["barcode"])
        self.assertEqual(None, dbInfo["sample_postmark_date"])
        self.assertEqual(None, dbInfo["scan_date"])
        data["postmark_date"] = "2015-06-25"
        data["scan_date"] = "2015-07-01"

        # TODO: Stefan Janssen: looks like we can successfully update a non
        # existing barcode!!
        data["barcode"] = "rdskjmxykgrlyh"
        response = self.post("/barcode_util/", data)
        self.assertEqual(response.code, 200)
        self.assertTrue("<p> Barcode %s general details updated </p>" % data["barcode"], response.body)
        data["barcode"] = "000029153"

        # check that update failes for wrong data types
        data["postmark_date"] = "invalid date"
        response = self.post("/barcode_util/", data)
        self.assertEqual(response.code, 200)
        self.assertIn("Barcode %s general details failed" % data["barcode"], response.body)

        # test changing the barcode's project to a non existing one
        # TODO: Stefan Janssen: I think this should not result in a positive
        # message like 'Project successfully changed', because this does not
        # trigger the creation of a new project!
        data["project"] = "NotAProject"
        response = self.post("/barcode_util/", data)
        self.assertEqual(response.code, 200)
        self.assertTrue("<p> Barcode %s general details updated </p>" % data["barcode"], response.body)
        self.assertIn("Project successfully changed", response.body)

        # check updating a AGP barcode
        del data["project"]
        response = self.post("/barcode_util/", data)
        self.assertEqual(response.code, 200)
        self.assertIn("Barcode %s AG info was successfully updated" % data["barcode"], response.body)

        # check updating a non-AGP barcode
        data = {
            "barcode": "000033786",
            "parent_project": "PROJECT4",
            "scan_date": "2016-10-31",
            "bstatus": "Recieved",
            "biomass_remaining": "Unknown",
            "sequencing_status": "WAITING",
            "obsolete_status": "N",
            "project": "UNKNOWN",
        }
        response = self.post("/barcode_util/", data)
        self.assertEqual(response.code, 200)
        self.assertNotIn("Barcode %s AG info was successfully updated" % data["barcode"], response.body)
        self.assertTrue("<p> Barcode %s general details updated </p>" % data["barcode"], response.body)
コード例 #8
0
ファイル: barcode_util.py プロジェクト: biocore/labadmin
    def get(self):
        barcode = self.get_argument('barcode', None)
        if barcode is None:
            self.render("barcode_util.html", div_and_msg=None,
                        barcode_projects=[], parent_project=None,
                        project_names=[], barcode=None, email_type=None,
                        barcode_info=None, proj_barcode_info=None, msgs=None,
                        currentuser=self.current_user)
            return
        # gather info to display
        barcode_details = db.get_barcode_details(barcode)
        if len(barcode_details) == 0:
            div_id = "invalid_barcode"
            message = ("Barcode %s does not exist in the database" %
                       barcode)
            self.render("barcode_util.html",
                        div_and_msg=(div_id, message, barcode),
                        barcode_projects=[], parent_project=None,
                        project_names=[],
                        barcode=barcode, email_type=None,
                        barcode_info=None, proj_barcode_info=None,
                        msgs=None, currentuser=self.current_user)
            return

        barcode_projects, parent_project = db.getBarcodeProjType(
            barcode)
        project_names = db.getProjectNames()

        # barcode exists get general info
        # TODO (Stefan Janssen): check spelling of "received", i.e. tests in
        # the template check for 'Recieved'. I think the logic is broken due
        # to that.
        if barcode_details['status'] is None:
            barcode_details['status'] = 'Received'
        if barcode_details['biomass_remaining'] is None:
            barcode_details['biomass_remaining'] = 'Unknown'
        if barcode_details['sequencing_status'] is None:
            barcode_details['sequencing_status']
        if barcode_details['obsolete'] is None:
            barcode_details['obsolete'] = 'N'
        div_id = message = ""
        if (barcode_details['obsolete'] == "Y"):
                # the barcode is obsolete
                div_id = "obsolete"
                # TODO: Stefan: why is that set here, as far as I see, this
                # message will in all cases be overwritten!
                message = "Barcode is Obsolete"
        # get project info for div
        ag_details = []
        if parent_project == 'American Gut':
            div_id, message, ag_details = self.get_ag_details(barcode)
        else:
            div_id = "verified"
            message = "Barcode Info is correct"
        div_and_msg = (div_id, message, barcode)
        self.render("barcode_util.html", div_and_msg=div_and_msg,
                    barcode_projects=barcode_projects,
                    parent_project=parent_project,
                    project_names=project_names,
                    barcode=barcode, email_type=None,
                    barcode_info=barcode_details,
                    proj_barcode_info=ag_details, msgs=None,
                    currentuser=self.current_user)
コード例 #9
0
ファイル: barcode_util.py プロジェクト: mortonjt/labadmin
    def post(self):
        barcode = self.get_argument('barcode', None)
        bstatus = self.get_argument('bstatus', None)
        postmark_date = self.get_argument('postmark_date', None)
        scan_date = self.get_argument('scan_date', None)
        biomass_remaining_value = self.get_argument('biomass_remaining_value',
                                                    None)
        sequencing_status = self.get_argument('sequencing_status', None)
        obsolete_status = self.get_argument('obsolete_status', None)
        projects = set(self.get_arguments('project'))
        barcode_projects = 'Unknown'
        ag_details = {}
        if bstatus is None:
            # gather info to display
            barcode_details = db.get_barcode_details(barcode)
            if len(barcode_details) == 0:
                div_id = "invalid_barcode"
                message = ("Barcode %s does not exist in the database" %
                           barcode)
                self.render("barcode_util.html",
                            div_and_msg=(div_id, message, barcode),
                            barcode_projects=[],
                            parent_project=None,
                            project_names=[],
                            barcode=barcode,
                            email_type=None,
                            barcode_info=None,
                            proj_barcode_info=None,
                            msgs=None,
                            currentuser=self.current_user)
                return
            else:
                barcode_projects, parent_project = db.getBarcodeProjType(
                    barcode)
                project_names = db.getProjectNames()

                # barcode exists get general info
                if barcode_details['status'] is None:
                    barcode_details['status'] = 'Received'
                if barcode_details['biomass_remaining'] is None:
                    barcode_details['biomass_remaining'] = 'Unknown'
                if barcode_details['sequencing_status'] is None:
                    barcode_details['sequencing_status']
                if barcode_details['obsolete'] is None:
                    barcode_details['obsolete'] = 'N'
                div_id = message = email_type = ""
                ag_details = []
                if (barcode_details['obsolete'] == "Y"):
                    #the barcode is obsolete
                    div_id = "obsolete"
                    message = "Barcode is Obsolete"
                #get project info for div
                if parent_project == 'American Gut':
                    div_id, message, ag_details = self.get_ag_details(barcode)
                else:
                    div_id = "verified"
                    message = "Barcode Info is correct"
            div_and_msg = (div_id, message, barcode)
            self.render("barcode_util.html",
                        div_and_msg=div_and_msg,
                        barcode_projects=barcode_projects,
                        parent_project=parent_project,
                        project_names=project_names,
                        barcode=barcode,
                        email_type=None,
                        barcode_info=barcode_details,
                        proj_barcode_info=ag_details,
                        msgs=None,
                        currentuser=self.current_user)
        else:
            #now we collect data and update based on forms
            #first update general barcode info
            #Set to non to make sure no conflicts with new date typing in DB
            if not postmark_date:
                postmark_date = None
            if not scan_date:
                scan_date = None
            try:
                db.updateBarcodeStatus('Received', postmark_date, scan_date,
                                       barcode, biomass_remaining_value,
                                       sequencing_status, obsolete_status)
                msg1 = "Barcode %s general details updated" % barcode
            except:
                msg1 = "Barcode %s general details failed" % barcode

            msg2 = msg3 = msg4 = None
            exisiting_proj, parent_project = db.getBarcodeProjType(barcode)
            exisiting_proj = set(exisiting_proj.split(','))
            if exisiting_proj != projects:
                try:
                    add_projects = projects.difference(exisiting_proj)
                    rem_projects = exisiting_proj.difference(projects)
                    print exisiting_proj
                    print projects
                    print add_projects
                    print rem_projects
                    db.setBarcodeProjects(barcode, add_projects, rem_projects)
                    msg4 = "Project successfully changed"
                except:
                    msg4 = "Error changing project"

                new_proj, parent_project = db.getBarcodeProjType(barcode)
            if parent_project == 'American Gut':
                msg2, msg3 = self.update_ag_barcode(barcode)
            self.render("barcode_util.html",
                        div_and_msg=None,
                        barcode_projects=[],
                        parent_project=None,
                        project_names=[],
                        barcode=None,
                        email_type=None,
                        barcode_info=None,
                        proj_barcode_info=None,
                        msgs=(msg1, msg2, msg3, msg4),
                        currentuser=self.current_user)
コード例 #10
0
ファイル: barcode_util.py プロジェクト: mortonjt/labadmin
    def post(self):
        barcode = self.get_argument('barcode', None)
        bstatus = self.get_argument('bstatus', None)
        postmark_date = self.get_argument('postmark_date', None)
        scan_date = self.get_argument('scan_date', None)
        biomass_remaining_value = self.get_argument('biomass_remaining_value',
                                                    None)
        sequencing_status = self.get_argument('sequencing_status', None)
        obsolete_status = self.get_argument('obsolete_status', None)
        projects = set(self.get_arguments('project'))
        barcode_projects = 'Unknown'
        ag_details = {}
        if bstatus is None:
            # gather info to display
            barcode_details = db.get_barcode_details(barcode)
            if len(barcode_details) == 0:
                div_id = "invalid_barcode"
                message = ("Barcode %s does not exist in the database" %
                           barcode)
                self.render("barcode_util.html",
                            div_and_msg=(div_id, message, barcode),
                            barcode_projects=[], parent_project=None, project_names=[],
                            barcode=barcode, email_type=None,
                            barcode_info=None, proj_barcode_info=None,
                            msgs=None, currentuser=self.current_user)
                return
            else:
                barcode_projects, parent_project = db.getBarcodeProjType(
                    barcode)
                project_names = db.getProjectNames()

                # barcode exists get general info
                if barcode_details['status'] is None:
                    barcode_details['status'] = 'Received'
                if barcode_details['biomass_remaining'] is None:
                    barcode_details['biomass_remaining'] = 'Unknown'
                if barcode_details['sequencing_status'] is None:
                    barcode_details['sequencing_status']
                if barcode_details['obsolete'] is None:
                    barcode_details['obsolete'] = 'N'
                div_id = message = email_type = ""
                ag_details = []
                if (barcode_details['obsolete'] == "Y"):
                        #the barcode is obsolete
                        div_id = "obsolete"
                        message = "Barcode is Obsolete"
                #get project info for div
                if parent_project == 'American Gut':
                    div_id, message, ag_details = self.get_ag_details(barcode)
                else:
                    div_id = "verified"
                    message = "Barcode Info is correct"
            div_and_msg = (div_id, message, barcode)
            self.render("barcode_util.html", div_and_msg=div_and_msg,
                        barcode_projects=barcode_projects, parent_project=parent_project,
                        project_names=project_names,
                        barcode=barcode, email_type=None,
                        barcode_info=barcode_details,
                        proj_barcode_info=ag_details, msgs=None,
                        currentuser=self.current_user)
        else:
            #now we collect data and update based on forms
            #first update general barcode info
            #Set to non to make sure no conflicts with new date typing in DB
            if not postmark_date:
                postmark_date = None
            if not scan_date:
                scan_date = None
            try:
                db.updateBarcodeStatus('Received', postmark_date,
                                                   scan_date, barcode,
                                                   biomass_remaining_value,
                                                   sequencing_status,
                                                   obsolete_status)
                msg1 = "Barcode %s general details updated" % barcode
            except:
                msg1 = "Barcode %s general details failed" % barcode

            msg2 = msg3 = msg4 = None
            exisiting_proj, parent_project = db.getBarcodeProjType(
                barcode)
            exisiting_proj = set(exisiting_proj.split(','))
            if exisiting_proj != projects:
                try:
                    add_projects = projects.difference(exisiting_proj)
                    rem_projects = exisiting_proj.difference(projects)
                    print exisiting_proj
                    print projects
                    print add_projects
                    print rem_projects
                    db.setBarcodeProjects(barcode, add_projects, rem_projects)
                    msg4 = "Project successfully changed"
                except:
                    msg4 = "Error changing project"

                new_proj, parent_project = db.getBarcodeProjType(barcode)
            if parent_project == 'American Gut':
                msg2, msg3 = self.update_ag_barcode(barcode)
            self.render("barcode_util.html", div_and_msg=None, barcode_projects=[],
                        parent_project=None,
                        project_names=[], barcode=None, email_type=None,
                        barcode_info=None, proj_barcode_info=None,
                        msgs=(msg1, msg2, msg3, msg4),
                        currentuser=self.current_user)
コード例 #11
0
    def test_post(self):
        data = {
            'barcode': '000029153',
            'parent_project': 'American+Gut',
            'postmark_date': '2015-06-25',
            'scan_date': '2015-07-01',
            'bstatus': 'Recieved',
            'biomass_remaining': 'Unknown',
            'sequencing_status': 'WAITING',
            'obsolete_status': 'N',
            'sent_date': '2015-01-07',
            'login_user': '******',
            'login_email': 'REMOVED',
            'email_type': '1',
            'sample_date': '2015-06-24',
            'sample_time': '22%3A50%3A00',
            'sample_site': 'Stool',
            'other_text': 'REMOVED',
            'send_mail': 'send_mail',
        }

        self.mock_login_admin()

        # check normal behaviour
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertIn('Barcode %s general details updated' % data['barcode'],
                      response.body)
        self.assertIn('Project successfully changed', response.body)
        dbInfo = db.get_barcode_details(data['barcode'])
        self.assertEqual(date(2015, 6, 25), dbInfo['sample_postmark_date'])
        self.assertEqual(date(2015, 7, 1), dbInfo['scan_date'])

        # check that postmark_date and scan_date is set to None
        # if missed as an argument
        del data['postmark_date']
        del data['scan_date']
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        dbInfo = db.get_barcode_details(data['barcode'])
        self.assertEqual(None, dbInfo['sample_postmark_date'])
        self.assertEqual(None, dbInfo['scan_date'])
        data['postmark_date'] = '2015-06-25'
        data['scan_date'] = '2015-07-01'

        # TODO: Stefan Janssen: looks like we can successfully update a non
        # existing barcode!!
        data['barcode'] = 'rdskjmxykgrlyh'
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertTrue('<p> Barcode %s general details updated </p>'
                        % data['barcode'], response.body)
        data['barcode'] = '000029153'

        # check that update failes for wrong data types
        data['postmark_date'] = 'invalid date'
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertIn("Barcode %s general details failed" % data['barcode'],
                      response.body)

        # test changing the barcode's project to a non existing one
        # TODO: Stefan Janssen: I think this should not result in a positive
        # message like 'Project successfully changed', because this does not
        # trigger the creation of a new project!
        data['project'] = 'NotAProject'
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertTrue('<p> Barcode %s general details updated </p>'
                        % data['barcode'], response.body)
        self.assertIn('Project successfully changed', response.body)

        # check updating a AGP barcode
        del data['project']
        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertIn("Barcode %s AG info was successfully updated"
                      % data['barcode'], response.body)

        data = {
            'barcode': db.ut_get_arbitrary_non_ag_barcode(),
            'parent_project': db.getProjectNames()[1],
            'scan_date': '2014-12-15',
            'bstatus': 'Recieved',
            'biomass_remaining': 'Unknown',
            'sequencing_status': 'WAITING',
            'obsolete_status': 'N',
            'project': 'UNKNOWN',
        }

        response = self.post('/barcode_util/', data)
        self.assertEqual(response.code, 200)
        self.assertNotIn("Barcode %s AG info was successfully updated"
                         % data['barcode'], response.body)
        self.assertTrue('<p> Barcode %s general details updated </p>'
                        % data['barcode'], response.body)