diff --git a/main.py b/main.py
index d220b94..9be1a43 100644
--- a/main.py
+++ b/main.py
@@ -7,6 +7,73 @@ import workers.val
import workers.closest
import workers.radar
+HTTP200 = "200 OK"
+HTTP400 = "400 Bad Request"
+HTTP500 = "500 Internal Server Error"
+
+HTML = "text/html"
+JSON = "application/json"
+XML = "text/xml"
+
+def doConn(args, cfrm = None, cto = None):
+ try:
+ try:
+ frm = (cfrm or args["from"][0]).encode("latin-1").decode("utf-8")
+ to = (cto or args["to"][0]).encode("latin-1").decode("utf-8")
+ except UnicodeDecodeError:
+ frm = cfrm or args["from"][0]
+ to = cto or args["to"][0]
+
+ 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.\n"
+ return (HTTP400, HTML, content)
+
+ count = args["count"][0] if "count" in args and args["count"] else 6
+ date = args["date"][0] if "date" in args and args["date"] else datetime.datetime.strftime(datetime.datetime.now(pytz.timezone("Europe/Vienna")),"%d.%m.%Y")
+ time = args["time"][0] if "time" in args and args["time"] else datetime.datetime.strftime(datetime.datetime.now(pytz.timezone("Europe/Vienna")),"%H:%M")
+ mode = True if "mode" in args and args["mode"] and args["mode"][0].lower() == "arr" else False
+ details = True if "details" in 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 (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 (HTTP400, HTML, content)
+
+ via = list(args["via"]) if "via" in 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 (HTTP400, HTML, content)
+
+ json = "json" in args
+
+ try:
+ content = workers.conn.worker(frm, to, count, outtime, mode, details, json, via)
+ except Exception as e:
+ content = "500 Internal Server Error
\n"
+ if "debug" in args:
+ content += str(e)
+ return (HTTP500, HTML, content)
+
+ return(HTTP200, JSON if json else XML, content)
+
+
def application(env, re):
if env["REQUEST_METHOD"] == "POST":
args = cgi.parse_qs(env['wsgi.input'].readline().decode(), True)
@@ -53,66 +120,9 @@ def application(env, re):
json = "json" in args
if rtype.lower() in ["conn", "connection"]:
- try:
- try:
- frm = (cfrm or args["from"][0]).encode("latin-1").decode("utf-8")
- to = (cto or args["to"][0]).encode("latin-1").decode("utf-8")
- except UnicodeDecodeError:
- frm = cfrm or args["from"][0]
- to = cto or args["to"][0]
-
- if not frm or not to:
- raise ValueError()
-
- except:
- re("400 Bad Request", [])
- yield "400 Bad Request
".encode()
- yield "\"from\" and \"to\" values are required for this type of request.".encode()
- return
-
- count = args["count"][0] if "count" in args and args["count"] else 6
- date = args["date"][0] if "date" in args and args["date"] else datetime.datetime.strftime(datetime.datetime.now(pytz.timezone("Europe/Vienna")),"%d.%m.%Y")
- time = args["time"][0] if "time" in args and args["time"] else datetime.datetime.strftime(datetime.datetime.now(pytz.timezone("Europe/Vienna")),"%H:%M")
- mode = True if "mode" in args and args["mode"] and args["mode"][0].lower() == "arr" else False
- details = True if "details" in args else False
-
- try:
- count = int(count)
- if count < 0 or count > 10:
- raise ValueError()
- except:
- re("400 Bad Request", [])
- yield "400 Bad Request
".encode()
- yield "The \"count\" value must be a value between 0 and 10.".encode()
- return
-
- try:
- outtime = datetime.datetime.strptime("%s %s" % (date, time), "%d.%m.%Y %H:%M")
- except:
- re("400 Bad Request", [])
- yield "400 Bad Request
".encode()
- yield "The \"date\" value must be in DD.MM.YYYY format, the \"time\" value must be in HH:MM format.".encode()
- return
-
- via = list(args["via"]) if "via" in args else None
-
- if via and len(via) > 3:
- re("400 Bad Request", [])
- yield "400 Bad Request
".encode()
- yield "It is not possible to route through more than three \"via\" stations.".encode()
- return
-
- try:
- output = workers.conn.worker(frm, to, count, outtime, mode, details, json, via)
- except Exception as e:
- re("500 Internal Server Error", [])
- yield "500 Internal Server Error
".encode()
- if "debug" in args:
- yield str(e).encode()
- return
-
- re("200 OK", [("Content-Type", "application/json" if json else "text/xml")])
- yield output.encode()
+ status, ctype, content = doConn(args, cfrm, cto)
+ re(status, [("Content-Type", ctype)])
+ yield content.encode()
return
elif rtype.lower() in ["val", "validate"]: