From d9d8e11aa9fe13289272946d24d876b03adb36d6 Mon Sep 17 00:00:00 2001 From: ILCDIRAC Date: Wed, 31 Jul 2024 09:25:00 +0200 Subject: [PATCH] feat(FC): Add function to get user metadata for list of lfns --- .../DataManagementSystem/DB/FileCatalogDB.py | 17 +++++++++++++++++ .../Service/FileCatalogHandler.py | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/src/DIRAC/DataManagementSystem/DB/FileCatalogDB.py b/src/DIRAC/DataManagementSystem/DB/FileCatalogDB.py index 92f8ac056ea..6ce5a569ef2 100755 --- a/src/DIRAC/DataManagementSystem/DB/FileCatalogDB.py +++ b/src/DIRAC/DataManagementSystem/DB/FileCatalogDB.py @@ -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 diff --git a/src/DIRAC/DataManagementSystem/Service/FileCatalogHandler.py b/src/DIRAC/DataManagementSystem/Service/FileCatalogHandler.py index 3a0995ac6c3..9c80fab6446 100644 --- a/src/DIRAC/DataManagementSystem/Service/FileCatalogHandler.py +++ b/src/DIRAC/DataManagementSystem/Service/FileCatalogHandler.py @@ -261,6 +261,12 @@ def export_getFileMetadata(self, lfns): """Get the metadata associated to supplied lfns""" return self.fileCatalogDB.getFileMetadata(lfns, self.getRemoteCredentials()) + types_getFileDetails = [[list, dict, str]] + + def export_getFileDetails(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):