diff --git a/esp8266/data/tags.json b/esp8266/data/tags.json new file mode 100644 index 00000000..5aebc12c --- /dev/null +++ b/esp8266/data/tags.json @@ -0,0 +1,4 @@ +{ + "WEB_ADDRESS":"localhost", + "PAGE_TITLE":"Testing things..." +} diff --git a/tools/server.py b/tools/server.py new file mode 100644 index 00000000..eeb970ce --- /dev/null +++ b/tools/server.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python + +import SimpleHTTPServer, SocketServer +import sys +import os +import json +import re + +#Replace this with a different path if you need to... +base_path = os.path.join(os.getcwd(),"..","esp8266","data") + +class MyHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): + def do_GET(self): + is_tpl, s = self.process_path(self.path) + if is_tpl: + self.send_response(301) + self.send_header("Content-type", "text/html") + self.end_headers() + + data = self.process_tpl(s) + self.wfile.write(data) + self.wfile.close() + return + SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) + + def process_path(self,s): + #A template link is all caps and is associated to a lower().tpl file in base_path + if s == "/": + return True,"home.tpl" + + ret = False,"" + s = s.replace("/","") + if s.endswith(".tpl"): + return True,s + + s = s.lower()+".tpl" + + #these do not exactly match, so let's make them! + s = s.replace("configsta","config_sta") + s = s.replace("configap","config_ap") + s = s.replace("configsys","system") + + if os.path.exists(os.path.join(base_path,s)): + ret = True,s + + return ret + + def process_tpl(self,fn): + p = re.compile('\$(.*?)\$') + if fn.startswith("/") or fn.startswith("\\"): + fn = fn[1:] + + fn = os.path.join(base_path,fn) + data = open(fn).read() + + fn_json = os.path.join(base_path,"tags.json") + if os.path.exists(fn_json): + json_dic = json.loads(open(fn_json).read()) + else: + json_dic = {} + + tags = p.findall(data) + i = 0 + n_tags = len(tags) + while i < n_tags: + dd = self.process_tag(data,tags[i],json_dic) + if dd != data: + data = dd + tags = p.findall(data) + n_tags = len(tags) + else: + i = i+1 + return data + + def process_tag(self, data, tag, json_dic={}): + print " processing $%s$" % tag + if tag in json_dic.keys(): + data = data.replace("$"+tag+"$",json_dic[tag]) + elif tag.startswith("INCLUDE[") and tag.endswith("]"): + fn = tag[8:-1] + fn = os.path.join(base_path,fn) + d = open(fn).read() + p0 = data.find("$"+tag) + p1 = data.find("]",p0)+2 + data = data[:p0]+d+data[p1:] + + return data + +if __name__ == '__main__': + print "="*60 + print "Serving files from:" + print base_path + os.chdir(base_path) + print "="*60 + handler = MyHandler + server = SocketServer.TCPServer(("",8080), handler) + server.serve_forever() +