diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py index 7a0b3713a115c7fc64a9a165eb7c2cf662321328..b898b2b7b3fb242a979ca33933c46a083d92c1cf 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py @@ -44,10 +44,6 @@ def insertPublication(context, parameters): v3 = context.applicationService - name = parameters.get('name') - if name is None: - raise UserFailureException('name parameter missing') - sampleId = createPublicationSample(parameters, sessionToken, v3).get(0) createDataSet(parameters, sessionToken, v3, sampleId) @@ -57,13 +53,18 @@ def insertPublication(context, parameters): def createDataSet(parameters, sessionToken, v3, sampleId): - openBISRelatedIdentifiers = parameters.get('openBISRelatedIdentifiers').split(',') - identifiers = ArrayList(len(openBISRelatedIdentifiers)) - for identifier in openBISRelatedIdentifiers: - identifiers.add(DataSetPermId(identifier)) - - dataSetIds = v3.getDataSets(sessionToken, identifiers, DataSetFetchOptions()).keys() - operationLog.debug('Found %d data sets.' % len(dataSetIds)) + openBISRelatedIdentifiersString = parameters.get('openBISRelatedIdentifiers') + + if openBISRelatedIdentifiersString is not None: + openBISRelatedIdentifiers = openBISRelatedIdentifiersString.split(',') + identifiers = ArrayList(len(openBISRelatedIdentifiers)) + for identifier in openBISRelatedIdentifiers: + identifiers.add(DataSetPermId(identifier)) + dataSetIds = v3.getDataSets(sessionToken, identifiers, DataSetFetchOptions()).keys() + operationLog.debug('Found %d data sets.' % len(dataSetIds)) + else: + dataSetIds = None + operationLog.debug('No data sets searched.') dataStoreCode = getDefaultDataStoreCode(v3, sessionToken) @@ -72,8 +73,11 @@ def createDataSet(parameters, sessionToken, v3, sampleId): dataSetCreation.setTypeId(EntityTypePermId('PUBLICATION_DATA', EntityKind.DATA_SET)) dataSetCreation.setSampleId(sampleId) dataSetCreation.setDataSetKind(DataSetKind.CONTAINER) - dataSetCreation.setComponentIds(dataSetIds) dataSetCreation.setDataStoreId(DataStorePermId(dataStoreCode)) + + if dataSetIds is not None: + dataSetCreation.setComponentIds(dataSetIds) + v3.createDataSets(sessionToken, [dataSetCreation]) @@ -84,16 +88,34 @@ def getDefaultDataStoreCode(v3, sessionToken): def createPublicationSample(parameters, sessionToken, v3): publicationOrganization = parameters.get('publicationOrganization') + if publicationOrganization is None: + raise ValueError('publicationOrganization parameter is None.') + + name = parameters.get('name') + if name is None: + raise ValueError('name parameter is None.') + publicationType = parameters.get('publicationType') # The only valid value for now is "Public Repository" + if publicationType is None: + raise ValueError('publicationType parameter is None.') + publicationDescription = parameters.get('publicationDescription') # Can be empty + if publicationDescription is None: + publicationDescription = '' + publicationURL = parameters.get('publicationURL') + if publicationURL is None: + raise ValueError('publicationURL parameter is None.') + publicationIdentifier = parameters.get('publicationIdentifier') + if publicationIdentifier is None: + raise ValueError('publicationIdentifier parameter is None.') sampleCreation = SampleCreation() sampleCreation.setTypeId(EntityTypePermId('PUBLICATION')) sampleCreation.setExperimentId(ExperimentIdentifier('/PUBLICATIONS/PUBLIC_REPOSITORIES/PUBLICATIONS_COLLECTION')) sampleCreation.setSpaceId(SpacePermId('PUBLICATIONS')) - sampleCreation.setProperty('$NAME', 'TEST NAME') + sampleCreation.setProperty('$NAME', name) sampleCreation.setProperty('$PUBLICATION.ORGANIZATION', publicationOrganization) sampleCreation.setProperty('$PUBLICATION.TYPE', publicationType) sampleCreation.setProperty('$PUBLICATION.IDENTIFIER', publicationIdentifier)