diff Lib/packaging/command/upload_docs.py @ 71253:c2785ed52ed4

Factor out code used by packaging commands for HTTP requests (#12169). We now have one function to prepare multipart POST requests, and we use CRLF, as recommended by the HTTP spec (#10150). Initial patch by John Edmonds.
author Éric Araujo <merwok@netwok.org>
date Fri, 08 Jul 2011 16:27:12 +0200
parents 8dc80509f181
children a400c1c087dd
line wrap: on
line diff
--- a/Lib/packaging/command/upload_docs.py	Sat Jul 02 16:58:25 2011 +0200
+++ b/Lib/packaging/command/upload_docs.py	Fri Jul 08 16:27:12 2011 +0200
@@ -10,7 +10,8 @@
 from io import BytesIO
 
 from packaging import logger
-from packaging.util import read_pypirc, DEFAULT_REPOSITORY, DEFAULT_REALM
+from packaging.util import (read_pypirc, DEFAULT_REPOSITORY, DEFAULT_REALM,
+                            encode_multipart)
 from packaging.errors import PackagingFileError
 from packaging.command.cmd import Command
 
@@ -28,49 +29,6 @@
     return destination
 
 
-# grabbed from
-#    http://code.activestate.com/recipes/
-#    146306-http-client-to-post-using-multipartform-data/
-# TODO factor this out for use by install and command/upload
-
-def encode_multipart(fields, files, boundary=None):
-    """
-    *fields* is a sequence of (name: str, value: str) elements for regular
-    form fields, *files* is a sequence of (name: str, filename: str, value:
-    bytes) elements for data to be uploaded as files.
-
-    Returns (content_type: bytes, body: bytes) ready for http.client.HTTP.
-    """
-    if boundary is None:
-        boundary = b'--------------GHSKFJDLGDS7543FJKLFHRE75642756743254'
-    elif not isinstance(boundary, bytes):
-        raise TypeError('boundary is not bytes but %r' % type(boundary))
-
-    l = []
-    for key, value in fields:
-        l.extend((
-            b'--' + boundary,
-            ('Content-Disposition: form-data; name="%s"' %
-             key).encode('utf-8'),
-            b'',
-            value.encode('utf-8')))
-
-    for key, filename, value in files:
-        l.extend((
-            b'--' + boundary,
-            ('Content-Disposition: form-data; name="%s"; filename="%s"' %
-             (key, filename)).encode('utf-8'),
-            b'',
-            value))
-    l.append(b'--' + boundary + b'--')
-    l.append(b'')
-
-    body = b'\r\n'.join(l)
-
-    content_type = b'multipart/form-data; boundary=' + boundary
-    return content_type, body
-
-
 class upload_docs(Command):
 
     description = "upload HTML documentation to PyPI"