Пример #1
0
    def test_create_project(self):
        with Transaction() as t:
            admin_repo = AdminRepo(t)
            with t.cursor() as cur:
                cur.execute("SELECT project "
                            "FROM barcodes.project "
                            "WHERE project = 'doesnotexist'")
                self.assertEqual(len(cur.fetchall()), 0)

                admin_repo.create_project('doesnotexist', True, False)
                cur.execute("SELECT project, is_microsetta, bank_samples, "
                            "plating_start_date "
                            "FROM barcodes.project "
                            "WHERE project = 'doesnotexist'")
                obs = cur.fetchall()
                self.assertEqual(obs, [
                    ('doesnotexist', True, False, None),
                ])

                plating_start_date = date(2020, 7, 31)
                admin_repo.create_project('doesnotexist2', False, True,
                                          plating_start_date)
                cur.execute("SELECT project, is_microsetta, bank_samples, "
                            "plating_start_date "
                            "FROM barcodes.project "
                            "WHERE project = 'doesnotexist2'")
                obs = cur.fetchall()
                self.assertEqual(obs, [
                    ('doesnotexist2', False, True, plating_start_date),
                ])
def create_project(body, token_info):
    validate_admin_access(token_info)

    project_name = body['project_name']
    is_microsetta = body['is_microsetta']
    bank_samples = body['bank_samples']
    plating_start_date = body.get('plating_start_date')

    if plating_start_date is not None:
        try:
            plating_start_date = datetime.datetime.strptime(
                plating_start_date, "%Y-%m-%d")
        except ValueError:
            raise BadRequest(
                "plating start date '{0}' is not a valid date in YYYY-MM-DD "
                "format".format(plating_start_date))

    if len(project_name) == 0:
        return jsonify(code=400, message="No project name provided"), 400

    if not bank_samples and plating_start_date is not None:
        raise RepoException("Plating start date cannot be set for"
                            " unbanked projects")

    with Transaction() as t:
        admin_repo = AdminRepo(t)
        admin_repo.create_project(project_name, is_microsetta, bank_samples,
                                  plating_start_date)
        t.commit()

    return {}, 201
Пример #3
0
def create_project(body, token_info):
    validate_admin_access(token_info)

    project_name = body['project_name']
    is_microsetta = body['is_microsetta']

    if len(project_name) == 0:
        return jsonify(code=400, message="No project name provided"), 400

    with Transaction() as t:
        admin_repo = AdminRepo(t)
        admin_repo.create_project(project_name, is_microsetta)
        t.commit()

    return {}, 201
Пример #4
0
    def test_create_project_success_full(self):
        with Transaction() as t:
            admin_repo = AdminRepo(t)
            # Note: using dict_cursor here so results are DictRow
            # objects that can easily be converted to a dictionary
            with t.dict_cursor() as cur:
                cur.execute("SELECT project "
                            "FROM barcodes.project "
                            "WHERE project = 'full_test_proj'")
                self.assertEqual(len(cur.fetchall()), 0)

                full_project_dict = self._FULL_PROJECT_DICT.copy()
                full_project_dict[p.PROJ_NAME_KEY] = 'full_test_proj'
                input = p.Project.from_dict(full_project_dict)

                output_id = admin_repo.create_project(input)

                cur.execute("SELECT * "
                            "FROM barcodes.project "
                            "WHERE project = 'full_test_proj'")
                row = cur.fetchone()
                obs_dict = dict(row)
                full_project_dict["project_id"] = output_id
                full_project_dict[p.DB_PROJ_NAME_KEY] = \
                    full_project_dict.pop(p.PROJ_NAME_KEY)
                self.assertEqual(obs_dict, full_project_dict)
    def test_update_project(self):
        with Transaction() as t:
            admin_repo = AdminRepo(t)
            proj_id = admin_repo.create_project(
                Project(project_name=DUMMY_PROJ_NAME,
                        is_microsetta=False,
                        bank_samples=False))
            t.commit()

        # create post input json
        input_json = json.dumps(self.FULL_PROJ_INFO)

        # execute project put (update)
        response = self.client.put(f"/api/admin/projects/{proj_id}",
                                   content_type='application/json',
                                   data=input_json,
                                   headers=MOCK_HEADERS)

        # check response code
        self.assertEqual(204, response.status_code)

        with Transaction() as t:
            with t.dict_cursor() as cur:
                cur.execute(
                    "select * FROM project "
                    "WHERE "
                    "project_id = %s", (proj_id, ))
                row = cur.fetchone()
                stored_result = dict(row)

        expected_result = self.FULL_PROJ_INFO.copy()
        expected_result["project"] = expected_result.pop("project_name")
        expected_result["project_id"] = proj_id
        self.assertEqual(expected_result, stored_result)
