first try at web editor

workspace
Brendan Howell 4 years ago
parent c2addd9cbd
commit 41febd1038

@ -3,11 +3,13 @@ import os
import signal import signal
import socket import socket
import subprocess import subprocess
import threading
import kode256 import kode256
from lxml import etree from lxml import etree
from bureau import Bureau, add_command, add_api from bureau import Bureau, add_command, add_api
import ihrweb
class InhumanResources(Bureau): class InhumanResources(Bureau):
@ -24,6 +26,11 @@ class InhumanResources(Bureau):
def __init__(self): def __init__(self):
Bureau.__init__(self) Bureau.__init__(self)
self.menu = {} self.menu = {}
self.webapp = ihrweb.IhrApp()
webargs = { "host": "0.0.0.0", "port": 8000 }
self.webthread = threading.Thread(target=self.webapp.run,
kwargs=webargs, daemon=True)
self.webthread.start()
# update_commands(self) # update_commands(self)
@add_api("addbureau", "Register Bureau") @add_api("addbureau", "Register Bureau")
@ -40,6 +47,7 @@ class InhumanResources(Bureau):
name = data["name"] name = data["name"]
prefix = data["prefix"] prefix = data["prefix"]
desc = data["desc"] desc = data["desc"]
self.webapp.register_bureau(prefix)
except KeyError as e: except KeyError as e:
print("cannot add invalid bureau:", str(e)) print("cannot add invalid bureau:", str(e))
return str(e) return str(e)

@ -0,0 +1,60 @@
# this is a web interface for simple edits to configuration or editing data
# for particular bureaus
import configparser
import os
from bottle import Bottle, request
class IhrApp(Bottle):
def __init__(self):
super(IhrApp, self).__init__()
self.name = "IHR App"
self.route("/", callback=self.index)
self.route("/config/<bureau>", callback=self.config)
self.route("/config/<bureau>", callback=self.config, method="POST")
self.bureaus = []
def index(self):
# return a list of active bureaus with links
# TODO: allow (de)activation of non-essential bureaus
out = """
<h3>The Screenless Office</h3>
<h4><em>Config Manager</em></h4>
<ul>
"""
for bureau in self.bureaus:
out += '<li><a href="/config/"' + bureau + '"></li>\n'
out += "</ul>"
return out
def config(self, bureau):
# parse the config and make it into a form
out = "<h3>config file for " + bureau + "</h3>\n"
basedir = os.path.expanduser("~/.screenless")
if bureau == "mgmt":
cfgfile = "mgmt.ini"
elif bureau == "printers":
cfgfile = printers.cfg
else:
cfgfile = bureau + ".yml"
cfgfile = os.path.join(basedir, cfgfile)
if request.method == "POST":
#save all the request.forms stuff to the config
# tell the bureau to restart / reload
# set our message to be "updated config"
print("NOT saving updated ", cfgfile)
pass
#parse and show the config as a form
with open(cfgfile) as cfg:
out += cfg.read()
return out
def register_bureau(self, bureau):
self.bureaus.append(bureau)
def register_crud(self, data):
# adds callbacks for crud operations on a database
pass
Loading…
Cancel
Save