import cgi import datetime import configparser import pymysql def getDatabase(path = "config.cfg"): config = configparser.RawConfigParser() config.read(path) host = config.get("Database", "host") user = config.get("Database", "user") pwd = config.get("Database", "pass") name = config.get("Database", "name") conn = pymysql.connect(host, user, pwd, name) cur = conn.cursor() return conn, cur def application(env, re): if env["REQUEST_METHOD"] == "POST": args = cgi.parse_qs(env['wsgi.input'].readline().decode(), True) elif env["REQUEST_METHOD"] == "GET": args = cgi.parse_qs(env['QUERY_STRING'], True) else: re("405 Method Not Allowed", []) return if env["PATH_INFO"] == "/endpoint": try: device = args["device"][0] except: re("400 Bad Request", []) yield "

400 Bad Request

".encode() yield "device is required.".encode() try: latitude = float(args["lat"][0].replace(",", ".")) longitude = float(args["lon"][0].replace(",", ".")) except Exception as e: re("400 Bad Request", []) yield "

400 Bad Request

".encode() yield "lat and lon are required.".encode() return try: altitude = float(args["alt"][0].replace(",", ".")) except: altitude = None try: timestamp = datetime.datetime.fromtimestamp(float(args["t"][0]) / 1000) except: timestamp = datetime.datetime.now() timestr = timestamp.strftime('%Y-%m-%d %H:%M:%S') conn, cur = getDatabase() sql = "INSERT INTO tracker(ts, device, lat, lon, alt) VALUES (%s, %s, %s, %s, %s);" cur.execute(sql, (timestr, device, str(latitude), str(longitude), str(altitude) if altitude != None else None)) conn.commit()