From f9526a70a07efb9fe8aa842383f3d9f329963aa1 Mon Sep 17 00:00:00 2001 From: Klaus-Uwe Mitterer Date: Mon, 25 Sep 2017 22:41:51 +0200 Subject: [PATCH] Split classes into three files --- classes/__init__.py | 327 +----------------------------------------- classes/connection.py | 156 ++++++++++++++++++++ classes/service.py | 110 ++++++++++++++ classes/station.py | 60 ++++++++ 4 files changed, 329 insertions(+), 324 deletions(-) create mode 100644 classes/connection.py create mode 100644 classes/service.py create mode 100644 classes/station.py diff --git a/classes/__init__.py b/classes/__init__.py index c77b3e6..b29c676 100644 --- a/classes/__init__.py +++ b/classes/__init__.py @@ -1,324 +1,3 @@ -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 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, stationkwargs = {}): - out = " " * indent + "\n" % ("" if iid is False else " id=\"%i\"" % iid) - - out += (" " * indent + " %s\n" % self.name) if name else "" - - if dest and self.dest: - out += " " * indent + " \n" - out += self.dest.xml(indent + 2, **stationkwargs) + "\n" - out += " " * indent + " \n" - - if depst or deptime or deppf or currdep: - out += " " * indent + " \n" - - out += (self.depst.xml(indent + 2, **stationkwargs) + "\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, **stationkwargs) + "\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 - - def json(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, stationkwargs = {}): - out = " " * indent + "{\n" - - out += (" " * indent + " \"@id\": %i,\n" % iid) if iid is not False else "" - out += (" " * indent + " \"name\": \"%s\",\n" % self.name) if name else "" - - if dest and self.dest: - out += " " * indent + " \"destination\":\n" - out += self.dest.json(indent + 2, **stationkwargs) + ",\n" - - if depst or deptime or deppf or currdep: - dep = " " * indent + " \"departure\": {\n" - - if depst: - dep += " " * indent + " \"station\":\n" - dep += self.depst.json(indent + 3, **stationkwargs) + ",\n" - - if deptime: - dep += " " * indent + " \"date\": \"%s\",\n" % datetime.datetime.strftime(self.deptime, "%d.%m.%Y") - dep += " " * indent + " \"time\": \"%s\",\n" % datetime.datetime.strftime(self.deptime, "%H:%M") - - dep += (" " * indent + " \"current\": \"%s\",\n" % self.currdep) if currdep and self.currdep else "" - dep += (" " * indent + " \"platform\": \"%s\",\n" % self.deppf) if deppf and self.deppf else "" - - dep = "".join(dep.rsplit(",", 1)) - out += dep + " " * indent + " },\n" - - if arrst or arrtime or arrpf or curarr: - arr = " " * indent + " \"arrival\": {\n" - - if arrst: - arr += " " * indent + " \"station\":\n" - arr += self.arrst.json(indent + 3, **stationkwargs) + ",\n" - - if arrtime: - arr += " " * indent + " \"date\": \"%s\",\n" % datetime.datetime.strftime(self.arrtime, "%d.%m.%Y") - arr += " " * indent + " \"time\": \"%s\",\n" % datetime.datetime.strftime(self.arrtime, "%H:%M") - - arr += (" " * indent + " \"current\": \"%s\",\n" % self.curarr) if curarr and self.curarr else "" - arr += (" " * indent + " \"platform\": \"%s\",\n" % self.arrpf) if arrpf and self.arrpf else "" - - arr = "".join(arr.rsplit(",", 1)) - out += arr + " " * indent + " },\n" - - out += " " * indent + "}" - - out = "".join(out.rsplit(",", 1)) - - 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 xml(self, indent = 0, cid = False, frm = True, to = True, deptime = True, arrtime = True, duration = True, changes = True, services = True, servicekwargs = {}, stationkwargs = {}): - out = " " * indent + "\n" % ("" if cid is False else " id=\"%i\"" % cid) - - if frm: - out += " " * indent + " \n" - out += self.depst().xml(indent + 2, **stationkwargs) + "\n" - out += " " * indent + " \n" - - if to: - out += " " * indent + " \n" - out += self.arrst().xml(indent + 2, **stationkwargs) + "\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, **servicekwargs) + "\n" - - out += " " * indent + " \n" - - out += " " * indent + "" - - return out - - def json(self, indent = 0, cid = False, frm = True, to = True, deptime = True, arrtime = True, duration = True, changes = True, services = True, servicekwargs = {}, stationkwargs = {}): - out = " " * indent + "{\n" - - out += (" " * indent + " \"@id\": %i,\n" % cid) if cid is not False else "" - - if frm: - out += " " * indent + " \"from\":\n" - out += self.depst().json(indent + 2, **stationkwargs) + ",\n" - - if to: - out += " " * indent + " \"to\":\n" - out += self.arrst().json(indent + 2, **stationkwargs) + ",\n" - - if deptime or arrtime or duration or changes: - det = "" - det += " " * indent + " \"details\": {\n" - - if deptime: - det += " " * indent + " \"departure\": {\n" - det += " " * indent + " \"date\": \"%s\",\n" % datetime.datetime.strftime(self.deptime(), "%d.%m.%Y") - det += " " * indent + " \"time\": \"%s\"\n" % datetime.datetime.strftime(self.deptime(), "%H:%M") - det += " " * indent + " },\n" - - if arrtime: - det += " " * indent + " \"arrival\": {\n" - det += " " * indent + " \"date\": \"%s\",\n" % datetime.datetime.strftime(self.arrtime(), "%d.%m.%Y") - det += " " * indent + " \"time\": \"%s\"\n"% datetime.datetime.strftime(self.arrtime(), "%H:%M") - det += " " * indent + " },\n" - - det += (" " * indent + " \"duration\": \"%s\",\n" % self.durationString()) if duration else "" - det += (" " * indent + " \"changes\": %i,\n" % self.changes()) if changes else "" - - det = "".join(det.rsplit(",", 1)) - out += det - - out += " " * indent + " },\n" - - if services: - out += " " * indent + " \"services\": [\n" - - for i in range(len(self.services)): - out += self.services[i].json(indent + 2, i, **servicekwargs) + (",\n" if not i == len(self.services) - 1 else "\n") - - out += " " * indent + " ],\n" - - out += " " * indent + "}" - - out = "".join(out.rsplit(",", 1)) - - return out +from classes.connection import Connection +from classes.station import Station +from classes.service import Service diff --git a/classes/connection.py b/classes/connection.py new file mode 100644 index 0000000..e0986d6 --- /dev/null +++ b/classes/connection.py @@ -0,0 +1,156 @@ +import datetime + +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 xml(self, indent = 0, cid = False, frm = True, to = True, deptime = True, arrtime = True, duration = True, changes = True, services = True, servicekwargs = {}, stationkwargs = {}): + out = " " * indent + "\n" % ("" if cid is False else " id=\"%i\"" % cid) + + if frm: + out += " " * indent + " \n" + out += self.depst().xml(indent + 2, **stationkwargs) + "\n" + out += " " * indent + " \n" + + if to: + out += " " * indent + " \n" + out += self.arrst().xml(indent + 2, **stationkwargs) + "\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, **servicekwargs) + "\n" + + out += " " * indent + " \n" + + out += " " * indent + "" + + return out + + def json(self, indent = 0, cid = False, frm = True, to = True, deptime = True, arrtime = True, duration = True, changes = True, services = True, servicekwargs = {}, stationkwargs = {}): + out = " " * indent + "{\n" + + out += (" " * indent + " \"@id\": %i,\n" % cid) if cid is not False else "" + + if frm: + out += " " * indent + " \"from\":\n" + out += self.depst().json(indent + 2, **stationkwargs) + ",\n" + + if to: + out += " " * indent + " \"to\":\n" + out += self.arrst().json(indent + 2, **stationkwargs) + ",\n" + + if deptime or arrtime or duration or changes: + det = "" + det += " " * indent + " \"details\": {\n" + + if deptime: + det += " " * indent + " \"departure\": {\n" + det += " " * indent + " \"date\": \"%s\",\n" % datetime.datetime.strftime(self.deptime(), "%d.%m.%Y") + det += " " * indent + " \"time\": \"%s\"\n" % datetime.datetime.strftime(self.deptime(), "%H:%M") + det += " " * indent + " },\n" + + if arrtime: + det += " " * indent + " \"arrival\": {\n" + det += " " * indent + " \"date\": \"%s\",\n" % datetime.datetime.strftime(self.arrtime(), "%d.%m.%Y") + det += " " * indent + " \"time\": \"%s\"\n"% datetime.datetime.strftime(self.arrtime(), "%H:%M") + det += " " * indent + " },\n" + + det += (" " * indent + " \"duration\": \"%s\",\n" % self.durationString()) if duration else "" + det += (" " * indent + " \"changes\": %i,\n" % self.changes()) if changes else "" + + det = "".join(det.rsplit(",", 1)) + out += det + + out += " " * indent + " },\n" + + if services: + out += " " * indent + " \"services\": [\n" + + for i in range(len(self.services)): + out += self.services[i].json(indent + 2, i, **servicekwargs) + (",\n" if not i == len(self.services) - 1 else "\n") + + out += " " * indent + " ],\n" + + out += " " * indent + "}" + + out = "".join(out.rsplit(",", 1)) + + return out diff --git a/classes/service.py b/classes/service.py new file mode 100644 index 0000000..4523e43 --- /dev/null +++ b/classes/service.py @@ -0,0 +1,110 @@ +import datetime + +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 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, stationkwargs = {}): + out = " " * indent + "\n" % ("" if iid is False else " id=\"%i\"" % iid) + + out += (" " * indent + " %s\n" % self.name) if name else "" + + if dest and self.dest: + out += " " * indent + " \n" + out += self.dest.xml(indent + 2, **stationkwargs) + "\n" + out += " " * indent + " \n" + + if depst or deptime or deppf or currdep: + out += " " * indent + " \n" + + out += (self.depst.xml(indent + 2, **stationkwargs) + "\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, **stationkwargs) + "\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 + + def json(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, stationkwargs = {}): + out = " " * indent + "{\n" + + out += (" " * indent + " \"@id\": %i,\n" % iid) if iid is not False else "" + out += (" " * indent + " \"name\": \"%s\",\n" % self.name) if name else "" + + if dest and self.dest: + out += " " * indent + " \"destination\":\n" + out += self.dest.json(indent + 2, **stationkwargs) + ",\n" + + if depst or deptime or deppf or currdep: + dep = " " * indent + " \"departure\": {\n" + + if depst: + dep += " " * indent + " \"station\":\n" + dep += self.depst.json(indent + 3, **stationkwargs) + ",\n" + + if deptime: + dep += " " * indent + " \"date\": \"%s\",\n" % datetime.datetime.strftime(self.deptime, "%d.%m.%Y") + dep += " " * indent + " \"time\": \"%s\",\n" % datetime.datetime.strftime(self.deptime, "%H:%M") + + dep += (" " * indent + " \"current\": \"%s\",\n" % self.currdep) if currdep and self.currdep else "" + dep += (" " * indent + " \"platform\": \"%s\",\n" % self.deppf) if deppf and self.deppf else "" + + dep = "".join(dep.rsplit(",", 1)) + out += dep + " " * indent + " },\n" + + if arrst or arrtime or arrpf or curarr: + arr = " " * indent + " \"arrival\": {\n" + + if arrst: + arr += " " * indent + " \"station\":\n" + arr += self.arrst.json(indent + 3, **stationkwargs) + ",\n" + + if arrtime: + arr += " " * indent + " \"date\": \"%s\",\n" % datetime.datetime.strftime(self.arrtime, "%d.%m.%Y") + arr += " " * indent + " \"time\": \"%s\",\n" % datetime.datetime.strftime(self.arrtime, "%H:%M") + + arr += (" " * indent + " \"current\": \"%s\",\n" % self.curarr) if curarr and self.curarr else "" + arr += (" " * indent + " \"platform\": \"%s\",\n" % self.arrpf) if arrpf and self.arrpf else "" + + arr = "".join(arr.rsplit(",", 1)) + out += arr + " " * indent + " },\n" + + out += " " * indent + "}" + + out = "".join(out.rsplit(",", 1)) + + return out + diff --git a/classes/station.py b/classes/station.py new file mode 100644 index 0000000..ec8a33a --- /dev/null +++ b/classes/station.py @@ -0,0 +1,60 @@ +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 +