Skip to content

Commit

Permalink
feat(FC): Add function getFileUserMetadata to get user metadata for l…
Browse files Browse the repository at this point in the history
…ist of lfns

add DB internal getFileDetailsPublic to add permission check before getFileDetails
  • Loading branch information
ILCDIRAC authored and andresailer committed Aug 1, 2024
1 parent 5b24a03 commit 23a1dd9
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
17 changes: 17 additions & 0 deletions src/DIRAC/DataManagementSystem/DB/FileCatalogDB.py
Original file line number Diff line number Diff line change
Expand Up @@ -769,6 +769,23 @@ def getFileDescendents(self, lfns, depths, credDict):
successful = res["Value"]["Successful"]
return S_OK({"Successful": successful, "Failed": failed})

def getFileDetailsPublic(self, lfns, credDict):
"""Return all the metadata, including user defined, for those lfns that exist.
:return: S_OK with a dictionary of LFNs to detailed information
"""

res = self._checkPathPermissions("getFileMetadata", lfns, credDict)
if not res["OK"]:
return res
failed = res["Value"]["Failed"]

# if no successful, just return empty dict
if not res["Value"]["Successful"]:
return S_OK({})

return self.getFileDetails(res["Value"]["Successful"], credDict)

def getFileDetails(self, lfnList, credDict):
"""Get all the metadata for the given files"""
connection = False
Expand Down
6 changes: 6 additions & 0 deletions src/DIRAC/DataManagementSystem/Service/FileCatalogHandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,12 @@ def export_getFileMetadata(self, lfns):
"""Get the metadata associated to supplied lfns"""
return self.fileCatalogDB.getFileMetadata(lfns, self.getRemoteCredentials())

types_getFileUserMetadata = [[list, dict, str]]

def export_getFileUserMetadata(self, lfns):
"""Get all the metadata associated to supplied lfns, including user metadata"""
return self.fileCatalogDB.getFileDetailsPublic(lfns, self.getRemoteCredentials())

types_getReplicas = [[list, dict, str], bool]

def export_getReplicas(self, lfns, allStatus=False):
Expand Down
6 changes: 6 additions & 0 deletions src/DIRAC/Resources/Catalog/FileCatalogClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class FileCatalogClient(FileCatalogClientBase):
READ_METHODS = FileCatalogClientBase.READ_METHODS + [
"isFile",
"getFileMetadata",
"getFileUserMetadata",
"getReplicas",
"getReplicaStatus",
"getFileSize",
Expand Down Expand Up @@ -472,6 +473,11 @@ def getFileMetadata(self, lfns, timeout=120):
"""Get the metadata associated to supplied lfns"""
return self._getRPC(timeout=timeout).getFileMetadata(lfns)

@checkCatalogArguments
def getFileUserMetadata(self, lfns, timeout=120):
"""Get the (user) metadata associated to supplied lfns"""
return self._getRPC(timeout=timeout).getFileUserMetadata(lfns)

@checkCatalogArguments
def getReplicaStatus(self, lfns, timeout=120):
"""Get the status for the supplied replicas"""
Expand Down

0 comments on commit 23a1dd9

Please sign in to comment.