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("
\n"); cartDump(cart); hPrintf("\n"); hPrintf("