Пример #1
0
def sample_template_overview_handler_get_request(study_id, user):
    # Check if the current user has access to the sample template
    sample_template_checks(study_id, user)

    # Check if the sample template exists
    exists = SampleTemplate.exists(study_id)

    # The following information should always be provided:
    # The files that have been uploaded to the system and can be a
    # sample template file
    files = [
        f for _, f in get_files_from_uploads_folders(study_id)
        if f.endswith(('txt', 'tsv'))
    ]
    # If there is a job associated with the sample information, the job id
    job = None
    job_info = r_client.get(SAMPLE_TEMPLATE_KEY_FORMAT % study_id)
    if job_info:
        job = loads(job_info)['job_id']

    # Specific information if it exists or not:
    data_types = []
    st_fp_id = None
    old_files = []
    num_samples = 0
    num_cols = 0
    if exists:
        # If it exists we need to provide:
        # The id of the sample template file so the user can download it and
        # the list of old filepaths
        st = SampleTemplate(study_id)
        all_st_files = st.get_filepaths()
        # The current sample template file is the first one in the list
        # (pop(0)) and we are interested only in the id ([0])
        st_fp_id = all_st_files.pop(0)[0]
        # For the old filepaths we are only interested in their basename
        old_files = [basename(fp) for _, fp in all_st_files]
        # The number of samples - this is a space efficient way of counting
        # the number of samples. Doing len(list(st.keys())) creates a list
        # that we are not using
        num_samples = sum(1 for _ in st.keys())
        # The number of columns
        num_cols = len(st.categories())
    else:
        # It doesn't exist, we also need to provide the data_types in case
        # the user uploads a QIIME mapping file
        data_types = sorted(data_types_get_req()['data_types'])

    return {
        'exists': exists,
        'uploaded_files': files,
        'data_types': data_types,
        'user_can_edit': Study(study_id).can_edit(user),
        'job': job,
        'download_id': st_fp_id,
        'old_files': old_files,
        'num_samples': num_samples,
        'num_columns': num_cols
    }
Пример #2
0
def sample_template_overview_handler_get_request(study_id, user):
    # Check if the current user has access to the sample template
    sample_template_checks(study_id, user)

    # Check if the sample template exists
    exists = SampleTemplate.exists(study_id)

    # The following information should always be provided:
    # The files that have been uploaded to the system and can be a
    # sample template file
    files = [f for _, f, _ in get_files_from_uploads_folders(study_id)
             if f.endswith(('txt', 'tsv', 'xlsx'))]
    # If there is a job associated with the sample information, the job id
    job = None
    job_info = r_client.get(SAMPLE_TEMPLATE_KEY_FORMAT % study_id)
    if job_info:
        job = loads(job_info)['job_id']

    # Specific information if it exists or not:
    data_types = []
    st_fp_id = None
    old_files = []
    num_samples = 0
    num_cols = 0
    if exists:
        # If it exists we need to provide:
        # The id of the sample template file so the user can download it and
        # the list of old filepaths
        st = SampleTemplate(study_id)
        all_st_files = st.get_filepaths()
        # The current sample template file is the first one in the list
        # (pop(0)) and we are interested only in the id ([0])
        st_fp_id = all_st_files.pop(0)[0]
        # For the old filepaths we are only interested in their basename
        old_files = [basename(fp) for _, fp in all_st_files]
        # The number of samples - this is a space efficient way of counting
        # the number of samples. Doing len(list(st.keys())) creates a list
        # that we are not using
        num_samples = sum(1 for _ in st.keys())
        # The number of columns
        num_cols = len(st.categories())
    else:
        # It doesn't exist, we also need to provide the data_types in case
        # the user uploads a QIIME mapping file
        data_types = sorted(data_types_get_req()['data_types'])

    return {'exists': exists,
            'uploaded_files': files,
            'data_types': data_types,
            'user_can_edit': Study(study_id).can_edit(user),
            'job': job,
            'download_id': st_fp_id,
            'old_files': old_files,
            'num_samples': num_samples,
            'num_columns': num_cols}
