497f88a03fd3e257b9acff6b315f45c7b67a6786 hiram Tue Feb 5 14:09:39 2019 -0800 now returning track list for any UCSC database genome refs #18869 diff --git src/hg/hubApi/hubApi.c src/hg/hubApi/hubApi.c index c74b89a..fbd8b3b 100644 --- src/hg/hubApi/hubApi.c +++ src/hg/hubApi/hubApi.c @@ -563,30 +563,38 @@ slAddHead(&dbList, el); } sqlFreeResult(&sr); hDisconnectCentral(&conn); slSort(&dbList, dbDbCmpName); printf("{\"source\":\"UCSantaCruz\",\"ucscGenomes\":["); for ( el=dbList; el != NULL; el = el->next ) { dbDbJsonOutput(el, stdout); if (el->next) printf(","); } printf("]}\n"); } +static void ucscDbTrackList(char *db) +/* return track list from specified UCSC database name */ +{ +struct trackDb *tdbList = hTrackDb(db); +struct trackDb *el; +for (el +} + #define MAX_PATH_INFO 32 static void apiList(char *words[MAX_PATH_INFO]) /* 'list' function */ { if (sameWord("publicHubs", words[1])) jsonPublicHubs(); else if (sameWord("ucscGenomes", words[1])) jsonDbDb(); else if (sameWord("genomes", words[1])) { char *hubUrl = cgiOptionalString("hubUrl"); if (isEmpty(hubUrl)) errAbort("# must supply hubUrl='http:...' some URL to a hub for /list/genomes\n"); struct trackHub *hub = trackHubOpen(hubUrl, ""); @@ -602,30 +610,40 @@ for ( ; el ; el = el->next ) { char *a = jsonStringEscape(el->name); printf("\"%s\"", a); freeMem(a); if (el->next) fputc(',',stdout); } printf("]}\n"); } } else if (sameWord("tracks", words[1])) { char *hubUrl = cgiOptionalString("hubUrl"); char *genome = cgiOptionalString("genome"); + char *db = cgiOptionalString("db"); + if (isEmpty(hubUrl) && isEmpty(db)) + { + errAbort("# ERROR: must supply hubUrl or db name to return track list"); + } + if (isEmpty(hubUrl)) + { + ucscDbTrackList(db); // only need db for this function + return; + } if (isEmpty(genome) || isEmpty(hubUrl)) { if (isEmpty(genome)) warn("# must supply genome='someName' the name of a genome in a hub for /list/tracks\n"); if (isEmpty(hubUrl)) warn("# must supply hubUrl='http:...' some URL to a hub for /list/genomes\n"); errAbort("# ERROR exit"); } struct trackHub *hub = trackHubOpen(hubUrl, ""); if (hub->genomeList) { struct slName *dbTrackList = NULL; (void) genomeList(hub, &dbTrackList, genome); printf("{\"source\":\"UCSantaCruz\","); jsonStringOut(stdout, "hubUrl", hubUrl); @@ -730,30 +748,31 @@ struct trackHub *hub = trackHubOpen(urlInput, ""); if (measureTiming) { long thisTime = clock1000(); hPrintf("hub open time: %ld millis
\n", thisTime - lastTime); } struct trackHubGenome *hubGenome = hub->genomeList; hPrintf("

Example URLs to return json data structures:

\n"); hPrintf("\n"); hPrintf("

cart dump

"); hPrintf("
\n");
 cartDump(cart);
 hPrintf("
\n"); hPrintf("
\n\n", "../cgi-bin/hubApi"); hPrintf("Select public hub: "); #define JBUFSIZE 2048 char javascript[JBUFSIZE]; struct slPair *events = NULL; safef(javascript, sizeof(javascript), "this.lastIndex=this.selectedIndex;"); slPairAdd(&events, "focus", cloneString(javascript));