import datetime class Station: def __init__(self, name, sttype, extid = None, xcoord = None, ycoord = None, prodclass = None): self.name = name self.sttype = sttype self.extid = extid self.xcoord = float(xcoord)/1000000 self.ycoord = float(ycoord)/1000000 self.prodclass = prodclass def useId(self): return self.extid or self.name def lat(self): return self.ycoord def lon(self): return self.xcoord def json(self, indent = 0, name = True, extid = True, sttype = False, coords = False, prodclass = False, distance = False): out = " " * indent + "{\n" out += (" " * indent + " \"name\": \"%s\",\n" % self.name) if name else "" out += (" " * indent + " \"id\": \"%s\",\n" % self.useId()) if extid else "" out += (" " * indent + " \"distance\": %i,\n" % int(self.distance)) if distance else "" out += (" " * indent + " \"type\": \"%s\",\n" % self.sttype) if sttype else "" if coords: out += " " * indent + " \"coords\": {\n" out += " " * indent + " \"lon\": %f,\n" % self.xcoord out += " " * indent + " \"lat\": %f\n" % self.ycoord out += " " * indent + " },\n" out += (" " * indent + " \"prodclass\": \"%s\",\n" % self.prodclass) if prodclass else "" out = "".join(out.rsplit(",", 1)) out += " " * indent + "}" return out def xml(self, indent = 0, name = True, extid = True, sttype = False, coords = False, prodclass = False, distance = False): out = " " * indent + "\n" out += (" " * indent + " %s\n" % self.name) if name else "" out += (" " * indent + " %s\n" % self.useId()) if extid else "" out += (" " * indent + " %i\n" % int(self.distance)) if distance else "" out += (" " * indent + " %s\n" % self.sttype) if sttype else "" if coords: out += " " * indent + " \n" out += " " * indent + " %f\n" % self.xcoord out += " " * indent + " %f\n" % self.ycoord out += " " * indent + " \n" out += (" " * indent + " %s\n" % self.prodclass) if prodclass else "" out += " " * indent + "" return out class Service: def __init__(self, name, depst, deptime, arrst, arrtime, dest = None, deppf = None, currdep = None, arrpf = None, curarr = None): self.name = name self.dest = dest self.depst = depst self.deptime = deptime self.arrst = arrst self.arrtime = arrtime self.deppf = deppf self.currdep = currdep self.arrpf = arrpf self.curarr = curarr def duration(self): return self.arrtime - self.deptime def json(self): return def xml(self, indent = 0, iid = False, name = True, depst = True, deptime = True, arrst = True, arrtime = True, deppf = True, currdep = True, arrpf = True, curarr = True, duration = True, dest = True): out = " " * indent + "\n" % ("" if iid is False else " id=\"%i\"" % iid) out += (" " * indent + " %s\n" % self.name) if name else "" out += (" " * indent + " %s\n" % self.dest) if dest and self.dest else "" if depst or deptime or deppf or currdep: out += " " * indent + " \n" out += (self.depst.xml(indent + 2) + "\n") if depst else "" if deptime: out += " " * indent + " %s\n" % datetime.datetime.strftime(self.deptime, "%d.%m.%Y") out += " " * indent + " \n" % datetime.datetime.strftime(self.deptime, "%H:%M") out += (" " * indent + " %s\n" % self.currdep) if currdep and self.currdep else "" out += (" " * indent + " %s\n" % self.deppf) if deppf and self.deppf else "" out += " " * indent + " \n" if arrst or arrtime or arrpf or curarr: out += " " * indent + " \n" out += (self.arrst.xml(indent + 2) + "\n") if arrst else "" if arrtime: out += " " * indent + " %s\n" % datetime.datetime.strftime(self.arrtime, "%d.%m.%Y") out += " " * indent + " \n" % datetime.datetime.strftime(self.arrtime, "%H:%M") out += (" " * indent + " %s\n" % self.curarr) if curarr and self.curarr else "" out += (" " * indent + " %s\n" % self.arrpf) if arrpf and self.arrpf else "" out += " " * indent + " \n" out += " " * indent + "" return out class Connection: def __init__(self, details = False): self.services = [] self.details = details def addService(self, service): self.services.append(service) def depst(self): try: return self.services[0].depst except: return None def arrst(self): try: return self.services[-1].arrst except: return None def deptime(self): try: return self.services[0].deptime except: return None def arrtime(self): try: return self.services[-1].arrtime except: return None def currdep(self): try: return self.services[0].currdep except: return None def currarr(self): try: return self.services[-1].currarr except: return None def duration(self): try: return self.services[-1].arrtime - self.services[0].deptime except: return None def durationString(self): hrs, scs = divmod(self.duration().total_seconds(), 3600) mns, rmd = divmod(scs, 60) return "%i:%s" % (hrs, str(int(mns)).zfill(2)) def changes(self): return max(len([service for service in self.services if service.name != "Walk"]) - 1, 0) if self.details else max(len([service for service in self.services[0].name.split("/") if service != "Walk"]) - 1, 0) def json(self): return def xml(self, indent = 0, cid = False, frm = True, to = True, deptime = True, arrtime = True, duration = True, changes = True, services = True): out = " " * indent + "\n" % ("" if cid is False else " id=\"%i\"" % cid) if frm: out += " " * indent + " \n" out += self.depst().xml(indent + 2) + "\n" out += " " * indent + " \n" if to: out += " " * indent + " \n" out += self.arrst().xml(indent + 2) + "\n" out += " " * indent + " \n" if deptime or arrtime or duration or changes: out += " " * indent + "
\n" if deptime: out += " " * indent + " \n" out += " " * indent + " %s\n" % datetime.datetime.strftime(self.deptime(), "%d.%m.%Y") out += " " * indent + " \n" % datetime.datetime.strftime(self.deptime(), "%H:%M") out += " " * indent + " \n" if arrtime: out += " " * indent + " \n" out += " " * indent + " %s\n" % datetime.datetime.strftime(self.arrtime(), "%d.%m.%Y") out += " " * indent + " \n" % datetime.datetime.strftime(self.arrtime(), "%H:%M") out += " " * indent + " \n" out += (" " * indent + " %s\n" % self.durationString()) if duration else "" out += (" " * indent + " %i\n" % self.changes()) if changes else "" out += " " * indent + "
\n" if services: out += " " * indent + " \n" for i in range(len(self.services)): out += self.services[i].xml(indent + 2, i) + "\n" out += " " * indent + " \n" out += " " * indent + "" return out