def post(self): try: args = chart_parser.parse_args() selected_genes = args["gene_set"] selected_dataset = args["dataset_identifier"] selected_charttype = args["chart_type"] print args["chart_type"] request_to_handle = request.accept_mimetypes.best_match(['application/pdf', 'text/html']) if request_to_handle == 'application/pdf': accept = "pdf" else: accept = "html" chart_resource = nc.sample_distribution_for_genes(selected_dataset, selected_genes, title=selected_dataset, chart_type=selected_charttype, chart_rendering=accept) # returns the write rendering based on generator [bokeh with bokehjs or matplot with mpld3] if accept == "html": if chart_resource["generator"] == "bokeh": return cr.BokehResource(chart_resource["chart"]), 201 if chart_resource["generator"] == "matplot": return cr.MatPlotLibResource(chart_resource["chart"]), 201 if accept == "pdf": filename = ig.get_generated_guid_as_string() + ".pdf" file_path = APP_CONFIG["domain"] + APP_CONFIG["static_documents"] chart_resource["chart"].savefig("." + APP_CONFIG["static_documents"] + filename) return cr.StringApiResource(file_path + filename), 201 except: return cr.StringApiResource("Chart creation failed"), 400
def normalize_gene_counts(data, method, threshold=None, target_identifier="", experiment_identifier=""): # if exists -> get from db processing_result = cn.bioconductor_normalization(data, method) new_intern_identifier = identifier_generator.get_generated_guid_as_string() hdf_storage.store_hdf(processing_result.frame, new_intern_identifier) print("compressed pytable storage done") package = mr.get_package_by_name_and_version(processing_result.package, processing_result.version).public_identifier dataset = dr.create_data_set(new_intern_identifier, package + "_" + target_identifier, "genes normalized dataset", package_identifier=package, experiment_identifier=experiment_identifier) print("new dataset saved") #er.link_dataset_to_experiment(experiment_identifier, dataset.public_identifier) print("new dataset linked") return dataset
def post(self): args = job_parser.parse_args() if args.local: try: print args.compare_datasets if args.compare_datasets is not None: return cr.MatPlotLibResource(dp.plot_comparison(args.compare_datasets, args.features, args.chart_type)) except: return cr.StringApiResource("There was an issue when comparing data sets, check for identifiers or if the lists are equal") method = args.method_identifier dataset = args.dataset_identifier min_distance = args.min_distance min_samples = args.min_samples print(args.experiment_identifier) res = pr.create_mining_task(method + "_" + dataset + "_" + ig.get_generated_guid_as_string(), method, dataset, min_sample=min_samples, min_distance=min_distance, experiment_identifier=args.experiment_identifier) return cr.JsonResource(eto.JobView(res).to_json()), 201
def post(self): args = dataset_parser.parse_args() print("dataset post received") # upload new dataset if args.dataset_identifier is None: print("creating new data set") new_file = args.file filename = secure_filename(new_file.filename) print("uploaded" + filename) intern_identifier = ig.get_generated_guid_as_string() new_file.save(filename) try: with open(filename, "rb") as fl: frame = dr.get_data_frame_from_csv(fl) intern_location = dr.store_data_frame_to_hdf(frame, intern_identifier) # raw counts by default data_entity = dr.create_data_set(intern_identifier, public_identifier=filename, dataset_type="raw gene counts", experiment_identifier="raw_data_container") # For demo -> add exp identifier server_hash = ig.md5_for_file(fl) print(filename + " is saved") print("file removed") return cr.JsonResource( {"filename": filename, "intern_identifier": data_entity.intern_identifier, "public_identifier": data_entity.public_identifier, "server_md5": server_hash}), 201 except IntegrityError: return cr.StringApiResource("Public identifier already taken"), 409 except: return cr.StringApiResource("An error has occured, check if your data set comply with the expected format"), 400 finally: if filename is not None: os.remove(filename) else: # a new dataset is created based on source try: print("pre-processing existing dataset") source_data = args.dataset_identifier print("source data : " + source_data) # target_data = args.target_dataset_identifier # TODO link to experiment identifier! # experiment_identifier = args.experiment_identifier method_identifier = args.preprocessing_method_identifier print("source " + source_data + "method " + method_identifier) path = APP_CONFIG["application_files_location"] + APP_CONFIG["application_store_name"] df = dr.get_data_frame_from_hdf(source_data, path) print("data frame is loaded") new_data_set = ed.normalize_gene_counts(df, method_identifier, target_identifier=source_data, experiment_identifier=args.experiment_identifier) return cr.JsonResource(eto.SummaryDatasetView(new_data_set).to_json()), 201 except Exception as e: print(e.__str__()) return cr.StringApiResource("Explosion! Tool down..."), 400