import mimetypes
import mimetools

def encode_multipart_formdata(params, files):
    boundary = mimetools.choose_boundary()

    lines = []
    for name in params:
        lines.append("--" + boundary)
        lines.append("Content-Disposition: form-data; name=\"%s\"" % name)
        lines.append("")
        lines.append(str(params[name]))
    for name in files:
        filename = files[name]
        content_type, _ = mimetypes.guess_type(filename)
        if content_type is None:
            content_type = "application/octet-stream"

        lines.append("--" + boundary)
        lines.append("Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"" % (name, filename))
        lines.append("Content-Type: %s" % content_type)
        lines.append("")
        lines.append(open(filename, "rb").read())
    lines.append("--" + boundary + "--")
    lines.append("")

    body = "\r\n".join(lines)
    headers = {'Content-Type': "multipart/form-data; boundary=%s" % boundary,
               'Content-Length': str(len(body))}
    return headers, body

import os
import mimetypes
import mimetools

def encode_multipart_formdata(params, files):
    boundary = mimetools.choose_boundary()

    lines = []
    for name in params:
        lines.append("--" + boundary)
        lines.append("Content-Disposition: form-data; name=\"%s\"" % name)
        lines.append("")
        lines.append(str(params[name]))
    for name in files:
        filename = files[name]
        content_type, _ = mimetypes.guess_type(filename)
        if content_type is None:
            content_type = "application/octet-stream"

        lines.append("--" + boundary)
        lines.append("Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"" % (name, filename))
        lines.append("Content-Type: %s" % content_type)
        lines.append("")
        lines.append(open(os.path.expanduser(filename), "rb").read())
    lines.append("--" + boundary + "--")
    lines.append("")

    body = "\r\n".join(lines)
    headers = {'Content-Type': "multipart/form-data; boundary=%s" % boundary,
               'Content-Length': str(len(body))}
    return headers, body

Expand "~" to home path
Expand "~" to home path

+ import os
  import mimetypes
  import mimetools
  
  def encode_multipart_formdata(params, files):
      boundary = mimetools.choose_boundary()
  
      lines = []
      for name in params:
          lines.append("--" + boundary)
          lines.append("Content-Disposition: form-data; name=\"%s\"" % name)
          lines.append("")
          lines.append(str(params[name]))
      for name in files:
          filename = files[name]
          content_type, _ = mimetypes.guess_type(filename)
          if content_type is None:
              content_type = "application/octet-stream"
  
          lines.append("--" + boundary)
          lines.append("Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"" % (name, filename))
          lines.append("Content-Type: %s" % content_type)
          lines.append("")
-         lines.append(open(filename, "rb").read())
+         lines.append(open(os.path.expanduser(filename), "rb").read())
      lines.append("--" + boundary + "--")
      lines.append("")
  
      body = "\r\n".join(lines)
      headers = {'Content-Type': "multipart/form-data; boundary=%s" % boundary,
                 'Content-Length': str(len(body))}
      return headers, body
  
Expand "~" to home path
## Code Before:
import mimetypes
import mimetools

def encode_multipart_formdata(params, files):
    boundary = mimetools.choose_boundary()

    lines = []
    for name in params:
        lines.append("--" + boundary)
        lines.append("Content-Disposition: form-data; name=\"%s\"" % name)
        lines.append("")
        lines.append(str(params[name]))
    for name in files:
        filename = files[name]
        content_type, _ = mimetypes.guess_type(filename)
        if content_type is None:
            content_type = "application/octet-stream"

        lines.append("--" + boundary)
        lines.append("Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"" % (name, filename))
        lines.append("Content-Type: %s" % content_type)
        lines.append("")
        lines.append(open(filename, "rb").read())
    lines.append("--" + boundary + "--")
    lines.append("")

    body = "\r\n".join(lines)
    headers = {'Content-Type': "multipart/form-data; boundary=%s" % boundary,
               'Content-Length': str(len(body))}
    return headers, body

## Instruction:
Expand "~" to home path
## Code After:
import os
import mimetypes
import mimetools

def encode_multipart_formdata(params, files):
    boundary = mimetools.choose_boundary()

    lines = []
    for name in params:
        lines.append("--" + boundary)
        lines.append("Content-Disposition: form-data; name=\"%s\"" % name)
        lines.append("")
        lines.append(str(params[name]))
    for name in files:
        filename = files[name]
        content_type, _ = mimetypes.guess_type(filename)
        if content_type is None:
            content_type = "application/octet-stream"

        lines.append("--" + boundary)
        lines.append("Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"" % (name, filename))
        lines.append("Content-Type: %s" % content_type)
        lines.append("")
        lines.append(open(os.path.expanduser(filename), "rb").read())
    lines.append("--" + boundary + "--")
    lines.append("")

    body = "\r\n".join(lines)
    headers = {'Content-Type': "multipart/form-data; boundary=%s" % boundary,
               'Content-Length': str(len(body))}
    return headers, body
