diff --git a/websearch.py b/websearch.py index a7837d9..0105a1e 100755 --- a/websearch.py +++ b/websearch.py @@ -11,6 +11,9 @@ print("Content-type: text/html\n") # makes sure the http connection does not die import cgi import pathvalidate import osmsearch +import datetime +import random +import os import sys assert sys.version_info >= (3, 6), "At least Python 3.8 required due to fStrings. Replace all f\"…\" and comment this line to enable running in lower versions (but really, you should just update your Python version…)." @@ -25,37 +28,106 @@ args = { "limit": 50, "use_boundingbox": False, "boundingbox": [], - "outputfilename": None, "ignore_ids": [], "maxsearchnums": 10, "url": "https://nominatim.openstreetmap.org/search/", + "output": "return", } -immutable_args = ["format", "outputfilename", "url",] +immutable_args = ["format", "url", "ouput"] +outputfolder = "downloads" +DEBUG = False ##################################### ######## end of configuration ##################################### -def get_arguments(): - """Wrapper for cgi-environment. - Takes no options, returns dict of arguments - """ - args = cgi.FieldStorage() - return {i: args.getvalue(i) for i in args} -# get cgi args and sanitize -cgi_args = get_arguments() +# get cgi args sanitize, and update default args +rawargs = cgi.FieldStorage() +cgi_args = {i: rawargs.getvalue(i) for i in rawargs} +del(rawargs) parsed_args = {} try: cgi_args["q"] = pathvalidate.sanitize_filename(cgi_args["query"]) except KeyError: - # no key called "query" found, abort - exit() + if DEBUG: + # local testing + cgi_args["q"] = "Camping" + else: + # we don't need to exit gracefully, whoever is arriving here has fiddled with the request manually + exit() for arg in cgi_args: if arg not in immutable_args and arg in args: parsed_args[arg] = cgi_args[arg] -print(parsed_args, " parsed") - +if DEBUG: print("Parsed argument dict: ", parsed_args) args.update(cgi_args) -#status = osmsearch.conduct_search(args) +# generate output file name from query +# outputfolder/date-randomnumber.gpx +if not os.path.isdir(outputfolder): + os.makedirs(outputfolder) +outputfilename = f"{outputfolder}/{str(datetime.date.today())}-{str(random.random()).replace('0.', '')}.gpx" +args["outputfilename"] = outputfilename + +searchresult = osmsearch.OSMSearch(args) +gpxcontent = searchresult.gpxfile.to_xml() +gpxcontent_escaped = searchresult.gpxfile.to_xml().replace("\\", "\\\\").replace("'", "\\'").replace('"', '\\"') + +print(""" + + + + + +OSM search to GPX + + + +
+

Export OSM search to GPX file

+
+
+

Success

+Copy file content from here: +
+ +

+Return to search page + +
+
+OSMsearchToGPX - ein Service von dukun.de +
+ + +""") +# TODO download button does not work this way! +#""" +#
+#or (requires enabled JavaScript). +# +#

+#Return to search page +# +# +#
+#OSMsearchToGPX - ein Service von dukun.de +#
+# +# +#""".format(gpxcontent=gpxcontent_escaped))