basic dynamic menu generation
This commit is contained in:
parent
48f5f347b1
commit
0dac14d7e1
2
.gitignore
vendored
2
.gitignore
vendored
@ -18,4 +18,4 @@
|
|||||||
.*.swp
|
.*.swp
|
||||||
.editix
|
.editix
|
||||||
__pycache__/
|
__pycache__/
|
||||||
test.py
|
*.sqlite3
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
from flask import Flask
|
||||||
|
from . import db
|
||||||
|
|
||||||
|
app = Flask(__name__, instance_relative_config = True)
|
||||||
|
|
||||||
|
from app import views
|
||||||
|
|
||||||
|
app.config.from_object('config')
|
23
app/db.py
Normal file
23
app/db.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import os
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
db_path = '/usr/local/lib/bootbox/local.sqlite3'
|
||||||
|
|
||||||
|
class LocalDB(object):
|
||||||
|
def __init__(self, db_path = db_path):
|
||||||
|
self.db_path = db_path
|
||||||
|
self.conn = sqlite3.connect(self.db_path)
|
||||||
|
self.conn.row_factory = sqlite3.Row
|
||||||
|
self.cur = self.conn.cursor()
|
||||||
|
|
||||||
|
def getMenu(self, menu):
|
||||||
|
result = []
|
||||||
|
self.cur.execute('SELECT * FROM {0}'.format(menu))
|
||||||
|
for row in self.cur.fetchall():
|
||||||
|
result.append(dict(row))
|
||||||
|
return(result)
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
self.cur.close()
|
||||||
|
self.conn.close()
|
||||||
|
return()
|
6
app/templates/formatting.ipxe.j2
Normal file
6
app/templates/formatting.ipxe.j2
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#!ipxe
|
||||||
|
|
||||||
|
console --picture {{ request.url_root }}ipxe/bg.png --left 32 --right 32 --top 32 --bottom 48
|
||||||
|
|
||||||
|
{% block menu %}
|
||||||
|
{% endblock %}
|
21
app/templates/main.ipxe.j2
Normal file
21
app/templates/main.ipxe.j2
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{% extends 'formatting.ipxe.j2' %}
|
||||||
|
{% block menu%}
|
||||||
|
dhcp
|
||||||
|
echo MAIN MENU
|
||||||
|
|
||||||
|
cpuid --ext 29 && set bits 64 || set bits 32
|
||||||
|
cpuid --ext 29 && set arch x86_64 || set arch x86
|
||||||
|
|
||||||
|
:main
|
||||||
|
menu BootBox @ {{ request.url_root }}
|
||||||
|
{% for mt in ('install', 'utilities') %}
|
||||||
|
item --gap -- == {{ mt.upper() }} ==
|
||||||
|
{% for os in db.getMenu(mt) %}
|
||||||
|
item --key {{ os['shortcut'] }} {{ os['name'] }} ({{ os['shortcut'] }}) {{ os['desc'] }}
|
||||||
|
{%- endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
shell
|
||||||
|
{% endblock %}
|
35
app/views.py
35
app/views.py
@ -0,0 +1,35 @@
|
|||||||
|
import os
|
||||||
|
import pprint
|
||||||
|
import re
|
||||||
|
##
|
||||||
|
from flask import render_template, make_response, request, Response
|
||||||
|
from flask_autoindex import AutoIndex
|
||||||
|
##
|
||||||
|
from app import db
|
||||||
|
from app import app
|
||||||
|
|
||||||
|
ua_re = re.compile(r'^iPXE/v[0-9.]+')
|
||||||
|
|
||||||
|
|
||||||
|
def getReqInfo():
|
||||||
|
d = {}
|
||||||
|
for a in dir(request):
|
||||||
|
if a.startswith('_'):
|
||||||
|
continue
|
||||||
|
d[a] = getattr(request, a)
|
||||||
|
return(d)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/', methods = ['GET'])
|
||||||
|
def index():
|
||||||
|
DB = db.LocalDB()
|
||||||
|
result = render_template('main.ipxe.j2',
|
||||||
|
db = DB)
|
||||||
|
DB.close()
|
||||||
|
return(result)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/foo', methods = ['GET'])
|
||||||
|
def foo():
|
||||||
|
pprint.pprint(getReqInfo())
|
||||||
|
return(Response())
|
Loading…
Reference in New Issue
Block a user