def obj_create(self, bundle, **kwargs): ''' Creates a new DataFile object from the provided bundle.data dict. If a duplicate key error occurs, responds with HTTP Error 409: CONFLICT ''' try: retval = super(DataFileResource, self).obj_create(bundle, **kwargs) except IntegrityError as err: if "duplicate key" in str(err): raise ImmediateHttpResponse(HttpResponse(status=409)) raise if 'replicas' not in bundle.data or not bundle.data['replicas']: # no replica specified: return upload path and create dfo for # new path sbox = bundle.obj.get_receiving_storage_box() if sbox is None: raise NotImplementedError dfo = DataFileObject( datafile=bundle.obj, storage_box=sbox) dfo.create_set_uri() dfo.save() self.temp_url = dfo.get_full_path() return retval
def test_checksums(self): ''' Ensure that we can calculate an MD5 sum and a SHA512 sum for a file in S3 object storage ''' dfo = DataFileObject(storage_box=self.s3_storage_box, datafile=self.datafile) def mock_download_fileobj(*args, **kwargs): def download(self, uri, pipe): pipe.write(b'test') return download with patch('boto3.s3.inject.bucket_download_fileobj', new_callable=mock_download_fileobj): checksums = dfo.calculate_checksums(compute_md5=True, compute_sha512=True) self.assertEqual(checksums['md5sum'], self.datafile.md5sum) self.assertEqual(checksums['sha512sum'], self.datafile.sha512sum)
def obj_create(self, bundle, **kwargs): retval = super(tardis.tardis_portal.api.DataFileResource, self)\ .obj_create(bundle, **kwargs) if 'replicas' not in bundle.data or not bundle.data['replicas']: # no replica specified: return upload path and create dfo for # new path datafile = bundle.obj try: ip = get_ip(bundle.request) uploader = Uploader.objects\ .filter(wan_ip_address=ip, instruments__id=datafile.dataset.instrument.id)\ .first() uploader_registration_request = \ UploaderRegistrationRequest.objects.get(uploader=uploader) sbox = uploader_registration_request.approved_storage_box except: logger.warning(traceback.format_exc()) sbox = datafile.get_receiving_storage_box() if sbox is None: raise NotImplementedError dfo = DataFileObject( datafile=datafile, storage_box=sbox) dfo.create_set_uri() dfo.save() self.temp_url = dfo.get_full_path() return retval
def obj_create(self, bundle, **kwargs): retval = super(DataFileResource, self).obj_create(bundle, **kwargs) if 'replicas' not in bundle.data or not bundle.data['replicas']: # no replica specified: return upload path and create dfo for # new path sbox = bundle.obj.get_receiving_storage_box() if sbox is None: raise NotImplementedError dfo = DataFileObject(datafile=bundle.obj, storage_box=sbox) dfo.create_set_uri() dfo.save() self.temp_url = dfo.get_full_path() return retval
def obj_create(self, bundle, **kwargs): ''' Creates a new DataFile object from the provided bundle.data dict. If a duplicate key error occurs, responds with HTTP Error 409: CONFLICT ''' try: retval = super(tardis.tardis_portal.api.DataFileResource, self)\ .obj_create(bundle, **kwargs) except IntegrityError as err: if "duplicate key" in str(err): raise ImmediateHttpResponse(HttpResponse(status=409)) raise if 'replicas' not in bundle.data or not bundle.data['replicas']: # no replica specified: return upload path and create dfo for # new path datafile = bundle.obj try: if 'uploader_uuid' in bundle.data and \ 'requester_key_fingerprint' in bundle.data: uploader_uuid = bundle.data['uploader_uuid'] fingerprint = bundle.data['requester_key_fingerprint'] uploader = Uploader.objects.get(uuid=uploader_uuid) uploader_registration_request = \ UploaderRegistrationRequest.objects.get( uploader=uploader, requester_key_fingerprint=fingerprint) sbox = uploader_registration_request.approved_storage_box else: ip = get_ip(bundle.request) instrument_id = datafile.dataset.instrument.id uploader = Uploader.objects\ .filter(wan_ip_address=ip, instruments__id=instrument_id)\ .first() uploader_registration_request = \ UploaderRegistrationRequest.objects\ .get(uploader=uploader) sbox = uploader_registration_request.approved_storage_box except: logger.warning(traceback.format_exc()) sbox = datafile.get_receiving_storage_box() if sbox is None: raise NotImplementedError dfo = DataFileObject( datafile=datafile, storage_box=sbox) dfo.create_set_uri() dfo.save() self.temp_url = dfo.get_full_path() return retval
def obj_create(self, bundle, **kwargs): ''' Creates a new DataFile object from the provided bundle.data dict. If a duplicate key error occurs, responds with HTTP Error 409: CONFLICT ''' try: retval = super(DataFileAppResource, self).obj_create(bundle, **kwargs) except IntegrityError as err: if "duplicate key" in str(err): raise ImmediateHttpResponse(HttpResponse(status=409)) raise if 'replicas' not in bundle.data or not bundle.data['replicas']: # no replica specified: return upload path and create dfo for # new path datafile = bundle.obj try: if 'uploader_uuid' in bundle.data and \ 'requester_key_fingerprint' in bundle.data: uploader_uuid = bundle.data['uploader_uuid'] fingerprint = bundle.data['requester_key_fingerprint'] uploader = Uploader.objects.get(uuid=uploader_uuid) uploader_registration_request = \ UploaderRegistrationRequest.objects.get( uploader=uploader, requester_key_fingerprint=fingerprint) sbox = uploader_registration_request.approved_storage_box else: ip = get_ip(bundle.request) instrument_id = datafile.dataset.instrument.id uploader = Uploader.objects\ .filter(wan_ip_address=ip, instruments__id=instrument_id)\ .first() uploader_registration_request = \ UploaderRegistrationRequest.objects\ .get(uploader=uploader) sbox = uploader_registration_request.approved_storage_box except: logger.warning(traceback.format_exc()) sbox = datafile.get_receiving_storage_box() if sbox is None: raise NotImplementedError dfo = DataFileObject( datafile=datafile, storage_box=sbox) dfo.create_set_uri() dfo.save() self.temp_url = dfo.get_full_path() return retval
def obj_create(self, bundle, **kwargs): retval = super(DataFileResource, self).obj_create(bundle, **kwargs) if 'replicas' not in bundle.data or not bundle.data['replicas']: # no replica specified: return upload path and create dfo for # new path sbox = bundle.obj.get_receiving_storage_box() if sbox is None: raise NotImplementedError dfo = DataFileObject( datafile=bundle.obj, storage_box=sbox) dfo.create_set_uri() dfo.save() self.temp_url = dfo.get_full_path() return retval