@@ -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
@@ -376,7 +376,16 @@ async def get_domains(request):
376376 if domain in crawler ._domain_dict :
377377 domain_json = crawler ._domain_dict [domain ]
378378 # mixin domain name
379+ log .debug (f"get_domains - adding name: { domain } to domain json" )
379380 domain_json ["name" ] = domain
381+ if include_hrefs :
382+ hrefs = []
383+ if domain [- 1 ] == "/" :
384+ domain = domain [:- 1 ]
385+ # add an href to get sub-domains if this is a folder
386+ href = getHref (request , "/" , domain = domain )
387+ hrefs .append ({"rel" : "domain" , "href" : href })
388+ domain_json ["hrefs" ] = hrefs
380389 domains .append (domain_json )
381390 else :
382391 if not query :
@@ -400,7 +409,16 @@ async def GET_Domains(request):
400409
401410 domains = await get_domains (request )
402411
412+ for domain in domains :
413+ domain_name = domain ["name" ]
414+ href = getHref (request , "/" , domain = domain_name )
415+ domain ["hrefs" ] = [{"rel" : "domain" , "href" : href }]
416+
403417 rsp_json = {"domains" : domains }
418+ hrefs = []
419+ folder_path = getDomainFromRequest (request , validate = False )
420+ href = getHref (request , "/domains" , domain = folder_path )
421+ hrefs .append ({"rel" : "self" , "href" : href })
404422 rsp_json ["hrefs" ] = []
405423 resp = await jsonResponse (request , rsp_json )
406424 log .response (request , resp = resp )
@@ -447,7 +465,7 @@ async def GET_Domain(request):
447465 bucket = getBucketForDomain (domain )
448466 log .debug (f"GET_Domain domain: { domain } bucket: { bucket } " )
449467
450- if not bucket :
468+ if not bucket and domain :
451469 # no bucket defined, raise 400
452470 msg = "Bucket not provided"
453471 log .warn (msg )
@@ -460,11 +478,21 @@ async def GET_Domain(request):
460478 verbose = True
461479
462480 if not domain :
481+ if "host" in params :
482+ msg = "Passing domain path as 'host' parameter is no longer supported"
483+ log .warn (msg )
484+ raise HTTPBadRequest (reason = msg )
485+ # This is a special case since the top-level folder isn't an
486+ # actual domain (i.e. doesn't have corresponding domain json in S3)
463487 log .info ("no domain passed in, returning all top-level domains" )
464488 # no domain passed in, return top-level domains for this request
465- domains = await get_domains (request )
489+ domains = await get_domains (request , include_hrefs = True )
466490 rsp_json = {"domains" : domains }
467- rsp_json ["hrefs" ] = []
491+ hrefs = []
492+ href = getHref (request , "/" )
493+ hrefs .append ({"rel" : "self" , "href" : href })
494+
495+ rsp_json ["hrefs" ] = hrefs
468496 resp = await jsonResponse (request , rsp_json )
469497 log .response (request , resp = resp )
470498 return resp
@@ -482,6 +510,7 @@ async def GET_Domain(request):
482510 # if h5path is passed in, return object info for that path
483511 # (if exists)
484512 h5path = params ["h5path" ]
513+ log .debug (f"h5path: { h5path } " )
485514
486515 # select which object to perform path search under
487516 base_id = parent_id if parent_id else domain_json ["root" ]
@@ -506,6 +535,7 @@ async def GET_Domain(request):
506535
507536 # client may not know class of object retrieved via path
508537 obj_json ["class" ] = getObjectClass (obj_id )
538+ log .debug (f"got object json: { obj_json } " )
509539
510540 hrefs = []
511541 hrefs .append ({"rel" : "self" , "href" : getHref (request , "/" )})
@@ -553,10 +583,6 @@ async def GET_Domain(request):
553583 if domain_objs :
554584 rsp_json ["domain_objs" ] = domain_objs
555585
556- # include domain class if present
557- # if "class" in domain_json:
558- # rsp_json["class"] = domain_json["class"]
559-
560586 # include dn_ids if requested
561587 if "getdnids" in params and params ["getdnids" ]:
562588 rsp_json ["dn_ids" ] = app ["dn_ids" ]
@@ -573,6 +599,10 @@ async def GET_Domain(request):
573599 hrefs .append ({"rel" : "typebase" , "href" : href })
574600 href = getHref (request , "/groups/" + root_uuid )
575601 hrefs .append ({"rel" : "root" , "href" : href })
602+ else :
603+ # add an href to get sub-domains if this is a folder
604+ href = getHref (request , "/domains" )
605+ hrefs .append ({"rel" : "domains" , "href" : href })
576606
577607 hrefs .append ({"rel" : "acls" , "href" : getHref (request , "/acls" )})
578608 parent_domain = getParentDomain (domain )
@@ -587,9 +617,12 @@ async def GET_Domain(request):
587617
588618 rsp_json ["hrefs" ] = hrefs
589619 # mixin limits, version
590- domain_json ["limits" ] = getLimits ()
591- domain_json ["compressors" ] = getCompressors ()
592- domain_json ["version" ] = getVersion ()
620+ if "root" in domain_json :
621+ log .debug ('getting limits, compressors, version for domain' )
622+ domain_json ["limits" ] = getLimits ()
623+ domain_json ["compressors" ] = getCompressors ()
624+ domain_json ["version" ] = getVersion ()
625+ log .debug (f"returning domain json: { domain_json } " )
593626 resp = await jsonResponse (request , rsp_json )
594627 log .response (request , resp = resp )
595628 return resp
0 commit comments