Пример #3
0
    def test_delete_sample_or_column(self):
        st = SampleTemplate(1)

        # Delete a sample template column
        obs = delete_sample_or_column(SampleTemplate, 1, "columns",
                                      "season_environment")
        exp = {'status': "success", 'message': ""}
        self.assertEqual(obs, exp)
        self.assertNotIn('season_environment', st.categories())

        # Delete a sample template sample - need to add one sample that we
        # will remove
        npt.assert_warns(
            QiitaDBWarning, st.extend,
            pd.DataFrame.from_dict({'Sample1': {
                'taxon_id': '9606'
            }},
                                   orient='index',
                                   dtype=str))
        self.assertIn('1.Sample1', st.keys())
        obs = delete_sample_or_column(SampleTemplate, 1, "samples",
                                      "1.Sample1")
        exp = {'status': "success", 'message': ""}
        self.assertEqual(obs, exp)
        self.assertNotIn('1.Sample1', st.keys())

        # Delete a prep template column
        pt = PrepTemplate(2)

        obs = delete_sample_or_column(PrepTemplate, 2, "columns",
                                      "target_subfragment")
        exp = {'status': "success", 'message': ""}
        self.assertEqual(obs, exp)
        self.assertNotIn('target_subfragment', pt.categories())

        # Delte a prep template sample
        metadata = pd.DataFrame.from_dict(
            {
                '1.SKB8.640193': {
                    'barcode': 'GTCCGCAAGTTA',
                    'primer': 'GTGCCAGCMGCCGCGGTAA'
                },
                '1.SKD8.640184': {
                    'barcode': 'CGTAGAGCTCTC',
                    'primer': 'GTGCCAGCMGCCGCGGTAA'
                }
            },
            orient='index',
            dtype=str)
        pt = npt.assert_warns(QiitaDBWarning, PrepTemplate.create, metadata,
                              Study(1), "16S")
        obs = delete_sample_or_column(PrepTemplate, pt.id, "samples",
                                      '1.SKD8.640184')
        exp = {'status': "success", 'message': ""}
        self.assertEqual(obs, exp)
        self.assertNotIn('1.SKD8.640184', pt.categories())

        # Exception
        obs = delete_sample_or_column(PrepTemplate, 2, "samples",
                                      "1.SKM9.640192")
        exp = {
            'status':
            "danger",
            'message':
            "Prep info file '2' has files attached, you cannot "
            "delete samples."
        }
        self.assertEqual(obs, exp)

        # No "samples" or "columns"
        obs = delete_sample_or_column(PrepTemplate, 2, "not_samples", "NOP")
        exp = {
            'status':
            'danger',
            'message':
            'Unknown value "not_samples". Choose between '
            '"samples" and "columns"'
        }
        self.assertEqual(obs, exp)
