diff --git a/classes/connection.py b/classes/connection.py
index c7254d5..a2e64f1 100644
--- a/classes/connection.py
+++ b/classes/connection.py
@@ -1,177 +1,202 @@
import datetime
+
class Connection:
- def __init__(self, details = False):
- self.services = []
- self.details = details
- self.via = []
+ def __init__(self, details=False):
+ self.services = []
+ self.details = details
+ self.via = []
- def addService(self, service):
- self.services.append(service)
+ def addService(self, service):
+ self.services.append(service)
- def addVia(self, station):
- self.via.append(station)
+ def addVia(self, station):
+ self.via.append(station)
- def depst(self):
- try:
- return self.services[0].depst
- except:
- return None
+ 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 arrst(self):
+ try:
+ return self.services[-1].arrst
+ except:
+ return None
- def deptime(self):
- try:
- return self.services[0].deptime
- 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 arrtime(self):
+ try:
+ return self.services[-1].arrtime
+ except:
+ return None
- def currdep(self):
- try:
- return self.services[0].currdep
- 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 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 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)
+ 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))
+ 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 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, via = True, servicekwargs = {}, stationkwargs = {}):
- out = " " * indent + "\n" % ("" if cid is False else " id=\"%i\"" % cid)
+ def xml(self, indent=0, cid=False, frm=True, to=True, deptime=True, arrtime=True, duration=True, changes=True, services=True, via=True, servicekwargs={}, stationkwargs={}):
+ out = " " * indent + \
+ "\n" % ("" if cid is False else " id=\"%i\"" % cid)
- if frm and self.depst():
- out += " " * indent + " \n"
- out += self.depst().xml(indent + 2, **stationkwargs) + "\n"
- out += " " * indent + " \n"
+ if frm and self.depst():
+ out += " " * indent + " \n"
+ out += self.depst().xml(indent + 2, **stationkwargs) + "\n"
+ out += " " * indent + " \n"
- if via and self.via:
- out += " " * indent + " \n"
-
- for vst in self.via:
- out += vst.xml(indent + 2, **stationkwargs) + "\n"
+ if via and self.via:
+ out += " " * indent + " \n"
- out += " " * indent + " \n"
+ for vst in self.via:
+ out += vst.xml(indent + 2, **stationkwargs) + "\n"
- if to and self.arrst():
- out += " " * indent + " \n"
- out += self.arrst().xml(indent + 2, **stationkwargs) + "\n"
- out += " " * indent + " \n"
+ out += " " * indent + " \n"
- if (deptime and self.deptime()) or (arrtime and self.arrtime()) or (duration and self.duration()) or (changes and self.changes()):
- out += " " * indent + " \n"
+ if to and self.arrst():
+ out += " " * indent + " \n"
+ out += self.arrst().xml(indent + 2, **stationkwargs) + "\n"
+ out += " " * indent + " \n"
- if deptime and self.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 (deptime and self.deptime()) or (arrtime and self.arrtime()) or (duration and self.duration()) or (changes and self.changes()):
+ out += " " * indent + " \n"
- if arrtime and self.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"
+ if deptime and self.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"
- out += (" " * indent + " %s\n" % self.durationString()) if duration and self.duration() else ""
- out += (" " * indent + " %i\n" % self.changes()) if changes and self.changes() else ""
+ if arrtime and self.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 + " \n"
+ out += (" " * indent + " %s\n" %
+ self.durationString()) if duration and self.duration() else ""
+ out += (" " * indent + " %i\n" %
+ self.changes()) if changes and self.changes() else ""
- if services and self.services:
- out += " " * indent + " \n"
+ out += " " * indent + " \n"
- for i in range(len(self.services)):
- out += self.services[i].xml(indent + 2, i, **servicekwargs) + "\n"
+ if services and self.services:
+ out += " " * indent + " \n"
- out += " " * indent + " \n"
-
- out += " " * indent + ""
+ for i in range(len(self.services)):
+ out += self.services[i].xml(indent + 2,
+ i, **servicekwargs) + "\n"
- return out
+ out += " " * indent + " \n"
- def json(self, indent = 0, cid = False, frm = True, to = True, deptime = True, arrtime = True, duration = True, changes = True, services = True, via = True, servicekwargs = {}, stationkwargs = {}):
- out = " " * indent + "{\n"
+ out += " " * indent + ""
- out += (" " * indent + " \"@id\": %i,\n" % cid) if cid is not False else ""
+ return out
- if frm and self.depst():
- out += " " * indent + " \"from\":\n"
- out += self.depst().json(indent + 2, **stationkwargs) + ",\n"
+ def json(self, indent=0, cid=False, frm=True, to=True, deptime=True, arrtime=True, duration=True, changes=True, services=True, via=True, servicekwargs={}, stationkwargs={}):
+ out = " " * indent + "{\n"
- if via and self.via:
- out += " " * indent + " \"via\": [\n"
+ out += (" " * indent + " \"@id\": %i,\n" %
+ cid) if cid is not False else ""
- for vst in self.via:
- out += vst.json(indent + 3, **stationkwargs) + ",\n"
+ if frm and self.depst():
+ out += " " * indent + " \"from\":\n"
+ out += self.depst().json(indent + 2, **stationkwargs) + ",\n"
- out = "".join(out.rsplit(",", 1))
- out += " " * indent + " ],\n"
+ if via and self.via:
+ out += " " * indent + " \"via\": [\n"
- if to and self.arrst():
- out += " " * indent + " \"to\":\n"
- out += self.arrst().json(indent + 2, **stationkwargs) + ",\n"
+ for vst in self.via:
+ out += vst.json(indent + 3, **stationkwargs) + ",\n"
- if (deptime and self.deptime()) or (arrtime and self.arrtime()) or (duration and self.duration()) or (changes and self.changes()):
- det = ""
- det += " " * indent + " \"details\": {\n"
+ out = "".join(out.rsplit(",", 1))
+ out += " " * indent + " ],\n"
- if deptime and self.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 to and self.arrst():
+ out += " " * indent + " \"to\":\n"
+ out += self.arrst().json(indent + 2, **stationkwargs) + ",\n"
- if arrtime and self.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"
+ if (deptime and self.deptime()) or (arrtime and self.arrtime()) or (duration and self.duration()) or (changes and self.changes()):
+ det = ""
+ det += " " * indent + " \"details\": {\n"
- det += (" " * indent + " \"duration\": \"%s\",\n" % self.durationString()) if duration and self.duration() else ""
- det += (" " * indent + " \"changes\": %i,\n" % self.changes()) if changes and self.changes() else ""
+ if deptime and self.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"
- det = "".join(det.rsplit(",", 1))
- out += det
+ if arrtime and self.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"
- out += " " * indent + " },\n"
+ det += (" " * indent + " \"duration\": \"%s\",\n" %
+ self.durationString()) if duration and self.duration() else ""
+ det += (" " * indent + " \"changes\": %i,\n" %
+ self.changes()) if changes and self.changes() else ""
- if services and self.services:
- out += " " * indent + " \"services\": [\n"
+ det = "".join(det.rsplit(",", 1))
+ out += det
- 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 + " ],\n"
+ if services and self.services:
+ out += " " * indent + " \"services\": [\n"
- out += " " * indent + "}"
+ 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 = "".join(out.rsplit(",", 1))
+ out += " " * indent + " ],\n"
- return out
+ out += " " * indent + "}"
+
+ out = "".join(out.rsplit(",", 1))
+
+ return out
diff --git a/classes/httpclient.py b/classes/httpclient.py
index 4fc3397..6348697 100644
--- a/classes/httpclient.py
+++ b/classes/httpclient.py
@@ -1,7 +1,8 @@
import requests
-class HTTPClient(requests.Session):
- def __init__(self, *args, **kwargs):
- requests.Session.__init__(self, *args, **kwargs)
- self.headers = {"User-Agent": "oebb_py/git (+https://kumig.it/kumitterer/oebb_py)"}
+class HTTPClient(requests.Session):
+ def __init__(self, *args, **kwargs):
+ requests.Session.__init__(self, *args, **kwargs)
+ self.headers = {
+ "User-Agent": "oebb_py/git (+https://kumig.it/kumitterer/oebb_py)"}
diff --git a/classes/request.py b/classes/request.py
index 94332f9..511469f 100644
--- a/classes/request.py
+++ b/classes/request.py
@@ -1,57 +1,60 @@
try:
- from urllib.parse import parse_qs
+ from urllib.parse import parse_qs
except ImportError:
- from cgi import parse_qs
+ from cgi import parse_qs
+
class IllegalMethodException(BaseException):
- pass
+ pass
+
class InvalidArgumentException(BaseException):
- pass
+ pass
+
class Request:
- def __init__(self, env = None):
- if env:
- self.fromEnv(env)
+ def __init__(self, env=None):
+ if env:
+ self.fromEnv(env)
- def fromEnv(self, env):
- if env["REQUEST_METHOD"] == "POST":
- self.args = parse_qs(env['wsgi.input'].readline().decode(), True)
- elif env["REQUEST_METHOD"] == "GET":
- self.args = parse_qs(env['QUERY_STRING'], True)
- else:
- raise IllegalMethodException()
+ def fromEnv(self, env):
+ if env["REQUEST_METHOD"] == "POST":
+ self.args = parse_qs(env['wsgi.input'].readline().decode(), True)
+ elif env["REQUEST_METHOD"] == "GET":
+ self.args = parse_qs(env['QUERY_STRING'], True)
+ else:
+ raise IllegalMethodException()
- self.conn = False
- self.val = False
- self.cfrm = None
- self.cto = None
+ self.conn = False
+ self.val = False
+ self.cfrm = None
+ self.cto = None
- self.json = "json" in self.args
+ self.json = "json" in self.args
- split = env["PATH_INFO"].split("/")
- split = [i.strip() for i in split]
+ split = env["PATH_INFO"].split("/")
+ split = [i.strip() for i in split]
- while "" in split:
- split.remove("")
+ while "" in split:
+ split.remove("")
- if len(split) > 2:
- output = "
400 Bad Request
\n"
- output += "Only one (validate) or two (conn) arguments may be passed as path."
- raise InvalidArgumentException(output)
+ if len(split) > 2:
+ output = "
400 Bad Request
\n"
+ output += "Only one (validate) or two (conn) arguments may be passed as path."
+ raise InvalidArgumentException(output)
- if len(split) > 0:
- if len(split) == 1:
- self.val = True
- else:
- self.conn = True
- self.cto = split[1].encode("latin-1").decode("utf-8")
- self.cfrm = split[0].encode("latin-1").decode("utf-8")
-
- try:
- self.rtype = "conn" if self.conn else "val" if self.val else self.args["type"][0].lower()
- except:
- output = "
400 Bad Request
\n"
- output += "A request type must be provided."
- raise InvalidArgumentException(output)
+ if len(split) > 0:
+ if len(split) == 1:
+ self.val = True
+ else:
+ self.conn = True
+ self.cto = split[1].encode("latin-1").decode("utf-8")
+ self.cfrm = split[0].encode("latin-1").decode("utf-8")
+ try:
+ self.rtype = "conn" if self.conn else "val" if self.val else self.args["type"][0].lower(
+ )
+ except:
+ output = "
400 Bad Request
\n"
+ output += "A request type must be provided."
+ raise InvalidArgumentException(output)
diff --git a/classes/response.py b/classes/response.py
index ff1a820..9d1ec78 100644
--- a/classes/response.py
+++ b/classes/response.py
@@ -1,5 +1,5 @@
class Response:
- def __init__(self, status, ctype, content):
- self.status = status
- self.ctype = ctype
- self.content = content
+ def __init__(self, status, ctype, content):
+ self.status = status
+ self.ctype = ctype
+ self.content = content
diff --git a/classes/service.py b/classes/service.py
index 4523e43..feb8c70 100644
--- a/classes/service.py
+++ b/classes/service.py
@@ -1,110 +1,140 @@
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 __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 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)
+ 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 ""
+ 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 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"
+ if depst or deptime or deppf or currdep:
+ out += " " * indent + " \n"
- out += (self.depst.xml(indent + 2, **stationkwargs) + "\n") if depst else ""
+ 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")
+ 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"
+ out += (" " * indent + " %s\n" %
+ self.currdep) if currdep and self.currdep else ""
+ out += (" " * indent + " %s\n" %
+ self.deppf) if deppf and self.deppf else ""
- if arrst or arrtime or arrpf or curarr:
- out += " " * indent + " \n"
+ out += " " * indent + " \n"
- out += (self.arrst.xml(indent + 2, **stationkwargs) + "\n") if arrst else ""
+ if arrst or arrtime or arrpf or curarr:
+ out += " " * indent + " \n"
- 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 += (self.arrst.xml(indent + 2, **stationkwargs) +
+ "\n") if arrst else ""
- out += (" " * indent + " %s\n" % self.curarr) if curarr and self.curarr else ""
- out += (" " * indent + " %s\n" % self.arrpf) if arrpf and self.arrpf 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 + " \n"
+ 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 + ""
+ out += " " * indent + " \n"
- return out
+ out += " " * indent + ""
- 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"
+ return out
- out += (" " * indent + " \"@id\": %i,\n" % iid) if iid is not False else ""
- out += (" " * indent + " \"name\": \"%s\",\n" % self.name) if name else ""
+ 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"
- 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"
+ out += (" " * indent + " \"@id\": %i,\n" %
+ iid) if iid is not False else ""
+ out += (" " * indent + " \"name\": \"%s\",\n" %
+ self.name) if name else ""
- if depst:
- dep += " " * indent + " \"station\":\n"
- dep += self.depst.json(indent + 3, **stationkwargs) + ",\n"
+ if dest and self.dest:
+ out += " " * indent + " \"destination\":\n"
+ out += self.dest.json(indent + 2, **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")
+ if depst or deptime or deppf or currdep:
+ dep = " " * indent + " \"departure\": {\n"
- 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 ""
+ if depst:
+ dep += " " * indent + " \"station\":\n"
+ dep += self.depst.json(indent + 3, **stationkwargs) + ",\n"
- dep = "".join(dep.rsplit(",", 1))
- out += dep + " " * indent + " },\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")
- if arrst or arrtime or arrpf or curarr:
- arr = " " * indent + " \"arrival\": {\n"
+ 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 ""
- if arrst:
- arr += " " * indent + " \"station\":\n"
- arr += self.arrst.json(indent + 3, **stationkwargs) + ",\n"
+ dep = "".join(dep.rsplit(",", 1))
+ out += dep + " " * indent + " },\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")
+ if arrst or arrtime or arrpf or curarr:
+ arr = " " * indent + " \"arrival\": {\n"
- 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 ""
+ if arrst:
+ arr += " " * indent + " \"station\":\n"
+ arr += self.arrst.json(indent + 3, **stationkwargs) + ",\n"
- arr = "".join(arr.rsplit(",", 1))
- out += arr + " " * indent + " },\n"
-
- out += " " * indent + "}"
+ 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")
- out = "".join(out.rsplit(",", 1))
+ 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 ""
- return out
+ 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
index 81988c9..24dcc96 100644
--- a/classes/station.py
+++ b/classes/station.py
@@ -1,80 +1,91 @@
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 if xcoord else None
- self.ycoord = float(ycoord)/1000000 if ycoord else None
- self.prodclass = prodclass
- self.services = []
+ 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 if xcoord else None
+ self.ycoord = float(ycoord)/1000000 if ycoord else None
+ self.prodclass = prodclass
+ self.services = []
- def addService(self, svc):
- self.services += [svc]
+ def addService(self, svc):
+ self.services += [svc]
- def useId(self):
- return self.extid or self.name
+ def useId(self):
+ return self.extid or self.name
- def lat(self):
- return self.ycoord
+ def lat(self):
+ return self.ycoord
- def lon(self):
- return self.xcoord
+ def lon(self):
+ return self.xcoord
- def json(self, indent = 0, name = True, extid = True, sttype = False, coords = False, prodclass = False, distance = False, services = False, servicekwargs = {}):
- out = " " * indent + "{\n"
+ def json(self, indent=0, name=True, extid=True, sttype=False, coords=False, prodclass=False, distance=False, services=False, servicekwargs={}):
+ 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 ""
+ 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 and self.xcoord:
- out += " " * indent + " \"coords\": {\n"
- out += " " * indent + " \"lon\": %f,\n" % self.xcoord
- out += " " * indent + " \"lat\": %f\n" % self.ycoord
- out += " " * indent + " },\n"
+ if coords and self.xcoord:
+ out += " " * indent + " \"coords\": {\n"
+ out += " " * indent + " \"lon\": %f,\n" % self.xcoord
+ out += " " * indent + " \"lat\": %f\n" % self.ycoord
+ out += " " * indent + " },\n"
- if services and self.services:
- out += " " * indent + " \"services\": [\n"
+ if services and self.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")
+ 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 + " ],"
+ out += " " * indent + " ],"
- out += (" " * indent + " \"prodclass\": \"%s\",\n" % self.prodclass) if prodclass else ""
+ out += (" " * indent + " \"prodclass\": \"%s\",\n" %
+ self.prodclass) if prodclass else ""
- out = "".join(out.rsplit(",", 1))
+ out = "".join(out.rsplit(",", 1))
- out += " " * indent + "}"
+ out += " " * indent + "}"
- return out
+ return out
- def xml(self, indent = 0, name = True, extid = True, sttype = False, coords = False, prodclass = False, distance = False, services = False, servicekwargs = {}):
- out = " " * indent + "\n"
+ def xml(self, indent=0, name=True, extid=True, sttype=False, coords=False, prodclass=False, distance=False, services=False, servicekwargs={}):
+ 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 ""
+ 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 and self.xcoord:
- out += " " * indent + " \n"
- out += " " * indent + " %f\n" % self.xcoord
- out += " " * indent + " %f\n" % self.ycoord
- out += " " * indent + " \n"
+ if coords and self.xcoord:
+ out += " " * indent + " \n"
+ out += " " * indent + " %f\n" % self.xcoord
+ out += " " * indent + " %f\n" % self.ycoord
+ out += " " * indent + " \n"
- if services and self.services:
- out += " " * indent + " \n"
+ if services and self.services:
+ out += " " * indent + " \n"
- for i in range(len(self.services)):
- out += self.services[i].xml(indent + 2, i, **servicekwargs) + "\n"
+ for i in range(len(self.services)):
+ out += self.services[i].xml(indent + 2,
+ i, **servicekwargs) + "\n"
- out += " " * indent + " \n"
+ out += " " * indent + " \n"
- out += (" " * indent + " %s\n" % self.prodclass) if prodclass else ""
+ out += (" " * indent + " %s\n" %
+ self.prodclass) if prodclass else ""
- out += " " * indent + ""
-
- return out
+ out += " " * indent + ""
+ return out
diff --git a/classes/train.py b/classes/train.py
index 3315fe0..cdb7b90 100644
--- a/classes/train.py
+++ b/classes/train.py
@@ -1,69 +1,73 @@
import workers.val
+
class Train:
- def __init__(self, name, tid, dest, xcoord, ycoord, prodclass):
- self.name = name
- self.tid = tid
- self.dest = dest
- self.xcoord = float(xcoord)/1000000
- self.ycoord = float(ycoord)/1000000
- self.prodclass = prodclass
+ def __init__(self, name, tid, dest, xcoord, ycoord, prodclass):
+ self.name = name
+ self.tid = tid
+ self.dest = dest
+ self.xcoord = float(xcoord)/1000000
+ self.ycoord = float(ycoord)/1000000
+ self.prodclass = prodclass
- def lat(self):
- return self.ycoord
+ def lat(self):
+ return self.ycoord
- def lon(self):
- return self.xcoord
+ def lon(self):
+ return self.xcoord
- def destStation(self):
- return list(workers.val.validateName(self.name))[0]
+ def destStation(self):
+ return list(workers.val.validateName(self.name))[0]
- def json(self, indent = 0, name = True, tid = True, dest = True, coords = True, prodclass = False, stationkwargs = {}):
- out = " " * indent + "{\n"
+ def json(self, indent=0, name=True, tid=True, dest=True, coords=True, prodclass=False, stationkwargs={}):
+ out = " " * indent + "{\n"
- out += (" " * indent + " \"name\": \"%s\",\n" % self.name) if name else ""
- out += (" " * indent + " \"id\": \"%s\",\n" % self.tid) if tid else ""
+ out += (" " * indent + " \"name\": \"%s\",\n" %
+ self.name) if name else ""
+ out += (" " * indent + " \"id\": \"%s\",\n" % self.tid) if tid else ""
- if dest:
-# out += " " * indent + " \"destination\":\n"
-# out += self.dest.json(indent + 2, **stationkwargs) + "\n"
- out += " " * indent + " \"destination\": \"%s\",\n" % self.dest
+ if dest:
+ # out += " " * indent + " \"destination\":\n"
+ # out += self.dest.json(indent + 2, **stationkwargs) + "\n"
+ out += " " * indent + " \"destination\": \"%s\",\n" % self.dest
- if coords:
- out += " " * indent + " \"coords\": {\n"
- out += " " * indent + " \"lon\": %f,\n" % self.xcoord
- out += " " * indent + " \"lat\": %f\n" % self.ycoord
- out += " " * indent + " },\n"
+ 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 += (" " * indent + " \"prodclass\": \"%s\",\n" %
+ self.prodclass) if prodclass else ""
- out = "".join(out.rsplit(",", 1))
+ out = "".join(out.rsplit(",", 1))
- out += " " * indent + "}"
+ out += " " * indent + "}"
- return out
+ return out
- def xml(self, indent = 0, name = True, tid = True, dest = True, coords = True, prodclass = False, stationkwargs = {}):
- out = " " * indent + "\n"
+ def xml(self, indent=0, name=True, tid=True, dest=True, coords=True, prodclass=False, stationkwargs={}):
+ out = " " * indent + "\n"
- out += (" " * indent + " %s\n" % self.name) if name else ""
- out += (" " * indent + " %s\n" % self.tid) if tid else ""
+ out += (" " * indent + " %s\n" %
+ self.name) if name else ""
+ out += (" " * indent + " %s\n" % self.tid) if tid else ""
- if dest:
-# out += " " * indent + " \n"
-# out += self.dest.xml(indent + 2, **stationkwargs) + "\n"
-# out += " " * indent + " \n"
- out += " " * indent + " %s\n" % self.dest
+ if dest:
+ # out += " " * indent + " \n"
+ # out += self.dest.xml(indent + 2, **stationkwargs) + "\n"
+ # out += " " * indent + " \n"
+ out += " " * indent + " %s\n" % self.dest
- if coords:
- out += " " * indent + " \n"
- out += " " * indent + " %f\n" % self.xcoord
- out += " " * indent + " %f\n" % self.ycoord
- out += " " * indent + " \n"
+ 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 + " %s\n" %
+ self.prodclass) if prodclass else ""
- out += " " * indent + ""
-
- return out
+ out += " " * indent + ""
+ return out
diff --git a/main.py b/main.py
index 3833c7a..8e12309 100644
--- a/main.py
+++ b/main.py
@@ -24,211 +24,228 @@ XML = "text/xml; charset=UTF-8"
DOCSTR = ' Check out the documentation for usage instructions.'
+
def doConn(req):
- try:
- getfrm = req.cfrm if "cfrm" in dir(req) and req.cfrm else req.args["from"][0] if "from" in req.args else None
- getto = req.cto if "cto" in dir(req) and req.cto else req.args["to"][0] if "to" in req.args else None
+ try:
+ getfrm = req.cfrm if "cfrm" in dir(
+ req) and req.cfrm else req.args["from"][0] if "from" in req.args else None
+ getto = req.cto if "cto" in dir(
+ req) and req.cto else req.args["to"][0] if "to" in req.args else None
- try:
- frm = html.unescape(getfrm.encode("latin-1").decode("utf-8"))
- to = html.unescape(getto.encode("latin-1").decode("utf-8"))
- except UnicodeDecodeError:
- frm = html.unescape(getfrm)
- to = html.unescape(getto)
+ try:
+ frm = html.unescape(getfrm.encode("latin-1").decode("utf-8"))
+ to = html.unescape(getto.encode("latin-1").decode("utf-8"))
+ except UnicodeDecodeError:
+ frm = html.unescape(getfrm)
+ to = html.unescape(getto)
- if not frm or not to:
- raise ValueError()
+ if not frm or not to:
+ raise ValueError()
+ except Exception:
+ content = "
400 Bad Request
\n"
+ content += "\"from\"and \"to\" values are required for this type of request."
+ return Response(HTTP400, HTML, content)
- except Exception:
- content = "
400 Bad Request
\n"
- content += "\"from\"and \"to\" values are required for this type of request."
- return Response(HTTP400, HTML, content)
+ count = req.args["count"][0] if "count" in req.args and req.args["count"] else 6
+ date = req.args["date"][0] if "date" in req.args and req.args["date"] else datetime.datetime.strftime(
+ datetime.datetime.now(pytz.timezone("Europe/Vienna")), "%d.%m.%Y")
+ time = req.args["time"][0] if "time" in req.args and req.args["time"] else datetime.datetime.strftime(
+ datetime.datetime.now(pytz.timezone("Europe/Vienna")), "%H:%M")
+ mode = True if "mode" in req.args and req.args["mode"] and req.args["mode"][0].lower(
+ ) == "arr" else False
+ details = True if "details" in req.args else False
- count = req.args["count"][0] if "count" in req.args and req.args["count"] else 6
- date = req.args["date"][0] if "date" in req.args and req.args["date"] else datetime.datetime.strftime(datetime.datetime.now(pytz.timezone("Europe/Vienna")),"%d.%m.%Y")
- time = req.args["time"][0] if "time" in req.args and req.args["time"] else datetime.datetime.strftime(datetime.datetime.now(pytz.timezone("Europe/Vienna")),"%H:%M")
- mode = True if "mode" in req.args and req.args["mode"] and req.args["mode"][0].lower() == "arr" else False
- details = True if "details" in req.args else False
+ try:
+ count = int(count)
+ if count < 0 or count > 10:
+ raise ValueError()
+ except:
+ content = "
400 Bad Request
\n"
+ content += "The \"count\" value must be a value between 0 and 10."
+ return Response(HTTP400, HTML, content)
- try:
- count = int(count)
- if count < 0 or count > 10:
- raise ValueError()
- except:
- content = "
400 Bad Request
\n"
- content += "The \"count\" value must be a value between 0 and 10."
- return Response(HTTP400, HTML, content)
+ try:
+ outtime = datetime.datetime.strptime(
+ "%s %s" % (date, time), "%d.%m.%Y %H:%M")
+ except:
+ content = "
400 Bad Request
\n"
+ content += "The \"date\" value must be in DD.MM.YYYY format, the \"time\" value must be in HH:MM format."
+ return Response(HTTP400, HTML, content)
- try:
- outtime = datetime.datetime.strptime("%s %s" % (date, time), "%d.%m.%Y %H:%M")
- except:
- content = "
400 Bad Request
\n"
- content += "The \"date\" value must be in DD.MM.YYYY format, the \"time\" value must be in HH:MM format."
- return Response(HTTP400, HTML, content)
+ via = list(req.args["via"]) if "via" in req.args else None
- via = list(req.args["via"]) if "via" in req.args else None
+ if via and len(via) > 3:
+ content = "
400 Bad Request
\n"
+ content += "It is not possible to route through more than three \"via\" stations."
+ return Response(HTTP400, HTML, content)
- if via and len(via) > 3:
- content = "
400 Bad Request
\n"
- content += "It is not possible to route through more than three \"via\" stations."
- return Response(HTTP400, HTML, content)
+ try:
+ content = workers.conn.worker(
+ frm, to, count, outtime, mode, details, req.json, via)
+ except Exception as e:
+ content = "
500 Internal Server Error
\n"
+ if "debug" in req.args:
+ content += traceback.format_exc().replace("\n", " ")
+ return Response(HTTP500, HTML, content)
- try:
- content = workers.conn.worker(frm, to, count, outtime, mode, details, req.json, via)
- except Exception as e:
- content = "
500 Internal Server Error
\n"
- if "debug" in req.args:
- content += traceback.format_exc().replace("\n", " ")
- return Response(HTTP500, HTML, content)
+ return Response(HTTP200, JSON if req.json else XML, content)
- return Response(HTTP200, JSON if req.json else XML, content)
def doVal(req):
- try:
- try:
- name = (req.cfrm or req.args["name"][0]).encode("latin-1").decode("utf-8")
- except UnicodeDecodeError:
- name = req.cfrm or req.args["name"][0]
+ try:
+ try:
+ name = (req.cfrm or req.args["name"][0]).encode(
+ "latin-1").decode("utf-8")
+ except UnicodeDecodeError:
+ name = req.cfrm or req.args["name"][0]
- if not name:
- raise ValueError()
+ if not name:
+ raise ValueError()
- except Exception:
- content = "
400 Bad Request
\n"
- content += "A \"name\" value is required for this type of request."
- return Response(HTTP400, HTML, content)
+ except Exception:
+ content = "
400 Bad Request
\n"
+ content += "A \"name\" value is required for this type of request."
+ return Response(HTTP400, HTML, content)
- try:
- content = workers.val.worker(name, req.json)
+ try:
+ content = workers.val.worker(name, req.json)
- except Exception as e:
- content = "
500 Internal Server Error
\n"
- if "debug" in req.args:
- content += traceback.format_exc().replace("\n", " ")
- return Response(HTTP500, HTML, content)
+ except Exception as e:
+ content = "
500 Internal Server Error
\n"
+ if "debug" in req.args:
+ content += traceback.format_exc().replace("\n", " ")
+ return Response(HTTP500, HTML, content)
+
+ return Response(HTTP200, JSON if req.json else XML, content)
- return Response(HTTP200, JSON if req.json else XML, content)
def doNearby(req):
- try:
- lat = float(req.args["lat"][0].replace(",", "."))
- lon = float(req.args["lon"][0].replace(",", "."))
+ try:
+ lat = float(req.args["lat"][0].replace(",", "."))
+ lon = float(req.args["lon"][0].replace(",", "."))
- if (not lat and not lat == float(0)) or (not lon and not lon == float(0)):
- raise ValueError()
+ if (not lat and not lat == float(0)) or (not lon and not lon == float(0)):
+ raise ValueError()
- except:
- content = "
400 Bad Request
\n"
- content += "\"lat\" and \"lon\" values are required for this type of request."
- return Response(HTTP400, HTML, content)
+ except:
+ content = "
400 Bad Request
\n"
+ content += "\"lat\" and \"lon\" values are required for this type of request."
+ return Response(HTTP400, HTML, content)
- distance = req.args["distance"][0] if "distance" in req.args and req.args["distance"] else 1000
+ distance = req.args["distance"][0] if "distance" in req.args and req.args["distance"] else 1000
- try:
- distance = int(distance)
- if distance < 0 or distance > 10000:
- raise ValueError()
- except:
- content = "
400 Bad Request
\n"
- content += "\"distance\" must be a value between 0 and 10000."
- return Response(HTTP400, HTML, content)
+ try:
+ distance = int(distance)
+ if distance < 0 or distance > 10000:
+ raise ValueError()
+ except:
+ content = "
400 Bad Request
\n"
+ content += "\"distance\" must be a value between 0 and 10000."
+ return Response(HTTP400, HTML, content)
- try:
- content = workers.closest.worker(lat, lon, distance, req.json)
+ try:
+ content = workers.closest.worker(lat, lon, distance, req.json)
- except Exception as e:
- content = "
500 Internal Server Error
"
- if "debug" in req.args:
- content += traceback.format_exc().replace("\n", " ")
- return Response(HTTP500, HTML, content)
+ except Exception as e:
+ content = "
500 Internal Server Error
"
+ if "debug" in req.args:
+ content += traceback.format_exc().replace("\n", " ")
+ return Response(HTTP500, HTML, content)
+
+ return Response(HTTP200, JSON if req.json else XML, content)
- return Response(HTTP200, JSON if req.json else XML, content)
def doRadar(req):
- trains = req.args["train"] if "train" in req.args else None
+ trains = req.args["train"] if "train" in req.args else None
- try:
- content = workers.radar.worker(trains, req.json)
- except Exception as e:
- content = "
\n"
+ if "debug" in req.args:
+ content += traceback.format_exc().replace("\n", " ")
+ return Response(HTTP500, HTML, content)
+
+ return Response(HTTP200, JSON if req.json else XML, content)
- return Response(HTTP200, JSON if req.json else XML, content)
def doDepArr(req):
- try:
- name = req.args["name"][0]
- try:
- name = name.encode("latin-1").decode("utf-8")
- except UnicodeDecodeError:
- pass
+ try:
+ name = req.args["name"][0]
+ try:
+ name = name.encode("latin-1").decode("utf-8")
+ except UnicodeDecodeError:
+ pass
- except Exception:
- content = "
400 Bad Request
\n"
- content += "A \"name\" value is required for this type of request."
- return Response(HTTP400, HTML, content)
+ except Exception:
+ content = "
400 Bad Request
\n"
+ content += "A \"name\" value is required for this type of request."
+ return Response(HTTP400, HTML, content)
- count = req.args["count"][0] if "count" in req.args and req.args["count"] else 30
- date = req.args["date"][0] if "date" in req.args and req.args["date"] else datetime.datetime.strftime(datetime.datetime.now(pytz.timezone("Europe/Vienna")),"%d.%m.%Y")
- time = req.args["time"][0] if "time" in req.args and req.args["time"] else datetime.datetime.strftime(datetime.datetime.now(pytz.timezone("Europe/Vienna")),"%H:%M")
- mode = True if req.rtype[:3] == "arr" else False
- details = True
+ count = req.args["count"][0] if "count" in req.args and req.args["count"] else 30
+ date = req.args["date"][0] if "date" in req.args and req.args["date"] else datetime.datetime.strftime(
+ datetime.datetime.now(pytz.timezone("Europe/Vienna")), "%d.%m.%Y")
+ time = req.args["time"][0] if "time" in req.args and req.args["time"] else datetime.datetime.strftime(
+ datetime.datetime.now(pytz.timezone("Europe/Vienna")), "%H:%M")
+ mode = True if req.rtype[:3] == "arr" else False
+ details = True
- try:
- count = int(count)
- except:
- content = "
400 Bad Request
\n"
- content += "The \"count\" value must be a numeric value."
- return Response(HTTP400, HTML, content)
+ try:
+ count = int(count)
+ except:
+ content = "
400 Bad Request
\n"
+ content += "The \"count\" value must be a numeric value."
+ return Response(HTTP400, HTML, content)
- try:
- outtime = datetime.datetime.strptime("%s %s" % (date, time), "%d.%m.%Y %H:%M")
- except:
- content = "
400 Bad Request
\n"
- content += "The \"date\" value must be in DD.MM.YYYY format, the \"time\" value must be in HH:MM format."
- return Response(HTTP400, HTML, content)
+ try:
+ outtime = datetime.datetime.strptime(
+ "%s %s" % (date, time), "%d.%m.%Y %H:%M")
+ except:
+ content = "
400 Bad Request
\n"
+ content += "The \"date\" value must be in DD.MM.YYYY format, the \"time\" value must be in HH:MM format."
+ return Response(HTTP400, HTML, content)
- try:
- content = workers.deparr.worker(name, count, outtime, mode, details, req.json)
- except Exception as e:
- content = "