From 83519f0d2bbcf55d3516a74d4f4475e963b36255 Mon Sep 17 00:00:00 2001 From: Stephane Bortzmeyer Date: Mon, 12 Jun 2023 18:34:27 +0200 Subject: [PATCH] Search engine a bit better --- search.py | 38 +++++++++++++++++++++++++++++--------- search.xml | 6 +++++- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/search.py b/search.py index a20598b..5cd9d31 100755 --- a/search.py +++ b/search.py @@ -18,21 +18,41 @@ def pack(start_response, status, data): return [datae] def application(environ, start_response): - status = "200 OK" - output = "TODO\r\n" - # REQUEST_METHOD - for variable in environ: - print("%s: %s" % (variable, environ[variable])) + if environ["REQUEST_METHOD"] != "POST": + status = "405 Method unavailable" + output = "Unsupported HTTP method \"%s\"\r\n" % environ["REQUEST_METHOD"] + return pack(start_response, status, output) try: body_size = int(environ.get("CONTENT_LENGTH", 0)) except (ValueError): body_size = 0 body = environ["wsgi.input"].read(body_size) - print("") - print("Body \"%s\"" % body.decode()) query = urllib.parse.parse_qsl(body.decode()) - print("") - print("Query \"%s\"" % query) + form = {} + for q in query: + form[q[0]] = q[1] + for mandatory in ["string", "what"]: + if mandatory not in form: + status = "400 Invalid request" + output = "Missing \"%s\" in request\r\n" % mandatory + return pack(start_response, status, output) + # TODO case-insensitive (scripts are capitalized) + if form["what"] == "language": + sql = "SELECT * FROM Languages WHERE code = %s" + elif form["what"] == "script": + sql = "SELECT * FROM Scripts WHERE code = %s" + else: + status = "400 Invalid request" + output = "Unknown search category \"%s\"\r\n" % form["what"] + return pack(start_response, status, output) + # TODO junctions + # TODO search in descriptions + cursor.execute(sql, (form["string"], )) + mytuple = cursor.fetchone() + status = "200 OK" + output = "TODO %s\r\n" % str(mytuple) # TODO display comments, preferredscript, addition date etc + # TODO HTML with a templating engine? + # TODO link to mulhtml ? return pack(start_response, status, output) if __name__ == "__main__": diff --git a/search.xml b/search.xml index 7018157..3a26fca 100644 --- a/search.xml +++ b/search.xml @@ -2,7 +2,11 @@

TODO

-

Name:

+

Name:

+

Search in: