diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exports-api.py b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exports-api.py index 131b8f43235399e3741ed27de1c8db64213819a3..dd849b5fd28bd06642acba68e2f970c500be6331 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exports-api.py +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exports-api.py @@ -32,21 +32,31 @@ from java.util.zip import ZipEntry; from java.util.zip import ZipOutputStream; #To obtain the openBIS URL -from ch.systemsx.cisd.openbis.dss.generic.server import DataStoreServer -OPENBISURL = DataStoreServer.getConfigParameters().getServerURL() + "/openbis/openbis" +from ch.systemsx.cisd.openbis.dss.generic.server import DataStoreServer; +OPENBISURL = DataStoreServer.getConfigParameters().getServerURL() + "/openbis/openbis"; +V3_DSS_BEAN = "data-store-server_INTERNAL"; -#V3 API +#V3 API - Metadata from ch.systemsx.cisd.common.spring import HttpInvokerUtils; -from ch.ethz.sis.openbis.generic.asapi.v3 import IApplicationServerApi +from ch.ethz.sis.openbis.generic.asapi.v3 import IApplicationServerApi; -from ch.ethz.sis.openbis.generic.asapi.v3.dto.project.search import ProjectSearchCriteria -from ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.search import ExperimentSearchCriteria -from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search import SampleSearchCriteria -from ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search import DataSetSearchCriteria -from ch.ethz.sis.openbis.generic.asapi.v3.dto.project.fetchoptions import ProjectFetchOptions -from ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions import ExperimentFetchOptions -from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions import SampleFetchOptions -from ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions import DataSetFetchOptions +from ch.ethz.sis.openbis.generic.asapi.v3.dto.project.search import ProjectSearchCriteria; +from ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.search import ExperimentSearchCriteria; +from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search import SampleSearchCriteria; +from ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search import DataSetSearchCriteria; +from ch.ethz.sis.openbis.generic.asapi.v3.dto.project.fetchoptions import ProjectFetchOptions; +from ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions import ExperimentFetchOptions; +from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions import SampleFetchOptions; +from ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions import DataSetFetchOptions; + +#V3 API - Files +from ch.ethz.sis.openbis.generic.dssapi.v3 import IDataStoreServerApi; +from ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.search import DataSetFileSearchCriteria; +from ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.fetchoptions import DataSetFileFetchOptions; +from ch.systemsx.cisd.openbis.dss.generic.shared import ServiceProvider; +from ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.id import DataSetFilePermId; +from ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id import DataSetPermId; +from ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.download import DataSetFileDownloadOptions; #JSON from ch.ethz.sis.openbis.generic.server.sharedapi.v3.json import GenericObjectMapper; @@ -82,6 +92,8 @@ def process(tr, params, tableBuilder): def exportAll(tr, params): sessionToken = params.get("sessionToken"); v3 = HttpInvokerUtils.createServiceStub(IApplicationServerApi, OPENBISURL + IApplicationServerApi.SERVICE_URL, 30 * 1000); + v3d = ServiceProvider.getApplicationContext().getBean(V3_DSS_BEAN); + entity = params.get("entity"); entityAsPythonMap = { "type" : entity.get("type"), "permId" : entity.get("permId") }; entitiesToExport = [entityAsPythonMap]; @@ -99,33 +111,45 @@ def exportAll(tr, params): results = v3.searchProjects(sessionToken, criteria, ProjectFetchOptions()); print "Found: " + str(results.getTotalCount()) + " projects"; for project in results.getObjects(): - entitiesToExport.append({ "type" : "PROJECT", "permId" : project.getPermId().getPermId() }); - entitiesToExpand.append({ "type" : "PROJECT", "permId" : project.getPermId().getPermId() }); + entityFound = { "type" : "PROJECT", "permId" : project.getPermId().getPermId() }; + entitiesToExport.append(entityFound); + entitiesToExpand.append(entityFound); if type == "PROJECT": criteria = ExperimentSearchCriteria(); criteria.withProject().withPermId().thatEquals(permId); results = v3.searchExperiments(sessionToken, criteria, ExperimentFetchOptions()); print "Found: " + str(results.getTotalCount()) + " experiments"; for experiment in results.getObjects(): - entitiesToExport.append({ "type" : "EXPERIMENT", "permId" : experiment.getPermId().getPermId() }); - entitiesToExpand.append({ "type" : "EXPERIMENT", "permId" : experiment.getPermId().getPermId() }); + entityFound = { "type" : "EXPERIMENT", "permId" : experiment.getPermId().getPermId() }; + entitiesToExport.append(entityFound); + entitiesToExpand.append(entityFound); if type == "EXPERIMENT": criteria = SampleSearchCriteria(); criteria.withExperiment().withPermId().thatEquals(permId); results = v3.searchSamples(sessionToken, criteria, SampleFetchOptions()); print "Found: " + str(results.getTotalCount()) + " samples"; for sample in results.getObjects(): - entitiesToExport.append({ "type" : "SAMPLE", "permId" : sample.getPermId().getPermId() }); - entitiesToExpand.append({ "type" : "SAMPLE", "permId" : sample.getPermId().getPermId() }); + entityFound = { "type" : "SAMPLE", "permId" : sample.getPermId().getPermId() }; + entitiesToExport.append(entityFound); + entitiesToExpand.append(entityFound); if type == "SAMPLE": criteria = DataSetSearchCriteria(); criteria.withSample().withPermId().thatEquals(permId); results = v3.searchDataSets(sessionToken, criteria, DataSetFetchOptions()); print "Found: " + str(results.getTotalCount()) + " datasets"; for dataset in results.getObjects(): - entitiesToExport.append({ "type" : "DATASET", "permId" : dataset.getPermId().getPermId() }); - entitiesToExpand.append({ "type" : "DATASET", "permId" : dataset.getPermId().getPermId() }); - + entityFound = { "type" : "DATASET", "permId" : dataset.getPermId().getPermId() }; + entitiesToExport.append(entityFound); + entitiesToExpand.append(entityFound); + if type == "DATASET": + criteria = DataSetFileSearchCriteria(); + criteria.withDataSet().withPermId().thatEquals(permId); + results = v3d.searchFiles(sessionToken, criteria, DataSetFileFetchOptions()); + print "Found: " + str(results.getTotalCount()) + " files"; + for file in results.getObjects(): + entityFound = { "type" : "FILE", "permId" : permId, "path" : file.getPath(), "isDirectory" : file.isDirectory() }; + entitiesToExport.append(entityFound); + entitiesToExpand.append(entityFound); print "Found " + str(len(entitiesToExport)) + " entities to export."; params.put("entities", entitiesToExport); return export(tr, params); @@ -161,6 +185,8 @@ def addToZipFile(path, file, zos): def export(tr, params): sessionToken = params.get("sessionToken"); v3 = HttpInvokerUtils.createServiceStub(IApplicationServerApi, OPENBISURL + IApplicationServerApi.SERVICE_URL, 30 * 1000); + v3d = ServiceProvider.getApplicationContext().getBean(V3_DSS_BEAN); + objectCache = {}; objectMapper = GenericObjectMapper(); objectMapper.enable(SerializationFeature.INDENT_OUTPUT); @@ -232,7 +258,19 @@ def export(tr, params): fetchOps.withChildren(); entityObj = v3.searchDataSets(sessionToken, criteria, fetchOps).getObjects().get(0); entityFilePath = getFileName(entityObj.getSample().getExperiment().getProject().getSpace().getCode(), entityObj.getSample().getExperiment().getProject().getCode(), entityObj.getSample().getExperiment().getCode(), entityObj.getSample().getCode(), entityObj.getCode()); + if type == "FILE" and not entity["isDirectory"]: + datasetEntityObj = objectCache[entity["permId"]]; + datasetEntityFilePath = getFileName(datasetEntityObj.getSample().getExperiment().getProject().getSpace().getCode(), datasetEntityObj.getSample().getExperiment().getProject().getCode(), datasetEntityObj.getSample().getExperiment().getCode(), datasetEntityObj.getSample().getCode(), datasetEntityObj.getCode()); + filePath = datasetEntityFilePath + "/" + entity["path"]; + rawFileInputStream = v3d.downloadFiles(sessionToken, [DataSetFilePermId(DataSetPermId(permId), entity["path"])], DataSetFileDownloadOptions()); + rawFile = File(rootDir + filePath + ".json"); + rawFile.getParentFile().mkdirs(); + IOUtils.copyLarge(rawFileInputStream, FileOutputStream(rawFile)); + addToZipFile(filePath, rawFile, zos); + if entityObj is not None: + objectCache[permId] = entityObj; + if entityObj is not None and entityFilePath is not None: entityJson = String(objectMapper.writeValueAsString(entityObj)); jsonEntityFile = File(rootDir + entityFilePath + ".json");