aboutsummaryrefslogtreecommitdiffstats
path: root/templating/templating.py
diff options
context:
space:
mode:
authorKristian Lyngstol <kristian@bohemians.org>2016-11-14 14:13:46 +0100
committerKristian Lyngstol <kristian@bohemians.org>2016-11-14 14:13:46 +0100
commit752f4846f42ed0758c013820def30bca92f8a5d0 (patch)
tree8a9562c561c16465079ccea7134d643901ea34f8 /templating/templating.py
parent2c27e86a0f0291a40d45b3da9e9773983d49c2ad (diff)
Templating with POST support
Probably has to be tweaked a bit, but it works. Fixes #146
Diffstat (limited to 'templating/templating.py')
-rwxr-xr-xtemplating/templating.py64
1 files changed, 44 insertions, 20 deletions
diff --git a/templating/templating.py b/templating/templating.py
index 832beab..d4cb7f8 100755
--- a/templating/templating.py
+++ b/templating/templating.py
@@ -1,14 +1,15 @@
-#!/usr/bin/env python3.4
+#!/usr/bin/env python3
import requests,traceback
from jinja2 import Template,Environment,FileSystemLoader
import json
+import http.server
endpoints = "read/oplog read/snmp read/switches-management public/config public/dhcp public/dhcp-summary public/ping public/switches public/switch-state".split()
objects = dict()
def getEndpoint(endpoint):
- r = requests.get("http://gondul-front:/api/%s" % endpoint)
+ r = requests.get("http://gondul-front/api/%s" % endpoint)
if (r.status_code != 200):
raise Exception("Bad status code for endpoint %s: %s" % (endpoint, r.status_code))
return r.json()
@@ -19,36 +20,59 @@ def updateData():
env = Environment(loader=FileSystemLoader(['templates/','/opt/gondul/web/templates']),lstrip_blocks=True, trim_blocks=True)
-import http.server
class MyHandler(http.server.BaseHTTPRequestHandler):
- def do_GET(self):
- print (self.path[1:])
- updateData()
+
+ body = ""
+ options = dict()
+
+ def parse_options(self):
url = self.path[1:]
- options = dict()
+ self.url = url
if url.find("?") != -1:
- (url, tmpoptions) = url.split("?")
- print (tmpoptions)
+ (self.url, tmpoptions) = url.split("?")
tmptuples = tmpoptions.split("&")
- print (tmptuples)
for a in tmptuples:
(x,y) = a.split("=")
- options[x] = y
-
+ self.options[x] = y
+
+ def finalize_reply(self):
+ self.send_header('Content-Length', int(len(self.body)))
+ self.end_headers()
+ self.wfile.write(self.body)
+ self.wfile.flush()
+
+ def do_GET(self):
+ updateData()
+ self.parse_options()
try:
- template = env.get_template(url)
- body = template.render(objects=objects, options=options).encode('UTF-8')
+ template = env.get_template(self.url)
+ self.body = template.render(objects=objects, options=self.options).encode('UTF-8')
self.send_response(200)
self.send_header('Cache-Control','max-age=30, s-maxage=5')
except Exception as err:
- body = ("Templating of %s failed to render. Most likely due to an error in the template. Error transcript:\n\n%s\n----\n\n%s\n" % (url, err, traceback.format_exc())).encode('UTF-8')
+ self.body = ("Templating of %s failed to render. Most likely due to an error in the template. Error transcript:\n\n%s\n----\n\n%s\n" % (self.url, err, traceback.format_exc())).encode('UTF-8')
self.send_response(500)
self.send_header('Cache-Control','max-age=1, s-maxage=1')
- self.send_header('Content-Length', int(len(body)))
- self.end_headers()
- self.wfile.write(body)
- self.wfile.flush()
-
+ self.finalize_reply()
+
+ def do_POST(self):
+ updateData()
+ self.parse_options()
+ try:
+ length = self.headers.get('content-length')
+ if not length:
+ length = 0
+ content = self.rfile.read(int(length)).decode('UTF-8')
+ template = Template(content)
+ self.body = template.render(options=self.options).encode('UTF-8')
+ self.send_response(200)
+ self.send_header('Cache-Control','max-age=30, s-maxage=5')
+ except Exception as err:
+ self.body = ("Templating of %s failed to render. Most likely due to an error in the template. Error transcript:\n\n%s\n----\n\n%s\n" % (self.url, err, traceback.format_exc())).encode('UTF-8')
+ self.send_response(500)
+ self.send_header('Cache-Control','max-age=1, s-maxage=1')
+ self.finalize_reply()
+
def run(server_class=http.server.HTTPServer, handler_class=http.server.BaseHTTPRequestHandler):
server_address = ('', 8080)
httpd = server_class(server_address, handler_class)