diff --git a/plugin-server.py b/plugin-server.py index 6731260..b394a0a 100644 --- a/plugin-server.py +++ b/plugin-server.py @@ -26,20 +26,6 @@ URL = "//plugins.lexonomy.cjvt.si" REPLACE_STRING = "$LOCATION$" -@app.route("/") -def root(): - result = "

Description

"
-    result += sys.modules[__name__].__doc__
-    result += "

Url

" - result += URL - result += "

" - return result - -@app.route("/") -def plugin_root(plugin): - status = "" if os.path.isdir(plugin) else " NOT" - return "Plugin {} was{} found".format(plugin, status) - def check_cache(full_path): file_time = int(os.path.getmtime(full_path)) old_file_time = 0 @@ -60,9 +46,8 @@ def generate_etag(N=12): return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N)) -@app.route("//") -def plugin_file(plugin, path): - full_path = "{}/{}".format(plugin, path) +def return_file(path, plugin=None): + full_path = path if plugin is None else"{}/{}".format(plugin, path) if not os.path.isfile(full_path): return "File not found", 404 @@ -77,19 +62,23 @@ def plugin_file(plugin, path): # else, make search-and-replace and save to redis (+etag) else: - replace_with = "{}/{}".format(URL, plugin) status_code = 200 etag = generate_etag() with open(full_path, 'rb') as fp: - content_bytes = fp.read() - - try: - content = content_bytes.decode('UTF-8') - result = content.replace(REPLACE_STRING, replace_with) - result = result.encode('UTF-8') - except UnicodeDecodeError: - result = content_bytes + result = fp.read() + with open(".err", "a") as fpw: + print(result, file=fpw) + print(len(result), file=fpw) + + if plugin is not None: + replace_with = "{}/{}".format(URL, plugin) + try: + content = result.decode('UTF-8') + content_replaced = content.replace(REPLACE_STRING, replace_with) + result = content_replaced.encode('UTF-8') + except UnicodeDecodeError: + pass redis.set(full_path + ":content", result) redis.set(full_path + ":etag", etag) @@ -103,12 +92,42 @@ def plugin_file(plugin, path): # if browser does not have a cached etag -> 200 if 'If-None-Match' not in request.headers: status_code = 200 + # then check if it etag is None -> 200 + elif request.headers['If-None-Match'] == "None": + status_code = 200 # then check if it is the latest etag, else -> 200 elif request.headers['If-None-Match'] != etag: status_code = 200 return Response(result, mimetype=mt, headers=headers, status=status_code) + +@app.route("/") +def root(): + result = "

Description

"
+    result += sys.modules[__name__].__doc__
+    result += "

Url

" + result += URL + result += "

" + return result + + +@app.route("/plugin-loader.js") +def plugin_loader(): + return return_file("./plugin-loader.js") + + +@app.route("/") +def plugin_root(plugin): + status = "" if os.path.isdir(plugin) else " NOT" + return "Plugin {} was{} found".format(plugin, status) + + +@app.route("//") +def plugin_file(plugin, path): + return return_file(path, plugin=plugin) + + if __name__ == '__main__': app.run(host="0.0.0.0")