class LocationDataReader(object): def __init__(self, uri, parent): self.uri = uri self.parent = parent self.title = None self.uripattern = None self.tabnames = {} self.places = {} self.parse() def openuri(self, uri=None): if uri is None: uri = self.uri try: self.u = urllib.urlopen(uri) except Exception, e: msg = 'That URI produced an error: %r. Restarting.' appuifw.note(msg % e, 'error') return def getline(self): while 1: try: rawline = self.u.next() except StopIteration: return None # thanks deltab if not rawline.startswith('#'): break return rawline.rstrip() def head(self): self.title = unicode(self.getline()) self.urlpattern = self.getline() for item in self.getline().split('\t'): longname, area = item.split('::', 1) self.places[area] = {} self.tab[area] = unicode(longname) def safehead(self): try: self.head() except Exception, e: msg = 'This file is invalid and raised the error: %r' appuifw.note(msg % e, 'error') self.parent.restart() def body(self): while 1: line = self.getline() if line is None: break try: area, camera, name = line.split('\t', 2) self.places[area][camera] = unicode(name) appuifw.app.body.add(u'.') except: msg = u'\nThe following line is ill formed: %s' % line appuifw.app.body.add(msg) def parse(self): self.openuri() self.safehead() self.body()