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")