Пример #4
0
    def test_delete_sample_or_column(self):
        st = SampleTemplate(1)

        # Delete a sample template column
        job = self._create_job(
            'delete_sample_or_column', {
                'obj_class': 'SampleTemplate',
                'obj_id': 1,
                'sample_or_col': 'columns',
                'name': 'season_environment'
            })
        private_task(job.id)
        self.assertEqual(job.status, 'success')
        self.assertNotIn('season_environment', st.categories())

        # Delete a sample template sample - need to add one
        # sample that we will remove
        npt.assert_warns(
            QiitaDBWarning, st.extend,
            pd.DataFrame.from_dict({'Sample1': {
                'taxon_id': '9606'
            }},
                                   orient='index',
                                   dtype=str))
        self.assertIn('1.Sample1', st.keys())
        job = self._create_job(
            'delete_sample_or_column', {
                'obj_class': 'SampleTemplate',
                'obj_id': 1,
                'sample_or_col': 'samples',
                'name': '1.Sample1'
            })
        private_task(job.id)
        self.assertEqual(job.status, 'success')
        self.assertNotIn('1.Sample1', st.keys())

        # Delete a prep template column
        pt = PrepTemplate(1)
        job = self._create_job(
            'delete_sample_or_column', {
                'obj_class': 'PrepTemplate',
                'obj_id': 1,
                'sample_or_col': 'columns',
                'name': 'target_subfragment'
            })
        private_task(job.id)
        self.assertEqual(job.status, 'success')
        self.assertNotIn('target_subfragment', pt.categories())

        # Delete a prep template sample
        metadata = pd.DataFrame.from_dict(
            {
                '1.SKB8.640193': {
                    'barcode': 'GTCCGCAAGTTA',
                    'primer': 'GTGCCAGCMGCCGCGGTAA'
                },
                '1.SKD8.640184': {
                    'barcode': 'CGTAGAGCTCTC',
                    'primer': 'GTGCCAGCMGCCGCGGTAA'
                }
            },
            orient='index',
            dtype=str)
        pt = npt.assert_warns(QiitaDBWarning, PrepTemplate.create, metadata,
                              Study(1), "16S")
        job = self._create_job(
            'delete_sample_or_column', {
                'obj_class': 'PrepTemplate',
                'obj_id': pt.id,
                'sample_or_col': 'samples',
                'name': '1.SKD8.640184'
            })
        private_task(job.id)
        self.assertNotIn('1.SKD8.640184', pt.keys())

        # Test exceptions
        job = self._create_job(
            'delete_sample_or_column', {
                'obj_class': 'UnknownClass',
                'obj_id': 1,
                'sample_or_col': 'columns',
                'name': 'column'
            })
        private_task(job.id)
        self.assertEqual(job.status, 'error')
        self.assertIn(
            'Unknown value "UnknownClass". Choose between '
            '"SampleTemplate" and "PrepTemplate"', job.log.msg)

        job = self._create_job(
            'delete_sample_or_column', {
                'obj_class': 'SampleTemplate',
                'obj_id': 1,
                'sample_or_col': 'unknown',
                'name': 'column'
            })
        private_task(job.id)
        self.assertEqual(job.status, 'error')
        self.assertIn(
            'Unknown value "unknown". Choose between "samples" '
            'and "columns"', job.log.msg)
Пример #5
0
    def test_delete_sample_or_column(self):
        st = SampleTemplate(1)

        # Delete a sample template column
        job = self._create_job('delete_sample_or_column',
                               {'obj_class': 'SampleTemplate', 'obj_id': 1,
                                'sample_or_col': 'columns',
                                'name': 'season_environment'})
        private_task(job.id)
        self.assertEqual(job.status, 'success')
        self.assertNotIn('season_environment', st.categories())

        # Delete a sample template sample - need to add one
        # sample that we will remove
        npt.assert_warns(
            QiitaDBWarning, st.extend,
            pd.DataFrame.from_dict({'Sample1': {'taxon_id': '9606'}},
                                   orient='index', dtype=str))
        self.assertIn('1.Sample1', st.keys())
        job = self._create_job('delete_sample_or_column',
                               {'obj_class': 'SampleTemplate', 'obj_id': 1,
                                'sample_or_col': 'samples',
                                'name': '1.Sample1'})
        private_task(job.id)
        self.assertEqual(job.status, 'success')
        self.assertNotIn('1.Sample1', st.keys())

        # Delete a prep template column
        pt = PrepTemplate(1)
        job = self._create_job('delete_sample_or_column',
                               {'obj_class': 'PrepTemplate', 'obj_id': 1,
                                'sample_or_col': 'columns',
                                'name': 'target_subfragment'})
        private_task(job.id)
        self.assertEqual(job.status, 'success')
        self.assertNotIn('target_subfragment', pt.categories())

        # Delete a prep template sample
        metadata = pd.DataFrame.from_dict(
            {'1.SKB8.640193': {'barcode': 'GTCCGCAAGTTA',
                               'primer': 'GTGCCAGCMGCCGCGGTAA'},
             '1.SKD8.640184': {'barcode': 'CGTAGAGCTCTC',
                               'primer': 'GTGCCAGCMGCCGCGGTAA'}},
            orient='index', dtype=str)
        pt = npt.assert_warns(QiitaDBWarning, PrepTemplate.create, metadata,
                              Study(1), "16S")
        job = self._create_job('delete_sample_or_column',
                               {'obj_class': 'PrepTemplate', 'obj_id': pt.id,
                                'sample_or_col': 'samples',
                                'name': '1.SKD8.640184'})
        private_task(job.id)
        self.assertNotIn('1.SKD8.640184', pt.keys())

        # Test exceptions
        job = self._create_job('delete_sample_or_column',
                               {'obj_class': 'UnknownClass', 'obj_id': 1,
                                'sample_or_col': 'columns', 'name': 'column'})
        private_task(job.id)
        self.assertEqual(job.status, 'error')
        self.assertIn('Unknown value "UnknownClass". Choose between '
                      '"SampleTemplate" and "PrepTemplate"', job.log.msg)

        job = self._create_job('delete_sample_or_column',
                               {'obj_class': 'SampleTemplate', 'obj_id': 1,
                                'sample_or_col': 'unknown', 'name': 'column'})
        private_task(job.id)
        self.assertEqual(job.status, 'error')
        self.assertIn('Unknown value "unknown". Choose between "samples" '
                      'and "columns"', job.log.msg)
