diff --git a/bserver.py b/bserver.py
new file mode 100755
index 0000000..a5bab01
--- /dev/null
+++ b/bserver.py
@@ -0,0 +1,135 @@
+#!/usr/bin/python3
+
+import boxes
+import sys
+import argparse
+import cgi
+import tempfile
+import os
+
+from wsgiref.util import setup_testing_defaults
+from wsgiref.simple_server import make_server
+import wsgiref.util
+
+import box, box2, box3, flexbox, flexbox2, flexbox3, flextest, folder
+import magazinefile, trayinsert, typetray
+
+
+class ArgumentParserError(Exception): pass
+
+class ThrowingArgumentParser(argparse.ArgumentParser):
+ def error(self, message):
+ raise ArgumentParserError(message)
+boxes.ArgumentParser = ThrowingArgumentParser # Evil hack
+
+class BServer:
+ def __init__(self):
+ self.boxes = {
+ "DemoBox" : boxes.DemoBox(),
+ "Box" : box.Box(),
+ "Box2" : box2.Box(),
+ "Box3" : box3.Box(),
+ "FlexBox" : flexbox.FlexBox(),
+ "FlexBox2" : flexbox2.FlexBox(),
+ "FlexBox3" : flexbox3.FlexBox(),
+ }
+
+ def arg2html(self, a):
+ if isinstance(a, argparse._HelpAction):
+ return ""
+ if isinstance(a, argparse._StoreTrueAction):
+ return """
%s | | %s |
\n""" % \
+ (a.dest, a.dest, a.default or "", a.help)
+
+ return """%s | | %s |
\n""" % \
+ (a.dest, a.dest, a.default or "", a.help)
+
+ def args2html(self, args, msg=""):
+ if msg:
+ msg = str(msg).replace("--", "")
+ msg = """\n%s
\n""" % msg
+
+ result = ["""Foo
+%s
+
+
+
+""")
+ return (s.encode("utf-8") for s in result)
+
+ def menu(self):
+ result = ["""
+Boxes for Laser Cutters
+
+Text
+
+""" ]
+ for name, box in self.boxes.items():
+ result.append(""" - %s
""" % (name, name))
+ result.append("""
+
+
+""")
+ return (s.encode("utf-8") for s in result)
+
+ def serve(self, environ, start_response):
+ status = '200 OK'
+ headers = [('Content-type', 'text/html; charset=utf-8')]
+ #headers = [('Content-type', 'text/plain; charset=utf-8')]
+ start_response(status, headers)
+
+ d = cgi.parse_qs(environ['QUERY_STRING'])
+ print(d)
+ print(environ["PATH_INFO"])
+ print(d)
+ from pprint import pprint
+ print(wsgiref.util.request_uri(environ), environ["QUERY_STRING"])
+ #pprint(environ)
+
+ box = self.boxes.get(environ["PATH_INFO"][1:], None)
+ if environ["REQUEST_METHOD"] == "GET":
+ if box:
+ return self.args2html(box.argparser)
+ else:
+ return self.menu()
+
+ elif environ["REQUEST_METHOD"] == "POST":
+ try:
+ length = int(environ.get('CONTENT_LENGTH', '0'))
+ except ValueError:
+ length = 0
+ body = environ['wsgi.input'].read(length).decode()
+ args = ["--"+arg for arg in body.split("&")]
+ try:
+ box.parseArgs(args)
+ except (ArgumentParserError) as e:
+ return self.args2html(box.argparser, e)
+ fd, box.output = tempfile.mkstemp()
+ box.render()
+ result = open(box.output).readlines()
+ os.remove(box.output)
+ os.close(fd)
+ return (l.encode("utf-8") for l in result)
+
+ return [b"???"]
+
+if __name__=="__main__":
+ boxserver = BServer()
+ #boxserver.args2html(boxserver.boxes["DemoBox"].argparser)
+ #sys.exit()
+ httpd = make_server('', 8000, boxserver.serve)
+ print("Serving on port 8000...")
+ httpd.serve_forever()