@@ -148,7 +148,7 @@ def getIdList(objs, marker=None, limit=None):
148148 return ret_ids
149149
150150
151- async def get_domains (request ):
151+ async def get_domains (request , include_hrefs = False ):
152152 """This method is called by GET_Domains and GET_Domain"""
153153 app = request .app
154154 params = request .rel_url .query
@@ -251,6 +251,8 @@ async def get_domains(request):
251251 if s3key [- 1 ] != "/" :
252252 log .debug (f"get_domains - ignoring key: { s3key } " )
253253 continue
254+ if prefix == '/' and s3key == "db" :
255+ log .debug ("get_domains - ignoring db key at top level" )
254256 if len (s3key ) > 1 and s3key [- 2 ] == "/" :
255257 # trim off double slash
256258 s3key = s3key [:- 1 ]
@@ -376,7 +378,16 @@ async def get_domains(request):
376378 if domain in crawler ._domain_dict :
377379 domain_json = crawler ._domain_dict [domain ]
378380 # mixin domain name
381+ log .debug (f"get_domains - adding name: { domain } to domain json" )
379382 domain_json ["name" ] = domain
383+ if include_hrefs :
384+ hrefs = []
385+ if domain [- 1 ] == "/" :
386+ domain = domain [:- 1 ]
387+ # add an href to get sub-domains if this is a folder
388+ href = getHref (request , "/" , domain = domain )
389+ hrefs .append ({"rel" : "domain" , "href" : href })
390+ domain_json ["hrefs" ] = hrefs
380391 domains .append (domain_json )
381392 else :
382393 if not query :
@@ -400,7 +411,16 @@ async def GET_Domains(request):
400411
401412 domains = await get_domains (request )
402413
414+ for domain in domains :
415+ domain_name = domain ["name" ]
416+ href = getHref (request , "/" , domain = domain_name )
417+ domain ["hrefs" ] = [{"rel" : "domain" , "href" : href }]
418+
403419 rsp_json = {"domains" : domains }
420+ hrefs = []
421+ folder_path = getDomainFromRequest (request , validate = False )
422+ href = getHref (request , "/domains" , domain = folder_path )
423+ hrefs .append ({"rel" : "self" , "href" : href })
404424 rsp_json ["hrefs" ] = []
405425 resp = await jsonResponse (request , rsp_json )
406426 log .response (request , resp = resp )
@@ -447,7 +467,7 @@ async def GET_Domain(request):
447467 bucket = getBucketForDomain (domain )
448468 log .debug (f"GET_Domain domain: { domain } bucket: { bucket } " )
449469
450- if not bucket :
470+ if not bucket and domain :
451471 # no bucket defined, raise 400
452472 msg = "Bucket not provided"
453473 log .warn (msg )
@@ -460,11 +480,21 @@ async def GET_Domain(request):
460480 verbose = True
461481
462482 if not domain :
483+ if "host" in params :
484+ msg = "Passing domain path as 'host' parameter is no longer supported"
485+ log .warn (msg )
486+ raise HTTPBadRequest (reason = msg )
487+ # This is a special case since the top-level folder isn't an
488+ # actual domain (i.e. doesn't have corresponding domain json in S3)
463489 log .info ("no domain passed in, returning all top-level domains" )
464490 # no domain passed in, return top-level domains for this request
465- domains = await get_domains (request )
491+ domains = await get_domains (request , include_hrefs = True )
466492 rsp_json = {"domains" : domains }
467- rsp_json ["hrefs" ] = []
493+ hrefs = []
494+ href = getHref (request , "/" )
495+ hrefs .append ({"rel" : "self" , "href" : href })
496+
497+ rsp_json ["hrefs" ] = hrefs
468498 resp = await jsonResponse (request , rsp_json )
469499 log .response (request , resp = resp )
470500 return resp
@@ -482,6 +512,7 @@ async def GET_Domain(request):
482512 # if h5path is passed in, return object info for that path
483513 # (if exists)
484514 h5path = params ["h5path" ]
515+ log .debug (f"h5path: { h5path } " )
485516
486517 # select which object to perform path search under
487518 base_id = parent_id if parent_id else domain_json ["root" ]
@@ -506,6 +537,7 @@ async def GET_Domain(request):
506537
507538 # client may not know class of object retrieved via path
508539 obj_json ["class" ] = getObjectClass (obj_id )
540+ log .debug (f"got object json: { obj_json } " )
509541
510542 hrefs = []
511543 hrefs .append ({"rel" : "self" , "href" : getHref (request , "/" )})
@@ -553,10 +585,6 @@ async def GET_Domain(request):
553585 if domain_objs :
554586 rsp_json ["domain_objs" ] = domain_objs
555587
556- # include domain class if present
557- # if "class" in domain_json:
558- # rsp_json["class"] = domain_json["class"]
559-
560588 # include dn_ids if requested
561589 if "getdnids" in params and params ["getdnids" ]:
562590 rsp_json ["dn_ids" ] = app ["dn_ids" ]
@@ -573,6 +601,10 @@ async def GET_Domain(request):
573601 hrefs .append ({"rel" : "typebase" , "href" : href })
574602 href = getHref (request , "/groups/" + root_uuid )
575603 hrefs .append ({"rel" : "root" , "href" : href })
604+ else :
605+ # add an href to get sub-domains if this is a folder
606+ href = getHref (request , "/domains" ) + '/'
607+ hrefs .append ({"rel" : "domains" , "href" : href })
576608
577609 hrefs .append ({"rel" : "acls" , "href" : getHref (request , "/acls" )})
578610 parent_domain = getParentDomain (domain )
@@ -587,9 +619,12 @@ async def GET_Domain(request):
587619
588620 rsp_json ["hrefs" ] = hrefs
589621 # mixin limits, version
590- domain_json ["limits" ] = getLimits ()
591- domain_json ["compressors" ] = getCompressors ()
592- domain_json ["version" ] = getVersion ()
622+ if "root" in domain_json :
623+ log .debug ('getting limits, compressors, version for domain' )
624+ domain_json ["limits" ] = getLimits ()
625+ domain_json ["compressors" ] = getCompressors ()
626+ domain_json ["version" ] = getVersion ()
627+ log .debug (f"returning domain json: { domain_json } " )
593628 resp = await jsonResponse (request , rsp_json )
594629 log .response (request , resp = resp )
595630 return resp
0 commit comments