diff --git a/classes/__init__.py b/classes/__init__.py index 80e05fa..4c62a20 100644 --- a/classes/__init__.py +++ b/classes/__init__.py @@ -3,13 +3,19 @@ class Station: self.name = name self.sttype = sttype self.extid = extid - self.xcoord = xcoord - self.ycoord = ycoord + 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 + class Service: def __init__(self, name, svtype, depst, deptime, arrst, arrtime, deppf = None, currdep = None, arrpf = None, curarr = None, img = None, url = None): self.name = name diff --git a/main.py b/main.py index 29d7503..6399ef8 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,9 @@ import cgi import datetime + import workers.conn import workers.val +import workers.closest def application(env, re): if env["REQUEST_METHOD"] == "POST": @@ -39,6 +41,16 @@ def application(env, re): time = args["time"][0] if "time" in args and args["time"] else datetime.datetime.strftime(datetime.datetime.now(),"%H:%M") mode = True if "mode" in args and args["mode"] and args["mode"][0].lower() == "arr" 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." + return + try: outtime = datetime.datetime.strptime("%s %s" % (date, time), "%d.%m.%Y %H:%M") except: @@ -75,7 +87,7 @@ def application(env, re): try: output = workers.val.worker(name) - except: + except Exception as e: re("500 Internal Server Error", []) yield "

500 Internal Server Error

".encode() if "debug" in args: @@ -84,3 +96,49 @@ def application(env, re): re("200 OK", []) return output.encode() + + elif rtype.lower() in ["closest", "close", "near", "nearby"]: + try: + lat = float(args["lat"][0]) + lon = float(args["lon"][0]) + + if (not lat and not lat == float(0)) or (not lon and not lon == float(0)): + raise ValueError() + + except: + re("400 Bad Request", []) + yield "

400 Bad Request

".encode() + yield "\"lat\" and \"lon\" values are required for this type of request.".encode() + return + + distance = args["distance"][0] if "distance" in args and args["distance"] else 1000 + + try: + distance = int(distance) + if distance < 0 or distance > 10000: + raise ValueError() + except: + re("400 Bad Request", []) + yield "

400 Bad Request

" + yield "\"distance\" must be a value between 0 and 10000." + return + + try: + output = workers.closest.worker(lat, lon, distance) + + except Exception as e: + re("500 Internal Server Error", []) + yield "

500 Internal Server Error

".encode() + if "debug" in args: + yield e.encode() + return + + re("200 OK", []) + yield output.encode() + return + + else: + re("400 Bad Request", []) + yield "

400 Bad Request

".encode() + yield "The request type you submitted is invalid.".encode() + return diff --git a/workers/val.py b/workers/val.py index 1fdf76a..a09856d 100644 --- a/workers/val.py +++ b/workers/val.py @@ -22,4 +22,14 @@ def validateName(name): yield Station(name = name, sttype = sttype, extid = extid, xcoord = xcoord, ycoord = ycoord, prodclass = prodclass) def worker(name): - return "Validate." + outtext = """ + +""" + + for station in validateName(name): + outtext += "%s%s\n" % (station.name, station.useId()) + + outtext += "" + + return outtext +