Importing files from a volume

The Seven Bridges API allows you to import files from a volume in bulk rather than one by one. Using the bulk API feature, you can import up to 100 files per call.

Not optimized for rate limit

Importing individual files requires two API calls for each file: one to find the file by name, and another one to import it. We recommend using the bulk API call instead.

for f in files_to_import:
    imported_file = api.imports.submit_import(
        location='christian_demo_files/' + f,

Optimized for rate limit

Using the bulk API feature, you will first query all files that need to be imported and then use one API to import up to 100 files.

def bulk_import_files(file_names, volume, location, project, overwrite=True):
    Imports list of files from volume in bulk.

    chunk_size = 100  # Max legal bulk size for import is 100 items.
    final_responses = []

    def is_finished(response):
        return response in ["COMPLETED", "FAILED", "ABORTED"]

    def error_handling_after_completion(responses):
        errors = [s.resource.error.message for s in responses
                  if s.resource.state == "FAILED"]
        if errors:
            data = [
                if s.resource.state == "FAILED"
                else s.resource.result
                for s in responses
            raise Exception(
                'There were errors with bulk exporting.\n' +
                '\n'.join([str(d) for d in data])

    def error_handling_after_submission(responses):
        errors = [s.error.message for s in responses if not s.valid]
        if errors:
            data = [s for s in responses if not s.valid]

            raise Exception(
                'There were errors with bulk submission.\n' +
                    f'<Error: status={s.error.status}, code={s.error.code}>; '
                    for s in data

    # import files in batches of 100 each
    for i in range(0, len(file_names), chunk_size):

        # setup list of dictionary with import requests
        imports = [
                'volume': volume,
                'location': location + '/' + fn,
                'project': project,
                'name': fn,
                'overwrite': overwrite
            for fn in file_names[i:i + chunk_size]

        # initiate bulk import of batch and wait until finished
        responses = api.imports.bulk_submit(imports)

        # check for errors in bulk submission

        # wait for bulk job to finish
        while not all(is_finished(s.resource.state)
                      for s in responses):
            responses = api.imports.bulk_get(
                [s.resource for s in responses]

        # check if each job finished successfully


    return final_responses
responses = bulk_import_files(