| Index: infra/scripts/legacy/scripts/common/url_helper.py
|
| diff --git a/infra/scripts/legacy/scripts/common/url_helper.py b/infra/scripts/legacy/scripts/common/url_helper.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..78adc8628ff2d9f2fbdf2034a98a90ec0cc9354a
|
| --- /dev/null
|
| +++ b/infra/scripts/legacy/scripts/common/url_helper.py
|
| @@ -0,0 +1,60 @@
|
| +# Copyright 2013 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import mimetypes
|
| +import urllib2
|
| +
|
| +
|
| +def GetMimeType(filename):
|
| + return mimetypes.guess_type(filename)[0] or 'application/octet-stream'
|
| +
|
| +
|
| +def EncodeMultipartFormData(fields, files):
|
| + """Encode form fields for multipart/form-data.
|
| +
|
| + Args:
|
| + fields: A sequence of (name, value) elements for regular form fields.
|
| + files: A sequence of (name, filename, value) elements for data to be
|
| + uploaded as files.
|
| + Returns:
|
| + (content_type, body) ready for httplib.HTTP instance.
|
| +
|
| + Source:
|
| + http://code.google.com/p/rietveld/source/browse/trunk/upload.py
|
| + """
|
| + BOUNDARY = '-M-A-G-I-C---B-O-U-N-D-A-R-Y-'
|
| + CRLF = '\r\n'
|
| + lines = []
|
| +
|
| + for key, value in fields:
|
| + lines.append('--' + BOUNDARY)
|
| + lines.append('Content-Disposition: form-data; name="%s"' % key)
|
| + lines.append('')
|
| + if isinstance(value, unicode):
|
| + value = value.encode('utf-8')
|
| + lines.append(value)
|
| +
|
| + for key, filename, value in files:
|
| + lines.append('--' + BOUNDARY)
|
| + lines.append('Content-Disposition: form-data; name="%s"; filename="%s"' %
|
| + (key, filename))
|
| + lines.append('Content-Type: %s' % GetMimeType(filename))
|
| + lines.append('')
|
| + if isinstance(value, unicode):
|
| + value = value.encode('utf-8')
|
| + lines.append(value)
|
| +
|
| + lines.append('--' + BOUNDARY + '--')
|
| + lines.append('')
|
| + body = CRLF.join(lines)
|
| + content_type = 'multipart/form-data; boundary=%s' % BOUNDARY
|
| + return content_type, body
|
| +
|
| +
|
| +def upload_files(url, attrs, file_objs):
|
| + content_type, data = EncodeMultipartFormData(attrs, file_objs)
|
| + headers = {"Content-Type": content_type}
|
| + request = urllib2.Request(url, data, headers)
|
| +
|
| + return urllib2.urlopen(request)
|
|
|