code: def signable(self, request, authheaders):
          
          method = request.method.upper()
          md5 = hashlib.md5()
          if request.body is not None:
              md5.update(request.body)
          bodyhash = md5.hexdigest()
          ctype = request.get_header("content-type")
          date = request.get_header("date")
          cheaders = []
          cheader_first = True
          cheaders_sign = ''
          if "headers" in authheaders:
              cheaders = authheaders["headers"].split(";")
          cheaders.sort()
          for cheader in cheaders:
              if cheader_first:
                  cheader_first = False
              else:
                  cheaders_sign += '\n'
              cheaders_sign += '{0}: {1}'.format(cheader.lower(), request.get_header(cheader))
          requri = request.url.request_uri()
  
          return '{0}\n{1}\n{2}\n{3}\n{4}\n{5}'.format(method, bodyhash, ctype, date, cheaders_sign, requri)
docs: Creates the signable string for a request and returns it.
  
          Keyword arguments:
          request -- A request object which can be consumed by this API.
          authheaders -- A string-indexable object which contains the headers appropriate for this signature version.