Update downloadUtils requests

Code reduction,  fix connections not being released.
This commit is contained in:
angelblue05 2016-07-15 18:01:59 -05:00
parent a6995c9b8f
commit 213f42f4a5
1 changed files with 43 additions and 74 deletions

View File

@ -193,8 +193,6 @@ class DownloadUtils():
'Accept-Charset': 'UTF-8,*', 'Accept-Charset': 'UTF-8,*',
'Authorization': auth 'Authorization': auth
} }
log("Header: %s" % header, 2)
else: else:
userId = self.userId userId = self.userId
token = self.token token = self.token
@ -210,44 +208,36 @@ class DownloadUtils():
'Authorization': auth, 'Authorization': auth,
'X-MediaBrowser-Token': token 'X-MediaBrowser-Token': token
} }
log("Header: %s" % header, 2)
return header return header
def downloadUrl(self, url, postBody=None, action_type="GET", parameters=None, def downloadUrl(self, url, postBody=None, action_type="GET", parameters=None,
authenticate=True): authenticate=True):
log("=== ENTER downloadUrl ===", 2) log("===== ENTER downloadUrl =====", 2)
session = requests
default_link = "" default_link = ""
try: try:
# If user is authenticated
kwargs = {
'timeout': self.timeout,
'json': postBody,
'params': parameters
}
if authenticate: if authenticate:
# Get requests session
try:
s = self.s
# Replace for the real values
url = url.replace("{server}", self.server)
url = url.replace("{UserId}", self.userId)
# Prepare request if self.s is not None:
if action_type == "GET": session = self.s
r = s.get(url, json=postBody, params=parameters, timeout=self.timeout) else:
elif action_type == "POST":
r = s.post(url, json=postBody, timeout=self.timeout)
elif action_type == "DELETE":
r = s.delete(url, json=postBody, timeout=self.timeout)
except AttributeError:
# request session does not exists # request session does not exists
# Get user information # Get user information
self.userId = window('emby_currUser') self.userId = window('emby_currUser')
self.server = window('emby_server%s' % self.userId) self.server = window('emby_server%s' % self.userId)
self.token = window('emby_accessToken%s' % self.userId) self.token = window('emby_accessToken%s' % self.userId)
header = self.getHeader()
verifyssl = False verifyssl = False
cert = None
# IF user enables ssl verification # IF user enables ssl verification
if settings('sslverify') == "true": if settings('sslverify') == "true":
@ -255,38 +245,16 @@ class DownloadUtils():
if settings('sslcert') != "None": if settings('sslcert') != "None":
verifyssl = settings('sslcert') verifyssl = settings('sslcert')
# Replace for the real values kwargs['headers'] = self.getHeader()
url = url.replace("{server}", self.server)
url = url.replace("{UserId}", self.userId)
# Prepare request # Replace for the real values
if action_type == "GET": url = url.replace("{server}", self.server)
r = requests.get(url, url = url.replace("{UserId}", self.userId)
json=postBody, kwargs['url'] = url
params=parameters,
headers=header,
timeout=self.timeout,
verify=verifyssl)
elif action_type == "POST": else: # User is not authenticated
r = requests.post(url, kwargs['url'] = url
json=postBody, kwargs['headers'] = self.getHeader(authenticate=False)
headers=header,
timeout=self.timeout,
verify=verifyssl)
elif action_type == "DELETE":
r = requests.delete(url,
json=postBody,
headers=header,
timeout=self.timeout,
verify=verifyssl)
# If user is not authenticated
elif not authenticate:
header = self.getHeader(authenticate=False)
verifyssl = False
# If user enables ssl verification # If user enables ssl verification
try: try:
@ -294,32 +262,21 @@ class DownloadUtils():
if self.sslclient is not None: if self.sslclient is not None:
verifyssl = self.sslclient verifyssl = self.sslclient
except AttributeError: except AttributeError:
pass verifyssl = False
finally:
# Prepare request kwargs['verify'] = verifyssl
if action_type == "GET":
r = requests.get(url,
json=postBody,
params=parameters,
headers=header,
timeout=self.timeout,
verify=verifyssl)
elif action_type == "POST":
r = requests.post(url,
json=postBody,
headers=header,
timeout=self.timeout,
verify=verifyssl)
##### THE RESPONSE ##### ##### THE RESPONSE #####
log(r.url, 2) log(kwargs, 2)
r = self.__requests(action_type, session, **kwargs)
if r.status_code == 204: if r.status_code == 204:
# No body in the response # No body in the response
log("====== 204 Success ======", 2) log("====== 204 Success ======", 2)
# Read response to release connection
r.content
elif r.status_code == requests.codes.ok: elif r.status_code == requests.codes.ok:
try: try:
# UNICODE - JSON object # UNICODE - JSON object
r = r.json() r = r.json()
@ -330,7 +287,8 @@ class DownloadUtils():
except: except:
if r.headers.get('content-type') != "text/html": if r.headers.get('content-type') != "text/html":
log("Unable to convert the response for: %s" % url, 1) log("Unable to convert the response for: %s" % url, 1)
else:
else: # Bad status code
r.raise_for_status() r.raise_for_status()
##### EXCEPTIONS ##### ##### EXCEPTIONS #####
@ -394,3 +352,14 @@ class DownloadUtils():
log(e, 1) log(e, 1)
return default_link return default_link
def __requests(self, action, session=requests, **kwargs):
if action == "GET":
r = session.get(**kwargs)
elif action == "POST":
r = session.post(**kwargs)
elif action == "DELETE":
r = session.delete(**kwargs)
return r