Пример #6
0
 def test_create_project_success_banking(self):
     with Transaction() as t:
         admin_repo = AdminRepo(t)
         with t.cursor() as cur:
             plating_start = date(2020, 7, 31)
             minimal_proj_dict = {p.PROJ_NAME_KEY: 'doesnotexist2',
                                  p.IS_MICROSETTA_KEY: False,
                                  p.BANK_SAMPLES_KEY: True,
                                  p.PLATING_START_DATE_KEY: "2020-07-31"}
             input = p.Project.from_dict(minimal_proj_dict)
             admin_repo.create_project(input)
             cur.execute("SELECT project, is_microsetta, bank_samples, "
                         "plating_start_date "
                         "FROM barcodes.project "
                         "WHERE project = 'doesnotexist2'")
             obs = cur.fetchall()
             self.assertEqual(obs, [('doesnotexist2', False, True,
                                     plating_start), ])
Пример #7
0
    def test_create_project(self):
        with Transaction() as t:
            admin_repo = AdminRepo(t)
            with t.cursor() as cur:
                cur.execute("SELECT project "
                            "FROM barcodes.project "
                            "WHERE project = 'doesnotexist'")
                self.assertEqual(len(cur.fetchall()), 0)

                admin_repo.create_project('doesnotexist', True)
                cur.execute("SELECT project, is_microsetta "
                            "FROM barcodes.project "
                            "WHERE project = 'doesnotexist'")
                obs = cur.fetchall()
                self.assertEqual(obs, [('doesnotexist', True), ])

                admin_repo.create_project('doesnotexist2', False)
                cur.execute("SELECT project, is_microsetta "
                            "FROM barcodes.project "
                            "WHERE project = 'doesnotexist2'")
                obs = cur.fetchall()
                self.assertEqual(obs, [('doesnotexist2', False), ])
Пример #8
0
    def test_create_project_success_no_banking(self):
        with Transaction() as t:
            admin_repo = AdminRepo(t)
            with t.cursor() as cur:
                cur.execute("SELECT project "
                            "FROM barcodes.project "
                            "WHERE project = 'doesnotexist'")
                self.assertEqual(len(cur.fetchall()), 0)

                minimal_project_dict = {p.PROJ_NAME_KEY: 'doesnotexist',
                                        p.IS_MICROSETTA_KEY: True,
                                        p.BANK_SAMPLES_KEY: False}
                input = p.Project.from_dict(minimal_project_dict)

                admin_repo.create_project(input)

                cur.execute("SELECT project, is_microsetta, bank_samples, "
                            "plating_start_date "
                            "FROM barcodes.project "
                            "WHERE project = 'doesnotexist'")
                obs = cur.fetchall()
                self.assertEqual(obs, [('doesnotexist', True, False, None), ])
Пример #9
0
def create_project(body, token_info):
    validate_admin_access(token_info)

    try:
        project = Project.from_dict(body)
    except ValueError as e:
        raise RepoException(e)

    with Transaction() as t:
        admin_repo = AdminRepo(t)
        proj_id = admin_repo.create_project(project)
        t.commit()

    response = Response()
    response.status_code = 201
    response.headers['Location'] = '/api/admin/projects/%s' % (proj_id,)
    return response