afd7d0d912aa376f0f214448f3e83d5967f35d50 hiram Mon Jun 17 12:55:03 2024 -0700 allow list functions to work on a genark genome without hubUrl specified no redmine diff --git src/hg/hubApi/list.c src/hg/hubApi/list.c index cfe6829..9754953 100644 --- src/hg/hubApi/list.c +++ src/hg/hubApi/list.c @@ -1095,30 +1095,35 @@ jsonWriteObjectEnd(jw); } jsonWriteObjectEnd(jw); apiFinishOutput(0, NULL, jw); } } else if (sameWord("tracks", words[1])) { char *extraArgs = verifyLegalArgs(argListTracks); if (extraArgs) apiErrAbort(err400, err400Msg, "extraneous arguments found for function /list/tracks '%s'", extraArgs); char *hubUrl = cgiOptionalString("hubUrl"); char *genome = cgiOptionalString("genome"); char *db = cgiOptionalString("genome"); + /* allow a GCx genome specified without hubUrl for GenArk genomes */ + if (isEmpty(hubUrl) && isNotEmpty(genome) && isGenArk(genome)) + { + hubUrl = genArkHubTxt(genome); + } if (isEmpty(hubUrl) && isNotEmpty(db)) { struct sqlConnection *conn = hAllocConnMaybe(db); if (NULL == conn) apiErrAbort(err400, err400Msg, "can not find 'genome=%s' for endpoint '/list/tracks", db); else hFreeConn(&conn); } if (isEmpty(hubUrl) && isEmpty(db)) apiErrAbort(err400, err400Msg, "missing hubUrl or genome name for endpoint /list/tracks"); if (isEmpty(hubUrl)) // missing hubUrl implies UCSC database { trackDbJsonOutput(db, stdout); // only need db for this function return; } @@ -1141,30 +1146,35 @@ { recursiveTrackList(jw, el, db); } jsonWriteObjectEnd(jw); apiFinishOutput(0, NULL, jw); } else if (sameWord("chromosomes", words[1])) { char *extraArgs = verifyLegalArgs(argListChromosomes); if (extraArgs) apiErrAbort(err400, err400Msg, "extraneous arguments found for function /list/chromosomes '%s'", extraArgs); char *hubUrl = cgiOptionalString("hubUrl"); char *genome = cgiOptionalString("genome"); char *db = cgiOptionalString("genome"); + /* allow a GCx genome specified without hubUrl for GenArk genomes */ + if (isEmpty(hubUrl) && isNotEmpty(genome) && isGenArk(genome)) + { + hubUrl = genArkHubTxt(genome); + } if (isEmpty(hubUrl) && isNotEmpty(db)) { struct sqlConnection *conn = hAllocConnMaybe(db); if (NULL == conn) apiErrAbort(err400, err400Msg, "can not find 'genome=%s' for endpoint '/list/chromosomes", db); else hFreeConn(&conn); } if (isEmpty(hubUrl) && isEmpty(db)) apiErrAbort(err400, err400Msg, "must supply hubUrl or genome name for endpoint '/list/chromosomes", hubUrl, db); if (isEmpty(hubUrl)) // missing hubUrl implies UCSC database { chromInfoJsonOutput(stdout, db); return; @@ -1173,30 +1183,35 @@ { hubChromInfoJsonOutput(stdout, hubUrl, genome); return; } } else if (sameWord("schema", words[1])) { char *extraArgs = verifyLegalArgs(argListSchema); if (extraArgs) apiErrAbort(err400, err400Msg, "extraneous arguments found for function /list/schema '%s'", extraArgs); char *hubUrl = cgiOptionalString("hubUrl"); char *genome = cgiOptionalString("genome"); char *db = cgiOptionalString("genome"); char *track = cgiOptionalString("track"); + /* allow a GCx genome specified without hubUrl for GenArk genomes */ + if (isEmpty(hubUrl) && isNotEmpty(genome) && isGenArk(genome)) + { + hubUrl = genArkHubTxt(genome); + } if (isEmpty(track)) apiErrAbort(err400, err400Msg, "missing track= for endpoint '/list/schema'"); if (isEmpty(hubUrl) && isNotEmpty(db)) { struct sqlConnection *conn = hAllocConnMaybe(db); if (NULL == conn) apiErrAbort(err400, err400Msg, "can not find 'genome=%s' for endpoint '/list/schema", db); else hFreeConn(&conn); } if (isEmpty(hubUrl) && isEmpty(db)) apiErrAbort(err400, err400Msg, "must supply hubUrl or genome name for endpoint '/list/schema", hubUrl, db);