2770a53d1e8e0e5773020965d19c2499439481ca chmalee Tue Feb 7 13:33:08 2023 -0800 Make hubApi return data from multiple tracks at once. Get trackDb tableBrowser setting working correctly in the api diff --git src/hg/hubApi/hubApi.c src/hg/hubApi/hubApi.c index 73cf62c..ae8d8d1 100644 --- src/hg/hubApi/hubApi.c +++ src/hg/hubApi/hubApi.c @@ -245,31 +245,31 @@ safef(errorPrint, sizeof(errorPrint), " ERROR: %s", errorString); } boolean superChild = tdbIsSuperTrackChild(tdb); char *genome = NULL; if (hub) genome = hub->genomeList->name; struct dyString *extraDyFlags = dyStringNew(128); if (debug) dyStringAppend(extraDyFlags, ";debug=1"); if (jsonOutputArrays) dyStringAppend(extraDyFlags, ";jsonOutputArrays=1"); char *extraFlags = dyStringCannibalize(&extraDyFlags); -if (protectedTrack(tdb, tdb->track)) +if (protectedTrack(db, tdb, tdb->track)) hPrintf("
  • %s : %s <protected data>
  • \n", tdb->track, tdb->type); else if (db) { if (hub) { char urlReference[2048]; safef(urlReference, sizeof(urlReference), " (sample data)%s\n", urlPrefix, hub->url, genome, tdb->track, extraFlags, errorPrint); if (tdb->parent) hPrintf("
  • %s: %s subtrack of parent: %s%s
  • \n", tdb->track, tdb->type, tdb->parent->track, urlReference); else hPrintf("
  • %s: %s%s
  • \n", tdb->track, tdb->type, urlReference); } else { @@ -286,61 +286,61 @@ } else if (hub) { char urlReference[2048]; safef(urlReference, sizeof(urlReference), " (sample data)%s\n", urlPrefix, hub->url, genome, tdb->track, extraFlags, errorPrint); if (tdb->parent) hPrintf("
  • %s: %s subtrack of parent: %s%s
  • \n", tdb->track, tdb->type, tdb->parent->track, urlReference); else hPrintf("
  • %s: %s%s
  • \n", tdb->track, tdb->type, urlReference); } else hPrintf("
  • %s : %s not db hub track ?
  • \n", tdb->track, tdb->type); } -static void hubSampleUrl(struct trackHub *hub, struct trackDb *tdb, +static void hubSampleUrl(struct trackHub *hub, char *db, struct trackDb *tdb, long chromCount, long itemCount, char *genome, char *errorString) { struct dyString *extraDyFlags = dyStringNew(128); if (debug) dyStringAppend(extraDyFlags, ";debug=1"); if (jsonOutputArrays) dyStringAppend(extraDyFlags, ";jsonOutputArrays=1"); char *extraFlags = dyStringCannibalize(&extraDyFlags); char errorPrint[2048]; errorPrint[0] = 0; if (isNotEmpty(errorString)) { safef(errorPrint, sizeof(errorPrint), " : ERROR: %s", errorString); } char countsMessage[512]; countsMessage[0] = 0; if (chromCount > 0 || itemCount > 0) { if (allowedBigBedType(tdb->type)) safef(countsMessage, sizeof(countsMessage), " : %ld chroms : %ld item count ", chromCount, itemCount); else if (startsWithWord("bigWig", tdb->type)) safef(countsMessage, sizeof(countsMessage), " : %ld chroms : %ld bases covered ", chromCount, itemCount); else safef(countsMessage, sizeof(countsMessage), " : %ld chroms : %ld count ", chromCount, itemCount); } -if (protectedTrack(tdb, tdb->track)) +if (protectedTrack(db, tdb, tdb->track)) hPrintf("
  • %s: %s protected data
  • \n", tdb->track, tdb->type); else if (isSupportedType(tdb->type)) { char urlReference[2048]; safef(urlReference, sizeof(urlReference), "(sample data)%s\n", urlPrefix, hub->url, genome, tdb->track, extraFlags, errorPrint); if (allowedBigBedType(tdb->type)) hPrintf("
  • %s: %s%s%s
  • \n", tdb->track, tdb->type, countsMessage, urlReference); else if (startsWithWord("bigWig", tdb->type)) hPrintf("
  • %s: %s%s%s
  • \n", tdb->track, tdb->type, countsMessage, urlReference); else hPrintf("
  • %s: %s%s%s
  • \n", tdb->track, tdb->type, countsMessage, urlReference); } else { @@ -503,31 +503,31 @@ if (relIdxUrl != NULL) bigDataIndex = trackHubRelativeUrl(hub->genomeList->trackDbFile, relIdxUrl); char *bigDataUrl = trackDbSetting(tdbEl, "bigDataUrl"); char *longName = NULL; unsigned longSize = 0; struct dyString *errors = dyStringNew(1024); (void) bbiBriefMeasure(tdbEl->type, bigDataUrl, bigDataIndex, &chromCount, &itemCount, errors, &longName, &longSize); chromSize = longSize; chromName = longName; } if (tdbIsCompositeView(tdbEl)) hPrintf("
  • %s: %s : composite view of parent: %s
  • \n", tdbEl->track, tdbEl->type, tdbEl->parent->track); else { if (isSupportedType(tdbEl->type)) - hubSampleUrl(hub, tdbEl, chromCount, itemCount, genome, errorString); + hubSampleUrl(hub, db, tdbEl, chromCount, itemCount, genome, errorString); else hPrintf("
  • %s: %s : subtrack of parent: %s
  • \n", tdbEl->track, tdbEl->type, tdbEl->parent->track); } hashCountTrack(tdbEl, countTracks); if (tdbEl->subtracks) hubSubTracks(hub, db, tdbEl, countTracks, chromCount, itemCount, chromName, chromSize, genome, errorString); } } hPrintf(" \n"); } /* hubSubTracks() */ static void showSubTracks(struct trackHub *hub, char *db, struct trackDb *tdb, struct hash *countTracks, char *chromName, unsigned chromSize, char *errorString) /* tdb has subtracks, show only subTracks, no details */ { @@ -544,61 +544,61 @@ else { if (isSupportedType(tdbEl->type)) sampleUrl(hub, db, tdbEl, errorString); else hPrintf("
  • %s: %s : subtrack of parent: %s
  • \n", tdbEl->track, tdbEl->type, tdbEl->parent->track); } hashCountTrack(tdbEl, countTracks); if (tdbEl->subtracks) showSubTracks(hub, db, tdbEl, countTracks, chromName, chromSize, errorString); } } hPrintf(" \n"); } -static void trackSettings(struct trackDb *tdb, struct hash *countTracks) +static void trackSettings(char *db, struct trackDb *tdb, struct hash *countTracks) /* process the settingsHash for a trackDb, recursive when subtracks */ { hPrintf("
  • \n"); } static void hubCountOneTdb(struct trackHub *hub, char *db, struct trackDb *tdb, char *bigDataIndex, struct hash *countTracks, char *chromName, unsigned chromSize, char *genome) { char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl"); boolean compositeContainer = tdbIsComposite(tdb); boolean compositeView = tdbIsCompositeView(tdb); boolean superChild = tdbIsSuperTrackChild(tdb); boolean depthSearch = cartUsualBoolean(cart, "depthSearch", FALSE); hashCountTrack(tdb, countTracks); @@ -614,90 +614,90 @@ if (! (compositeContainer || compositeView) ) { if (chromSize < 1 || depthSearch) { char *longName = NULL; unsigned longSize = 0; (void) bbiBriefMeasure(tdb->type, bigDataUrl, bigDataIndex, &chromCount, &itemCount, errors, &longName, &longSize); chromSize = longSize; chromName = longName; } } if (depthSearch && bigDataUrl) { if (isSupportedType(tdb->type)) - hubSampleUrl(hub, tdb, chromCount, itemCount, genome, errors->string); + hubSampleUrl(hub, db, tdb, chromCount, itemCount, genome, errors->string); } else { if (compositeContainer) hPrintf("
  • %s: %s : composite track container has %d subtracks
  • \n", tdb->track, tdb->type, slCount(tdb->subtracks)); else if (compositeView) hPrintf("
  • %s: %s : composite view of parent: %s
  • \n", tdb->track, tdb->type, tdb->parent->track); else if (superChild) { if (isSupportedType(tdb->type)) - hubSampleUrl(hub, tdb, chromCount, itemCount, genome, errors->string); + hubSampleUrl(hub, db, tdb, chromCount, itemCount, genome, errors->string); else hPrintf("
  • %s: %s : superTrack child of parent: %s
  • \n", tdb->track, tdb->type, tdb->parent->track); } else if (! depthSearch && bigDataUrl) { if (isSupportedType(tdb->type)) { - hubSampleUrl(hub, tdb, chromCount, itemCount, genome, errors->string); + hubSampleUrl(hub, db, tdb, chromCount, itemCount, genome, errors->string); } } else { if (isSupportedType(tdb->type)) { - hubSampleUrl(hub, tdb, chromCount, itemCount, genome, errors->string); + hubSampleUrl(hub, db, tdb, chromCount, itemCount, genome, errors->string); } else hPrintf("
  • %s: %s (what is this)
  • \n", tdb->track, tdb->type); } } if (allTrackSettings) { hPrintf("
  • \n"); } else if (tdb->subtracks) { hubSubTracks(hub, db, tdb, countTracks, chromCount, itemCount, chromName, chromSize, genome, errors->string); } return; } /* static void hubCountOneTdb(char *db, struct trackDb *tdb, * char *bigDataIndex, struct hash *countTracks, * char *chromName, unsigned chromSize) */ static void countOneTdb(char *db, struct trackDb *tdb, struct hash *countTracks, char *chromName, unsigned chromSize, char *errorString) /* for this tdb in this db, count it up and provide a sample */ { char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl"); boolean compositeContainer = tdbIsComposite(tdb); boolean compositeView = tdbIsCompositeView(tdb); boolean superChild = tdbIsSuperTrackChild(tdb); boolean depthSearch = cartUsualBoolean(cart, "depthSearch", FALSE); -boolean protectedData = protectedTrack(tdb, tdb->track); +boolean protectedData = protectedTrack(db, tdb, tdb->track); hashCountTrack(tdb, countTracks); if (compositeContainer) hPrintf("
  • %s: %s : composite track container has %d subtracks
  • \n", tdb->track, tdb->type, slCount(tdb->subtracks)); else if (compositeView) hPrintf("
  • %s: %s : composite view of parent: %s
  • \n", tdb->track, tdb->type, tdb->parent->track); else if (superChild) { if (isSupportedType(tdb->type)) sampleUrl(NULL, db, tdb, errorString); else hPrintf("
  • %s: %s : superTrack child of parent: %s
  • \n", tdb->track, tdb->type, tdb->parent->track); } else if (! depthSearch && bigDataUrl) { @@ -705,31 +705,31 @@ hPrintf("
  • %s: %s : <protected data>
  • \n", tdb->track, tdb->type); else hPrintf("
  • %s: %s : %s
  • \n", tdb->track, tdb->type, bigDataUrl); } else { if (isSupportedType(tdb->type)) sampleUrl(NULL, db, tdb, errorString); else hPrintf("
  • %s: %s
  • \n", tdb->track, tdb->type); } if (allTrackSettings) { hPrintf("
  • \n"); } else if (tdb->subtracks) { showSubTracks(NULL, db, tdb, countTracks, chromName, chromSize, NULL); } return; } /* static void countOneTdb(char *db, struct trackDb *tdb, * struct hash *countTracks, char *chromName, * unsigned chromSize) */ static unsigned largestChrom(char *db, char **nameReturn, int *chromCount) /* return the length and get the chrom name for the largest chrom * from chromInfo table. For use is sample getData URLs