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
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
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'))
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 == []
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