Merged revisions 73436 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r73436 | tarek.ziade | 2009-06-16 01:30:13 +0200 (Tue, 16 Jun 2009) | 1 line

  Issue #6286: distutils upload command now uses urllib2
........
This commit is contained in:
Tarek Ziadé 2009-06-28 21:26:27 +00:00
parent 2c02bdc8a6
commit 25bd2062f1
3 changed files with 55 additions and 64 deletions

View file

@ -5,10 +5,9 @@ import sys
import os, io
import socket
import platform
import configparser
import http.client as httpclient
from urllib.request import urlopen, Request, HTTPError
import base64
import urllib.parse
from urllib.parse import urlparse
from hashlib import md5
from distutils.errors import *
@ -61,6 +60,15 @@ class upload(PyPIRCCommand):
self.upload_file(command, pyversion, filename)
def upload_file(self, command, pyversion, filename):
# Makes sure the repository URL is compliant
schema, netloc, url, params, query, fragments = \
urlparse(self.repository)
if params or query or fragments:
raise AssertionError("Incompatible url %s" % self.repository)
if schema not in ('http', 'https'):
raise AssertionError("unsupported schema " + schema)
# Sign if requested
if self.sign:
gpg_args = ["gpg", "--detach-sign", "-a", filename]
@ -153,40 +161,30 @@ class upload(PyPIRCCommand):
self.announce("Submitting %s to %s" % (filename, self.repository), log.INFO)
# build the Request
# We can't use urllib since we need to send the Basic
# auth right with the first request
# TODO(jhylton): Can we fix urllib?
schema, netloc, url, params, query, fragments = \
urllib.parse.urlparse(self.repository)
assert not params and not query and not fragments
if schema == 'http':
http = httpclient.HTTPConnection(netloc)
elif schema == 'https':
http = httpclient.HTTPSConnection(netloc)
else:
raise AssertionError("unsupported schema "+schema)
headers = {'Content-type':
'multipart/form-data; boundary=%s' % boundary,
'Content-length': str(len(body)),
'Authorization': auth}
data = ''
loglevel = log.INFO
request = Request(self.repository, data=body,
headers=headers)
# send the data
try:
http.connect()
http.putrequest("POST", url)
http.putheader('Content-type',
'multipart/form-data; boundary=%s'%boundary)
http.putheader('Content-length', str(len(body)))
http.putheader('Authorization', auth)
http.endheaders()
http.send(body)
result = urlopen(request)
status = result.getcode()
reason = result.msg
except socket.error as e:
self.announce(str(e), log.ERROR)
return
except HTTPError as e:
status = e.code
reason = e.msg
r = http.getresponse()
if r.status == 200:
self.announce('Server response (%s): %s' % (r.status, r.reason),
if status == 200:
self.announce('Server response (%s): %s' % (status, reason),
log.INFO)
else:
self.announce('Upload failed (%s): %s' % (r.status, r.reason),
self.announce('Upload failed (%s): %s' % (status, reason),
log.ERROR)
if self.show_response:
self.announce('-'*75, r.read(), '-'*75)
self.announce('-'*75, result.read(), '-'*75)