def add(self, bento_name, bento_version): # Full path containing saved BentoService bundle, it the base path with service # name and service version as prefix. e.g.: # with base_path = '/tmp/my_bento_repo/', the saved bento will resolve in # the directory: '/tmp/my_bento_repo/service_name/version/' target_dir = os.path.join(self.base_path, bento_name, bento_version) # Ensure parent directory exist Path(os.path.join(self.base_path), bento_name).mkdir( parents=True, exist_ok=True ) # Raise if target bento version already exist in storage if os.path.exists(target_dir): raise YataiRepositoryException( "Existing BentoService bundle {name}:{version} found in repository: " "{target_dir}".format( name=bento_name, version=bento_version, target_dir=target_dir ) ) # Create target directory for upload os.mkdir(target_dir) return BentoUri(type=self.uri_type, uri=target_dir)
def add(self, bento_name, bento_version): # Generate pre-signed s3 path for upload object_name = self._get_object_name(bento_name, bento_version) try: response = self.s3_client.generate_presigned_post( self.bucket, object_name, Fields=None, Conditions=None, ExpiresIn=self._expiration, ) except Exception as e: raise YataiRepositoryException( "Not able to get pre-signed URL on S3. Error: {}".format(e) ) additional_fields = response['fields'] additional_fields['url'] = response['url'] return BentoUri( type=self.uri_type, uri='s3://{}/{}'.format(self.bucket, object_name), additional_fields=json.dumps(additional_fields), )
def _bento_orm_obj_to_pb(bento_obj): bento_service_metadata_pb = ParseDict(bento_obj.bento_service_metadata, BentoServiceMetadata()) bento_uri = BentoUri(uri=bento_obj.uri, type=BentoUri.StorageType.Value(bento_obj.uri_type)) return BentoPB( name=bento_obj.name, version=bento_obj.version, uri=bento_uri, bento_service_metadata=bento_service_metadata_pb, )
def add(self, bento_name, bento_version): # Generate pre-signed s3 path for upload object_name = self._get_object_name(bento_name, bento_version) try: response = self.s3_client.generate_presigned_url( 'put_object', Params={ 'Bucket': self.bucket, 'Key': object_name }, ExpiresIn=self._expiration, ) except Exception as e: raise YataiRepositoryException( "Not able to get pre-signed URL on S3. Error: {}".format(e)) return BentoUri( type=self.uri_type, uri='s3://{}/{}'.format(self.bucket, object_name), s3_presigned_url=response, )