docs: def prepare(self, scheme='http', handle_files=True, encoding='utf-8'):
          """ make this request ready for Clients
  
          :param str scheme: scheme used in this request
          :param bool handle_files: False to skip multipart/form-data encoding
          :param str encoding: encoding for body content.
          :rtype: Request
          """
  
          if isinstance(scheme, list):
              if self.__scheme is None:
                  scheme = scheme.pop()
              else:
                  if self.__scheme in scheme:
                      scheme = self.__scheme
                  else:
                      raise Exception('preferred scheme:{} is not supported by the client or spec:{}'.format(self.__scheme, scheme))
          elif not isinstance(scheme, six.string_types):
              raise ValueError('"scheme" should be a list or string')
  
          # combine path parameters into path
          # TODO: 'dot' is allowed in swagger, but it won't work in python-format
          path_params = {}
          for k, v in six.iteritems(self.__p['path']):
              path_params[k] = six.moves.urllib.parse.quote_plus(v)
  
          self.__path = self.__path.format(**path_params)
  
          # combine path parameters into url
          self.__url = ''.join([scheme, ':', self.__url.format(**path_params)])
  
          # header parameters
          self.__header.update(self.__p['header'])
  
          # update data parameter
          content_type = None
          if self.__p['file']:
              if handle_files:
                  content_type, self.__data = self._prepare_files(encoding)
              else:
                  # client that can encode multipart/form-data, should
                  # access form-data via data property and file from file
                  # property.
  
                  # only form data can be carried along with files,
                  self.__data = self.__p['formData']
  
          elif self.__p['formData']:
              content_type, self.__data = self._prepare_forms()
          elif self.__p['body']:
              content_type, self.__data = self._prepare_body()
          else:
              self.__data = None
  
          if content_type:
              self.__header.update({'Content-Type': content_type})
  
          accept = self.__produce
          if not accept and self.__op.produces:
              accept = self.__op.produces[0]
          if accept:
              if self.__op.produces and accept not in self.__op.produces:
                  raise errs.SchemaError('accept {0} does not present in {1}'.format(accept, self.__op.produces))
              self.__header.update({'Accept': accept})
  
          return self