diff --git a/classes/httpclient.py b/classes/httpclient.py new file mode 100644 index 0000000..4fc3397 --- /dev/null +++ b/classes/httpclient.py @@ -0,0 +1,7 @@ +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)"} + diff --git a/classes/request.py b/classes/request.py new file mode 100644 index 0000000..bf442c8 --- /dev/null +++ b/classes/request.py @@ -0,0 +1,50 @@ +import cgi + +class IllegalMethodException(BaseException): + pass + +class InvalidArgumentException(BaseException): + pass + +class Request: + def __init__(self, env): + if env["REQUEST_METHOD"] == "POST": + self.args = cgi.parse_qs(env['wsgi.input'].readline().decode(), True) + elif env["REQUEST_METHOD"] == "GET": + self.args = cgi.parse_qs(env['QUERY_STRING'], True) + else: + raise IllegalMethodException() + + self.conn = False + self.val = False + self.cfrm = None + self.cto = None + + self.json = "json" in self.args + + split = env["PATH_INFO"].split("/") + split = [i.strip() for i in split] + + 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) > 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 new file mode 100644 index 0000000..ff1a820 --- /dev/null +++ b/classes/response.py @@ -0,0 +1,5 @@ +class Response: + def __init__(self, status, ctype, content): + self.status = status + self.ctype = ctype + self.content = content