iAdd retry handling on error. - zs - Zeitungsschau rss to email converter Err gopher.r-36.net 70 i Err gopher.r-36.net 70 1Log /scm/zs//log.gph gopher.r-36.net 70 1Files /scm/zs//files.gph gopher.r-36.net 70 1Refs /scm/zs//refs.gph gopher.r-36.net 70 1LICENSE /scm/zs//file/LICENSE.gph gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1commit de38800ce7a8ad243771b74cf84e36a84aebc0d1 /scm/zs//commit/de38800ce7a8ad243771b74cf84e36a84aebc0d1.gph gopher.r-36.net 70 1parent 4d0d209d7b746599be83f63aad1c61682de36a1e /scm/zs//commit/4d0d209d7b746599be83f63aad1c61682de36a1e.gph gopher.r-36.net 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net gopher.r-36.net 70 iDate: Mon, 17 Mar 2014 18:08:20 +0100 Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iAdd retry handling on error. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iDiffstat: Err gopher.r-36.net 70 i feeddb.py | 23 +++++++++++++++++------ Err gopher.r-36.net 70 i zs.py | 26 +++++++++++++++++++++++--- Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i2 files changed, 40 insertions(+), 9 deletions(-) Err gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1diff --git a/feeddb.py b/feeddb.py /scm/zs//file/feeddb.py.gph gopher.r-36.net 70 i@@ -106,18 +106,29 @@ class feeddb(object): Err gopher.r-36.net 70 i feed[key] = value Err gopher.r-36.net 70 i self.writefeed(uri, feed) Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i- def pause(self, uri): Err gopher.r-36.net 70 i- self.setfeedval(uri, "pause", True) Err gopher.r-36.net 70 i- Err gopher.r-36.net 70 i- def unpause(self, uri): Err gopher.r-36.net 70 i- self.setfeedval(uri, "pause", False) Err gopher.r-36.net 70 i- Err gopher.r-36.net 70 i def getfeedval(self, uri, key): Err gopher.r-36.net 70 i feed = self.readfeed(uri) Err gopher.r-36.net 70 i if feed == None: Err gopher.r-36.net 70 i return None Err gopher.r-36.net 70 i return feed[key] Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+ def setretry(self, uri, retries): Err gopher.r-36.net 70 i+ self.setfeedval(uri, "retry", retries) Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ def incretry(self, uri): Err gopher.r-36.net 70 i+ retries = self.getfeedval(uri, "retry") Err gopher.r-36.net 70 i+ if retries == None: Err gopher.r-36.net 70 i+ self.setfeedval(uri, "retry", 1) Err gopher.r-36.net 70 i+ else: Err gopher.r-36.net 70 i+ self.setfeedval(uri, "retry", retries+1) Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ def pause(self, uri): Err gopher.r-36.net 70 i+ self.setfeedval(uri, "pause", True) Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ def unpause(self, uri): Err gopher.r-36.net 70 i+ self.setfeedval(uri, "pause", False) Err gopher.r-36.net 70 i+ self.setretry(uri, 0) Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i def ispaused(self, uri): Err gopher.r-36.net 70 i return self.getfeedval(uri, "pause") Err gopher.r-36.net 70 i Err gopher.r-36.net 70 1diff --git a/zs.py b/zs.py /scm/zs//file/zs.py.gph gopher.r-36.net 70 i@@ -25,18 +25,33 @@ def run(db, selfeed=None, dryrun=False): Err gopher.r-36.net 70 i print("pause %s" % (feeduri)) Err gopher.r-36.net 70 i continue Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+ retries = db.getretry(feeduri) Err gopher.r-36.net 70 i+ estr = None Err gopher.r-36.net 70 i print("fetch %s" % (feeduri)) Err gopher.r-36.net 70 i try: Err gopher.r-36.net 70 i curfeed = feed.fetch(feeduri) Err gopher.r-36.net 70 i except urllib.error.HTTPError as err: Err gopher.r-36.net 70 i if err.code == 404: Err gopher.r-36.net 70 i- print("404 -> pause %s" % (feeduri)) Err gopher.r-36.net 70 i- db.pause(feeduri) Err gopher.r-36.net 70 i- continue Err gopher.r-36.net 70 i+ estr = "404" Err gopher.r-36.net 70 i+ retries += 1 Err gopher.r-36.net 70 i except socket.gaierror: Err gopher.r-36.net 70 i continue Err gopher.r-36.net 70 i except TimeoutError: Err gopher.r-36.net 70 i continue Err gopher.r-36.net 70 i+ except ConnectionResetError: Err gopher.r-36.net 70 i+ estr = "connreset" Err gopher.r-36.net 70 i+ retries += 1 Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ # retry handling Err gopher.r-36.net 70 i+ if estr != None: Err gopher.r-36.net 70 i+ if retries > 2: Err gopher.r-36.net 70 i+ sys.stderr.write("pause %s %s\n" % \ Err gopher.r-36.net 70 i+ (estr, feeduri)) Err gopher.r-36.net 70 i+ db.pause(feeduri) Err gopher.r-36.net 70 i+ db.setretry(feeduri, retries) Err gopher.r-36.net 70 i+ continue Err gopher.r-36.net 70 i+ elif retries > 0: Err gopher.r-36.net 70 i+ db.setretry(feeduri, 0) Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i clen = len(curfeed["articles"]) Err gopher.r-36.net 70 i if clen == 0: Err gopher.r-36.net 70 i@@ -114,6 +129,11 @@ def main(args): Err gopher.r-36.net 70 i usage(args[0]) Err gopher.r-36.net 70 i db.resetarticles(args[1]) Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+ elif args[1] == "retry": Err gopher.r-36.net 70 i+ if len(args) < 4: Err gopher.r-36.net 70 i+ usage(args[0]) Err gopher.r-36.net 70 i+ db.setretry(args[1], int(args[2])) Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i elif args[1] == "pause": Err gopher.r-36.net 70 i if len(args) < 3: Err gopher.r-36.net 70 i usage(args[0]) Err gopher.r-36.net 70 .