979a6409ad7d171eeb48d44b5a0d2cba0d304059 hiram Thu Jun 27 13:43:01 2019 -0700 checking for supported table and avoid container tracks on requests refs #23589 diff --git src/hg/hubApi/getData.c src/hg/hubApi/getData.c index 6849b4d..31dfcb7 100644 --- src/hg/hubApi/getData.c +++ src/hg/hubApi/getData.c @@ -517,33 +517,36 @@ if (isEmpty(genome)) apiErrAbort(err400, err400Msg, "missing genome=<name> for endpoint '/getData/track' given hubUrl='%s'", hubUrl); if (isEmpty(track)) apiErrAbort(err400, err400Msg, "missing track=<name> for endpoint '/getData/track' given hubUrl='%s'", hubUrl); struct trackHub *hub = errCatchTrackHubOpen(hubUrl); struct trackHubGenome *hubGenome = findHubGenome(hub, genome, "/getData/track", hubUrl); struct trackDb *tdb = obtainTdb(hubGenome, NULL); if (NULL == tdb) apiErrAbort(err400, err400Msg, "failed to find a track hub definition in genome=%s for endpoint '/getData/track' given hubUrl='%s'", genome, hubUrl); struct trackDb *thisTrack = findTrackDb(track, tdb); - if (NULL == thisTrack) apiErrAbort(err400, err400Msg, "failed to find specified track=%s in genome=%s for endpoint '/getData/track' given hubUrl='%s'", track, genome, hubUrl); +if (tdbIsComposite(thisTrack) || tdbIsCompositeView(thisTrack)) + apiErrAbort(err400, err400Msg, "container track '%s' does not contain data, use the children of this container for data access", track); +if (! isSupportedType(thisTrack->type)) + apiErrAbort(err415, err415Msg, "track type '%s' for track=%s not supported at this time", thisTrack->type, track); char *bigDataUrl = trackDbSetting(thisTrack, "bigDataUrl"); struct bbiFile *bbi = bigFileOpen(thisTrack->type, bigDataUrl); if (NULL == bbi) apiErrAbort(err400, err400Msg, "track type %s management not implemented yet TBD track=%s in genome=%s for endpoint '/getData/track' given hubUrl='%s'", thisTrack->type, track, genome, hubUrl); struct jsonWrite *jw = apiStartOutput(); jsonWriteString(jw, "hubUrl", hubUrl); jsonWriteString(jw, "genome", genome); unsigned chromSize = 0; struct bbiChromInfo *chromList = NULL; if (isNotEmpty(chrom)) { chromSize = bbiChromSize(bbi, chrom); if (0 == chromSize) @@ -625,33 +628,39 @@ unsigned uStart = 0; unsigned uEnd = chromSize; /* maybe set later */ if ( ! (isEmpty(start) || isEmpty(end)) ) { uStart = sqlUnsigned(start); uEnd = sqlUnsigned(end); if (uEnd < uStart) apiErrAbort(err400, err400Msg, "given start coordinate %u is greater than given end coordinate", uStart, uEnd); } if (isEmpty(db)) apiErrAbort(err400, err400Msg, "missing URL variable genome=<ucscDb> name for endpoint '/getData/track"); if (isEmpty(track)) apiErrAbort(err400, err400Msg, "missing URL variable track=<trackName> name for endpoint '/getData/track"); -struct trackDb *thisTrack = hTrackDbForTrackAndAncestors(db, track); +struct trackDb *thisTrack = hTrackDbForTrack(db, track); + if (NULL == thisTrack) apiErrAbort(err400, err400Msg, "can not find track=%s name for endpoint '/getData/track", track); +if (tdbIsComposite(thisTrack) || tdbIsCompositeView(thisTrack)) + apiErrAbort(err400, err400Msg, "container track '%s' does not contain data, use the children of this container", track); +if (! isSupportedType(thisTrack->type)) + apiErrAbort(err415, err415Msg, "track type '%s' for track=%s not supported at this time subtracks %llx", thisTrack->type, track, (unsigned long long)thisTrack->subtracks); + // tdb->subtracks && COMPOSITE_NODE( tdb->treeNodeType); /* might be a big* track with no table */ char *bigDataUrl = trackDbSetting(thisTrack, "bigDataUrl"); boolean tableTrack = TRUE; /* might have a specific table defined instead of the track name */ char *tableName = trackDbSetting(thisTrack, "table"); if (isNotEmpty(tableName)) { freeMem(sqlTable); sqlTable = cloneString(tableName); } boolean protectedData = FALSE; if (trackDbSetting(thisTrack, "tableBrowser")) protectedData = TRUE;