do_check error handler refactor + pylint stuff
This commit is contained in:
+24
-15
@@ -6,7 +6,7 @@
|
||||
"""Tools to interface with TCL's update request API."""
|
||||
|
||||
import time
|
||||
from collections import OrderedDict
|
||||
from collections import OrderedDict, defaultdict
|
||||
|
||||
import requests
|
||||
from defusedxml import ElementTree
|
||||
@@ -14,10 +14,16 @@ from defusedxml import ElementTree
|
||||
|
||||
class TclCheckMixin:
|
||||
"""A mixin component for TCL's update request API."""
|
||||
def prep_check(self, device=None, https=True):
|
||||
"""Prepare URL and parameters for update request."""
|
||||
|
||||
def prep_check_url(self, https=True):
|
||||
"""Prepare URL for update request."""
|
||||
protocol = "https://" if https else "http://"
|
||||
url = protocol + self.g2master + "/check.php"
|
||||
return url
|
||||
|
||||
def prep_check(self, device=None, https=True):
|
||||
"""Prepare URL and parameters for update request."""
|
||||
url = self.prep_check_url(https)
|
||||
params = OrderedDict()
|
||||
if device:
|
||||
# Need to support both ways for now
|
||||
@@ -60,28 +66,31 @@ class TclCheckMixin:
|
||||
last_response = req
|
||||
if req.status_code == 200:
|
||||
self.master_server_vote_on_time(reqtime, reqtime_avg)
|
||||
req.encoding = "utf-8" # Force encoding as server doesn't give one
|
||||
req.encoding = "utf-8" # Force encoding as server doesn't give one
|
||||
self.write_dump(req.text)
|
||||
return req.text
|
||||
elif req.status_code == 204:
|
||||
self.master_server_vote_on_time(reqtime, reqtime_avg)
|
||||
raise requests.exceptions.HTTPError("No update available.", response=req)
|
||||
elif req.status_code == 404:
|
||||
self.master_server_vote_on_time(reqtime, reqtime_avg)
|
||||
raise requests.exceptions.HTTPError("No data for requested CUREF/FV combination.", response=req)
|
||||
elif req.status_code not in [500, 502, 503]:
|
||||
self.master_server_downvote()
|
||||
req.raise_for_status()
|
||||
raise requests.exceptions.HTTPError("HTTP {}.".format(req.status_code), response=req)
|
||||
self.do_check_errorhandle(req, reqtime, reqtime_avg)
|
||||
except requests.exceptions.Timeout:
|
||||
pass
|
||||
# Something went wrong, try a different server
|
||||
self.master_server_downvote()
|
||||
self.g2master = self.get_master_server()
|
||||
protocol = "https://" if https else "http://"
|
||||
url = protocol + self.g2master + "/check.php"
|
||||
url = self.prep_check_url(https)
|
||||
raise requests.exceptions.RetryError("Max tries ({}) reached.".format(max_tries), response=last_response)
|
||||
|
||||
def do_check_errorhandle(self, req, reqtime, reqtime_avg):
|
||||
"""Handle non-HTTP 200 results for ``do_check``."""
|
||||
errcodes = defaultdict(lambda: "HTTP {}.".format(req.status_code))
|
||||
errcodes[204] = "No update available."
|
||||
errcodes[404] = "No data for requested CUREF/FV combination."
|
||||
if req.status_code in [204, 404]:
|
||||
self.master_server_vote_on_time(reqtime, reqtime_avg)
|
||||
elif req.status_code not in [500, 502, 503]:
|
||||
self.master_server_downvote()
|
||||
req.raise_for_status()
|
||||
raise requests.exceptions.HTTPError(errcodes[req.status_code], response=req)
|
||||
|
||||
@staticmethod
|
||||
def parse_check(xmlstr):
|
||||
"""Parse output of ``do_check``."""
|
||||
|
||||
Reference in New Issue
Block a user