コード例 #1
0
def create_test_dataset(owner=None):
    from search.mutation import MutationSearch

    search = MutationSearch(text_query=test_query)

    dataset = UsersMutationsDataset(name='test', data=search, owner=owner)

    db.session.add(dataset)
    db.session.commit()

    return dataset
コード例 #2
0
    def user_mutations(self, uri):

        filter_manager = SearchViewFilters()

        dataset = UsersMutationsDataset.by_uri(uri)

        if dataset.owner and dataset.owner != current_user:
            current_app.login_manager.unauthorized()

        response = make_response(
            template('search/dataset.html',
                     mutation_types=Mutation.types,
                     results=dataset.data.results,
                     widgets=make_widgets(filter_manager),
                     without_mutations=dataset.data.without_mutations,
                     query=dataset.data.query,
                     badly_formatted=dataset.data.badly_formatted,
                     dataset=dataset))
        return response
コード例 #3
0
    def remove_user_mutations(self, uri):

        dataset = UsersMutationsDataset.by_uri(uri)
        name = dataset.name

        if not dataset.owner or dataset.owner != current_user:
            current_app.login_manager.unauthorized()

        try:
            dataset.remove()
        except Exception as e:
            message = 'Failed to remove dataset <b>%s</b> (%s).' % (name, uri)
            print(message, e)
            message += '<br>If the message reappears, please contact us.'
            flash(message, category='danger')
            raise abort(500)

        flash('Successfully removed <b>%s</b> dataset.' % name,
              category='success')
        return redirect(url_for('ContentManagementSystem:my_datasets'))
コード例 #4
0
    def test_init(self):
        user = User('user@domain', 'password')

        dataset = create_test_dataset(owner=user)

        assert user.datasets == [dataset]

        public_id = dataset.uri

        d = UsersMutationsDataset.query.filter_by(uri=public_id).one()

        assert d == dataset
        assert UsersMutationsDataset.by_uri(public_id) == dataset

        assert dataset.data
        assert dataset.query_size == 3

        # should be empty as no mutations where imported
        assert not dataset.mutations

        assert dataset.name == 'test'

        assert dataset.life_expectancy < timedelta(days=7)

        assert not dataset.is_expired

        update(dataset, store_until=utc_now())
        db.session.commit()

        time.sleep(2)

        assert dataset.is_expired
        d = UsersMutationsDataset.query.filter_by(is_expired=True).one()

        assert d == dataset

        u = User.query.filter_by(email='user@domain').one()
        assert u.datasets == []
コード例 #5
0
    def mutations(self):
        """Render search form and results (if any) for proteins or mutations"""
        task_id = request.args.get('task_id', None)
        use_celery = current_app.config.get('USE_CELERY', False)
        filter_manager = SearchViewFilters()

        if request.method == 'POST':
            textarea_query = request.form.get('mutations', False)
            vcf_file = request.files.get('vcf-file', False)
            store_on_server = request.form.get('store_on_server', False)

            if not use_celery:
                mutation_search = MutationSearch(vcf_file, textarea_query,
                                                 filter_manager)

            if store_on_server:
                name = request.form.get('dataset_name', None)
                if not name:
                    name = 'Custom Dataset'

                if current_user.is_authenticated:
                    user = current_user
                else:
                    user = None
                    flash(
                        'To browse uploaded mutations easily in the '
                        'future, please <a href="/register">register</a> or <a href="login">log in</a>.',
                        'warning')

                dataset = UsersMutationsDataset(
                    name=name,
                    data=mutation_search if not use_celery else None,
                    owner=user)

                db.session.add(dataset)
                db.session.commit()

            if use_celery:
                mutation_search = search_task.delay(
                    # vcf_file is not serializable but list of lines is
                    vcf_file.readlines() if vcf_file else None,
                    textarea_query,
                    filter_manager,
                    dataset.uri if store_on_server else None)

                return redirect(
                    url_for('SearchView:progress',
                            task_id=mutation_search.task_id))

        elif task_id:
            celery_task = celery.AsyncResult(task_id)
            if celery_task.status == 'PENDING':
                flash(
                    'This search either expired or does not exist. Please try specifying a new one',
                    'warning')
                return redirect(url_for('SearchView:mutations'))
            mutation_search, dataset_uri = celery_task.result

            if dataset_uri:
                url = url_for('SearchView:user_mutations',
                              uri=dataset_uri,
                              _external=True)

                flash(
                    'Your mutations have been saved on the server.'
                    '<p>You can access the results later using following URL: '
                    '<a href="' + url + '">' + url + '</a></p>', 'success')

            celery_task.forget()
        else:
            mutation_search = MutationSearch()

        response = make_response(
            template('search/index.html',
                     target='mutations',
                     mutation_types=Mutation.types,
                     hidden_results_cnt=mutation_search.hidden_results_cnt,
                     results=mutation_search.results,
                     widgets=make_widgets(filter_manager),
                     without_mutations=mutation_search.without_mutations,
                     query=mutation_search.query,
                     badly_formatted=mutation_search.badly_formatted))

        return response