From c90d44ec2b3156c492dc1a94fae2919a8285cb89 Mon Sep 17 00:00:00 2001 From: Florian Schweikert Date: Wed, 19 Oct 2011 23:36:47 +0200 Subject: [PATCH] Fixing some errorhandling bugs Added automatic retry if incorrect site is received --- gotovienna-qml | 6 ++++++ gotovienna/realtime.py | 31 +++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/gotovienna-qml b/gotovienna-qml index 75e3803..cf551de 100755 --- a/gotovienna-qml +++ b/gotovienna-qml @@ -7,6 +7,10 @@ __version__ = '1.0' __website__ = 'https://github.com/kelvan/gotoVienna/' __license__ = 'GNU General Public License v3 or later' +from datetime import datetime + +t = datetime.now() + from PySide.QtCore import QAbstractListModel, QModelIndex, QObject, Slot, Signal from PySide.QtGui import QApplication from PySide.QtDeclarative import QDeclarativeView @@ -153,6 +157,8 @@ if __name__ == '__main__': # Assume test from source directory, use relative path view.setSource(os.path.join(os.path.dirname(__file__), 'qml/main.qml')) + print datetime.now() - t + view.showFullScreen() sys.exit(app.exec_()) diff --git a/gotovienna/realtime.py b/gotovienna/realtime.py index 0990fc1..6817b82 100644 --- a/gotovienna/realtime.py +++ b/gotovienna/realtime.py @@ -110,15 +110,30 @@ class ITipParser: return [] # open url for 90 min timeslot / get departure for next 90 min - bs = BeautifulSoup(urlopen(url + "&departureSizeTimeSlot=90")) - print url - lines = bs.findAll('table')[-2].findAll('tr') - if len(lines) == 1: - station = lines[0].span.text.replace(' ', '') - line = lines[0].findAll('span')[-1].text.replace(' ', '') + retry = 0 + tries = 2 + while retry < tries: + bs = BeautifulSoup(urlopen(url + "&departureSizeTimeSlot=90")) + try: + lines = bs.find('form', {'name': 'mainform'}).table.findAll('tr')[1] + except AttributeError: + print 'FetchError' + msg = bs.findAll('span', {'class': 'rot fett'}) + if len(msg) > 0 and str(msg[0].text).find(u'technischen St') > 0: + print 'Temporary problem' + print '\n'.join(map(lambda x: x.text.replace(' ', ''), msg)) + # FIXME Change to error message after fixing qml gui + return [] + # FIXME more testing + retry += 1 + if retry == tries: + return [] + if len(lines.findAll('td', {'class': 'info'})) > 0: + station = lines.span.text.replace(' ', '') + line = lines.findAll('span')[-1].text.replace(' ', '') else: - station = lines[1].td.span.text.replace(' ', '') - line = '??' + station = lines.td.span.text.replace(' ', '') + line = lines.find('td', {'align': 'right'}).span.text.replace(' ', '') result_lines = bs.findAll('table')[-1].findAll('tr') -- 1.7.9.5