python3: urlib2 to requests

migrate from urllib2 to requests in the connect.py module. starting to
fix issue #13

partial: https://github.com/vmware/pyvmomi/issues/55

see also: https://github.com/vmware/pyvmomi/pull/66
This commit is contained in:
Michael Rice
2014-06-19 00:28:27 -05:00
committed by Shawn Hartsock
parent a526f4806e
commit 1fbab09276

View File

@@ -33,15 +33,18 @@ import socket
import time import time
import itertools import itertools
import re import re
try:
from xml.etree import ElementTree
except ImportError:
from elementtree import ElementTree
from xml.parsers.expat import ExpatError
import requests
from requests.auth import HTTPBasicAuth
from pyVmomi import vim, vmodl, SoapStubAdapter, SessionOrientedStub from pyVmomi import vim, vmodl, SoapStubAdapter, SessionOrientedStub
from pyVmomi.VmomiSupport import nsMap, versionIdMap, versionMap, IsChildVersion from pyVmomi.VmomiSupport import nsMap, versionIdMap, versionMap, IsChildVersion
from pyVmomi.VmomiSupport import GetServiceVersions from pyVmomi.VmomiSupport import GetServiceVersions
try:
from xml.etree.ElementTree import ElementTree
except ImportError:
from elementtree.ElementTree import ElementTree
from xml.parsers.expat import ExpatError
import urllib2
""" """
@@ -57,7 +60,6 @@ Global (thread-shared) ServiceInstance
@todo: Get rid of me? @todo: Get rid of me?
""" """
class closing(object): class closing(object):
""" """
Helper class for using closable objects in a 'with' statement, Helper class for using closable objects in a 'with' statement,
@@ -417,7 +419,7 @@ class SmartConnection(object):
def __GetServiceVersionDescription(protocol, server, port, path): def __GetServiceVersionDescription(protocol, server, port, path):
""" """
Private method that returns an ElementTree describing the API versions Private method that returns a root from an ElementTree describing the API versions
supported by the specified server. The result will be vimServiceVersions.xml supported by the specified server. The result will be vimServiceVersions.xml
if it exists, otherwise vimService.wsdl if it exists, otherwise None. if it exists, otherwise vimService.wsdl if it exists, otherwise None.
@@ -431,26 +433,23 @@ def __GetServiceVersionDescription(protocol, server, port, path):
@type path: string @type path: string
""" """
tree = ElementTree()
url = "%s://%s:%s/%s/vimServiceVersions.xml" % (protocol, server, port, path) url = "%s://%s:%s/%s/vimServiceVersions.xml" % (protocol, server, port, path)
try: try:
with closing(urllib2.urlopen(url)) as sock: sock = requests.get(url, verify=False)
if sock.getcode() == 200: if sock.status_code == 200:
tree.parse(sock) tree = ElementTree.fromstring(sock.content)
return tree return tree
except ExpatError: except ExpatError:
pass pass
url = "%s://%s:%s/%s/vimService.wsdl" % (protocol, server, port, path) url = "%s://%s:%s/%s/vimService.wsdl" % (protocol, server, port, path)
try: try:
with closing(urllib2.urlopen(url)) as sock: sock = requests.get(url, verify=False)
if sock.getcode() == 200: if sock.status_code == 200:
tree.parse(sock) tree = ElementTree.fromstring(sock.content)
return tree return tree
except ExpatError: except ExpatError:
pass pass
return None return None
@@ -465,12 +464,12 @@ def __VersionIsSupported(desiredVersion, serviceVersionDescription):
@param desiredVersion: The version we want to see if the server supports @param desiredVersion: The version we want to see if the server supports
(eg. vim.version.version2. (eg. vim.version.version2.
@type desiredVersion: string @type desiredVersion: string
@param serviceVersionDescription: An ElementTree for vimServiceVersions.xml @param serviceVersionDescription: A root ElementTree for vimServiceVersions.xml
or vimService.wsdl. or vimService.wsdl.
@type serviceVersionDescription: ElementTree @type serviceVersionDescription: root ElementTree
""" """
root = serviceVersionDescription.getroot() root = serviceVersionDescription
if root.tag == 'namespaces': if root.tag == 'namespaces':
# serviceVersionDescription appears to be a vimServiceVersions.xml document # serviceVersionDescription appears to be a vimServiceVersions.xml document
if root.get('version') <> '1.0': if root.get('version') <> '1.0':
@@ -599,11 +598,7 @@ def OpenUrlWithBasicAuth(url, user='root', pwd=''):
the specified credentials to the server as part of the request. the specified credentials to the server as part of the request.
Returns the response as a file-like object. Returns the response as a file-like object.
""" """
pwMgr = urllib2.HTTPPasswordMgrWithDefaultRealm() return requests.get(url, auth=HTTPBasicAuth(user, pwd), verify=False)
pwMgr.add_password(None, url, user, pwd)
handler = urllib2.HTTPBasicAuthHandler(pwMgr)
opener = urllib2.build_opener(handler)
return opener.open(url)
def OpenPathWithStub(path, stub): def OpenPathWithStub(path, stub):
""" """
@@ -623,8 +618,8 @@ def OpenPathWithStub(path, stub):
raise vmodl.fault.NotSupported() raise vmodl.fault.NotSupported()
hostPort = stub.host hostPort = stub.host
url = '%s://%s%s' % (protocol, hostPort, path) url = '%s://%s%s' % (protocol, hostPort, path)
request = urllib2.Request(url) headers = {}
if stub.cookie: if stub.cookie:
request.add_header('Cookie', stub.cookie) headers["Cookie"] = stub.cookie
return urllib2.urlopen(request) return requests.get(url, headers=headers, verify=False)