code: def InitializeUpload(self, http_request, http=None, client=None):
          
          if self.strategy is None:
              raise exceptions.UserError(
                  'No upload strategy set; did you call ConfigureRequest?')
          if http is None and client is None:
              raise exceptions.UserError('Must provide client or http.')
          if self.strategy != RESUMABLE_UPLOAD:
              return
          http = http or client.http
          if client is not None:
              http_request.url = client.FinalizeTransferUrl(http_request.url)
          self.EnsureUninitialized()
          http_response = http_wrapper.MakeRequest(http, http_request,
                                                   retries=self.num_retries)
          if http_response.status_code != http_client.OK:
              raise exceptions.HttpError.FromResponse(http_response)
  
          self.__server_chunk_granularity = http_response.info.get(
              'X-Goog-Upload-Chunk-Granularity')
          url = http_response.info['location']
          if client is not None:
              url = client.FinalizeTransferUrl(url)
          self._Initialize(http, url)
  
          # Unless the user has requested otherwise, we want to just
          # go ahead and pump the bytes now.
          if self.auto_transfer:
              return self.StreamInChunks()
          return http_response
docs: Initialize this upload from the given http_request.