Пример #6
0
    def test_delete_sample_or_column(self):
        st = SampleTemplate(1)

        # Delete a sample template column
        obs = delete_sample_or_column(SampleTemplate, 1, "columns",
                                      "season_environment")
        exp = {'status': "success", 'message': ""}
        self.assertEqual(obs, exp)
        self.assertNotIn('season_environment', st.categories())

        # Delete a sample template sample - need to add one sample that we
        # will remove
        npt.assert_warns(
            QiitaDBWarning, st.extend,
            pd.DataFrame.from_dict({'Sample1': {'taxon_id': '9606'}},
                                   orient='index', dtype=str))
        self.assertIn('1.Sample1', st.keys())
        obs = delete_sample_or_column(SampleTemplate, 1, "samples",
                                      "1.Sample1")
        exp = {'status': "success", 'message': ""}
        self.assertEqual(obs, exp)
        self.assertNotIn('1.Sample1', st.keys())

        # Delete a prep template column
        pt = PrepTemplate(2)

        obs = delete_sample_or_column(PrepTemplate, 2, "columns",
                                      "target_subfragment")
        exp = {'status': "success", 'message': ""}
        self.assertEqual(obs, exp)
        self.assertNotIn('target_subfragment', pt.categories())

        # Delte a prep template sample
        metadata = pd.DataFrame.from_dict(
            {'1.SKB8.640193': {'barcode': 'GTCCGCAAGTTA',
                               'primer': 'GTGCCAGCMGCCGCGGTAA'},
             '1.SKD8.640184': {'barcode': 'CGTAGAGCTCTC',
                               'primer': 'GTGCCAGCMGCCGCGGTAA'}},
            orient='index', dtype=str)
        pt = npt.assert_warns(QiitaDBWarning, PrepTemplate.create, metadata,
                              Study(1), "16S")
        obs = delete_sample_or_column(PrepTemplate, pt.id, "samples",
                                      '1.SKD8.640184')
        exp = {'status': "success", 'message': ""}
        self.assertEqual(obs, exp)
        self.assertNotIn('1.SKD8.640184', pt.categories())

        # Exception
        obs = delete_sample_or_column(PrepTemplate, 2, "samples",
                                      "1.SKM9.640192")
        exp = {'status': "danger",
               'message': "Prep info file '2' has files attached, you cannot "
                          "delete samples."}
        self.assertEqual(obs, exp)

        # No "samples" or "columns"
        obs = delete_sample_or_column(PrepTemplate, 2, "not_samples", "NOP")
        exp = {'status': 'danger',
               'message': 'Unknown value "not_samples". Choose between '
                          '"samples" and "columns"'}
        self.assertEqual(obs, exp)