diff --git a/f500/collecting/Fairdom.py b/f500/collecting/Fairdom.py index 43e7466920f9abb833658735a6de8adff8c5d2e5..05a25bba60a93fc2abee754f6a453430afe87005 100644 --- a/f500/collecting/Fairdom.py +++ b/f500/collecting/Fairdom.py @@ -33,7 +33,7 @@ class Fairdom: investigationJSON['data']['attributes']['description'] = "PlantEye data from NPEC" investigationJSON['data']['relationships'] = {} investigationJSON['data']['relationships']['projects'] = {} - investigationJSON['data']['relationships']['projects']['data'] = [{'id' : self.args.project , 'type' : 'projects'}] + investigationJSON['data']['relationships']['projects']['data'] = [{'id' : str(self.args.project) , 'type' : 'projects'}] return investigationJSON def createStudyJSON(self, study, investigationID): @@ -46,7 +46,7 @@ class Fairdom: #studyJSON['data']['attributes']['policy'] = {'access':'view', 'permissions': [{'resource': {'id': '1','type': 'people'},'access': 'manage'}]} studyJSON['data']['relationships'] = {} studyJSON['data']['relationships']['investigation'] = {} - studyJSON['data']['relationships']['investigation']['data'] = {'id' : investigationID, 'type' : 'investigations'} + studyJSON['data']['relationships']['investigation']['data'] = {'id' : str(investigationID), 'type' : 'investigations'} return studyJSON def createAssayJSON(self, assay, studyID): @@ -61,7 +61,7 @@ class Fairdom: #assayJSON['data']['attributes']['technology_type'] = {'uri' : "http://jermontology.org/ontology/JERMOntology#PlantEye"} assayJSON['data']['relationships'] = {} assayJSON['data']['relationships']['study'] = {} - assayJSON['data']['relationships']['study']['data'] = {'id' : studyID, 'type' : 'studies'} + assayJSON['data']['relationships']['study']['data'] = {'id' : str(studyID), 'type' : 'studies'} assayJSON['data']['relationships']['organisms'] = {} assayJSON['data']['relationships']['organisms']['data'] = [{'id' : str(self.args.organism), 'type' : 'organisms'}] return assayJSON @@ -77,25 +77,27 @@ class Fairdom: 'content-type': 'image/svg+xml'}] data_fileJSON['data']['relationships'] = {} data_fileJSON['data']['relationships']['projects'] = {} - data_fileJSON['data']['relationships']['projects']['data'] = [{'id' : self.args.project , 'type' : 'projects'}] + data_fileJSON['data']['relationships']['projects']['data'] = [{'id' : str(self.args.project) , 'type' : 'projects'}] return data_fileJSON def addSampleToAssayJSON(self, sampleID, assayJSON): if 'samples' not in assayJSON['data']['relationships']: assayJSON['data']['relationships']['samples'] = {} assayJSON['data']['relationships']['samples']['data'] = [] - assayJSON['data']['relationships']['samples']['data'].append({'id': sampleID, 'type': 'samples'}) + assayJSON['data']['relationships']['samples']['data'].append({'id': str(sampleID), 'type': 'samples'}) def addDataFileToAssayJSON(self, data_fileID, assayJSON): if 'data_files' not in assayJSON['data']['relationships']: assayJSON['data']['relationships']['data_files'] = {} assayJSON['data']['relationships']['data_files']['data'] = [] - assayJSON['data']['relationships']['data_files']['data'].append({'id': data_fileID, 'type': 'data_files'}) + assayJSON['data']['relationships']['data_files']['data'].append({'id': str(data_fileID), 'type': 'data_files'}) def addDataFilesToSampleJSON(self, assayJSON, sampleJSON): if 'data_files' not in sampleJSON['data']['relationships']: - sampleJSON['data']['relationships']['data_files'] = [] - sampleJSON['data']['relationships']['data_files'].extend(assayJSON['data']['relationships']['data_files']) + sampleJSON['data']['relationships']['data_files'] = {} + sampleJSON['data']['relationships']['data_files']['data'] = [] + if 'data_files' in assayJSON['data']['relationships']: + sampleJSON['data']['relationships']['data_files']['data'].extend(assayJSON['data']['relationships']['data_files']['data']) def createSampleJSON(self, sample): @@ -107,9 +109,9 @@ class Fairdom: sampleJSON['data']['attributes']['attribute_map'] = {'PotID' : sample.name} sampleJSON['data']['relationships'] = {} sampleJSON['data']['relationships']['projects'] = {} - sampleJSON['data']['relationships']['projects']['data'] = [{'id' : self.args.project, 'type' : 'projects'}] + sampleJSON['data']['relationships']['projects']['data'] = [{'id' : str(self.args.project), 'type' : 'projects'}] sampleJSON['data']['relationships']['sample_type'] = {} - sampleJSON['data']['relationships']['sample_type']['data'] = {'id' : self.args.sample_type, 'type' : 'sample_types'} + sampleJSON['data']['relationships']['sample_type']['data'] = {'id' : str(self.args.sample_type), 'type' : 'sample_types'} return sampleJSON def upload(self): @@ -135,6 +137,7 @@ class Fairdom: else: self.logger.error("Could not create new study, error code {}".format(r.status_code)) exit(1) + countFiles = 0 for assay in study.assays: self.datafiles = {} # Assays have none-unique names for now @@ -143,20 +146,22 @@ class Fairdom: self.currentAssays[assay.filename] = self.createAssayJSON(assay, studyID) assayJSON = self.currentAssays[assay.filename] # create add data files - for data_file in assay.data_files: - if "derived" in data_file.filename: # for now, only upload phenotypic data - if data_file.filename not in self.datafiles: - self.datafiles[data_file.filename] = self.createDataFileJSON(data_file) - r = self.session.post(self.args.URL + '/data_files', json=self.datafiles[data_file.filename]) - if r.status_code == 201 or r.status_code == 200: - data_fileID = r.json()['data']['id'] - self.logger.info("Data file id {} created ({}). Status: {}".format(data_fileID, data_file.filename, r.status_code)) - else: - self.logger.error("Could not create new data file, error code {}".format(r.status_code)) - exit(1) - self.datafiles[data_file.filename]['id'] = data_fileID - data_fileJSON = self.datafiles[data_file.filename] - self.addDataFileToAssayJSON(data_fileID, assayJSON) + if countFiles < 5 : # limit to about 500 files for now + for data_file in assay.data_files: + if "derived" in data_file.filename: # for now, only upload phenotypic data + if data_file.filename not in self.datafiles: + self.datafiles[data_file.filename] = self.createDataFileJSON(data_file) + r = self.session.post(self.args.URL + '/data_files', json=self.datafiles[data_file.filename]) + if r.status_code == 201 or r.status_code == 200: + data_fileID = r.json()['data']['id'] + self.logger.info("Data file id {} created ({}). Status: {}".format(data_fileID, data_file.filename, r.status_code)) + else: + self.logger.error("Could not create new data file, error code {}".format(r.status_code)) + exit(1) + self.datafiles[data_file.filename]['id'] = data_fileID + countFiles += 1 + data_fileJSON = self.datafiles[data_file.filename] + self.addDataFileToAssayJSON(data_fileID, assayJSON) # create / register sample for sample in assay.samples: @@ -175,6 +180,9 @@ class Fairdom: self.logger.info("Sample id {} created ({}). Status: {}".format(sampleID, sample.name, r.status_code)) else: self.logger.error("Could not create new sample, error code {}".format(r.status_code)) + if r.status_code == 422: + self.logger.info(self.logger.info(self.samples[sample.name])) + self.logger.info(r.json()) exit(1) sampleID = self.samples[sample.name]['id'] self.addSampleToAssayJSON(sampleID, self.currentAssays[assay.filename] ) diff --git a/f500/collecting/deleteFAIRObject.py b/f500/collecting/deleteFAIRObject.py index 843f1b1d9e710f298d9ee05cab7f8352bc409be2..7803180c6770ac4b4ec865091ad489cecf26345b 100644 --- a/f500/collecting/deleteFAIRObject.py +++ b/f500/collecting/deleteFAIRObject.py @@ -11,7 +11,7 @@ headers = {"Content-type": "application/vnd.api+json", session = requests.Session() session.headers.update(headers) -for i in range(22726): +for i in range(24077,24577): session.delete("https://test.fairdom-seek.bif.containers.wurnet.nl/data_files/{}".format(i))