Method: Cnvrg::Files#upload_multiple_files

Defined in:
lib/cnvrg/files.rb

#upload_multiple_files(files_list, commit_sha1, progress: nil, suppress_exceptions: false, chunk_size: 100) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/cnvrg/files.rb', line 89

def upload_multiple_files(files_list, commit_sha1, progress: nil, suppress_exceptions: false, chunk_size: 100)
    #open files on the server.
    Cnvrg::Logger.log_info("Uploading project files")
    return if files_list.blank?
    if Cnvrg::Helpers.server_version < 1
      Cnvrg::Logger.log_info("Upload files to older server..")
      return self.upload_files_old(files_list, commit_sha1, progress: progress)
    end

    blob_ids = []
    buffered_errors = {}
    files_list.each_slice(chunk_size).each do |chunk_of_files|
      Cnvrg::Logger.log_info("Upload chunk")
      parsed_chunk_of_files = chunk_of_files.map{|x| [x, self.parse_file(x)] if self.parse_file(x)}.compact.to_h

      resp = Cnvrg::API.request(@base_resource + "upload_files", 'POST', {
          files: parsed_chunk_of_files,
          commit: commit_sha1
      })
      unless Cnvrg::CLI.is_response_success(resp, false)
        raise StandardError.new("unsupported character: folder name can not include / \\  * : ? \" | ")
      end
      # resolve bucket
      res = resp['result']
      files = res['files']

      #upload files
      blob_id_chunk = Parallel.map(files.keys, in_threads: ParallelThreads) do |file|
        begin
          upload_single_file(files[file].merge(parsed_chunk_of_files[file]))
        rescue => e
          Cnvrg::CLI.log_message("Failed to upload #{file}: #{e.message}", 'red') unless suppress_exceptions
          Cnvrg::Logger.log_error(e)
          Cnvrg::Logger.log_method(bind: binding)

          buffered_errors[file] = "Failed to upload #{file}: #{e.message}" if suppress_exceptions

          raise e unless suppress_exceptions
        end
        progress.progress += 1 if progress.present?

        unless buffered_errors.key?(file)
          files[file]["bv_id"]
        else
          nil
        end
      end

    blob_ids.concat blob_id_chunk
  end

  # remove nil files (failed files) from blob_ids
  blob_ids.compact!

  #save files on the server.
  resp = Cnvrg::API.request(@base_resource + "upload_files_save", 'POST', {blob_ids: blob_ids, commit: commit_sha1})
  unless Cnvrg::CLI.is_response_success(resp, false)
    raise SignalException.new("Cant save uploaded files to the server.")
  end

  return buffered_errors
end