def glds_summary(accession): """Report factors, assays, and/or raw JSON""" rargs = parse_rargs(request.args) try: glds = GLDS(accession) except GeneLabJSONException as e: raise FileNotFoundError(e) if rargs.display_rargs["fmt"] == "raw": return display_object([glds._json], {"fmt": "json"}) else: return display_object(glds.summary_dataframe, rargs.display_rargs)
def get_data(accession, assay_name, rargs=None): """Serve any kind of data""" if rargs is None: rargs = parse_rargs(request.args) assay, message, status = get_assay(accession, assay_name, rargs) if assay is None: return message, status filename = resolve_file_name(assay, rargs) table_data = try_sqlite(accession, assay.name, rargs.data_rargs, expect_date=assay.glds_file_dates.get( filename, -1)) if table_data is None: table_data = retrieve_table_data(assay, filename, rargs.data_rargs) dump_to_sqlite(accession, assay.name, rargs.data_rargs, table_data, set_date=assay.glds_file_dates.get(filename, -1)) if rargs.display_rargs["fmt"] in {"tsv", "json"}: return display_object(filter_table_data(table_data, rargs.data_filter_rargs), rargs.display_rargs, index="auto") else: raise NotImplementedError("fmt={}".format(rargs.display_rargs["fmt"]))
def assay_metadata(accession, assay_name): """DataFrame view of metadata, optionally queried""" rargs = parse_rargs(request.args) assay, message, status = get_assay(accession, assay_name, rargs) if assay is None: return message, status subset, _ = subset_metadata(assay.metadata, rargs) return display_object(subset, rargs.display_rargs, index=True)
def assay_factors(accession, assay_name): """DataFrame of samples and factors in human-readable form""" rargs = parse_rargs(request.args) assay, message, status = get_assay(accession, assay_name, rargs) if assay is None: return message, status else: if rargs.non_data_rargs["cls"]: if rargs.display_rargs["fmt"] != "tsv": error_mask = "{} format is unsuitable for CLS (use tsv)" raise GeneLabException( error_mask.format(rargs.display_rargs["fmt"])) else: obj = assay.factors( cls=rargs.non_data_rargs["cls"], continuous=rargs.non_data_rargs["continuous"]) return display_object(obj, {"fmt": "raw"}) else: return display_object(assay.factors(), rargs.display_rargs, index=True)
def get_gct(accession, assay_name, rargs): """Get GCT formatted processed data; needs to be refactored!""" assay, message, status = get_assay(accession, assay_name, rargs) if assay is None: return message, status pdata = try_sqlite(accession, assay.name, rargs.data_rargs) if pdata is None: pdata = get_data(accession, assay.name, rargs=rargs) gct_header = "#1.2\n{}\t{}\n".format(*pdata.shape) pdata.columns = ["Description"] + list(pdata.columns)[1:] pdata.insert(loc=0, column="Name", value=pdata["Description"]) gct_data = gct_header + pdata.to_csv(sep="\t", index=False) return display_object(gct_data, {"fmt": "raw"})