65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
from flask import Blueprint, render_template, redirect, url_for
|
|
from flask_login import login_required, current_user
|
|
|
|
from amanuensis.config import json_ro, json_rw
|
|
from amanuensis.lexicon import LexiconModel
|
|
from amanuensis.lexicon.manage import create_lexicon, get_all_lexicons
|
|
from amanuensis.server.forms import LexiconCreateForm
|
|
from amanuensis.server.helpers import admin_required
|
|
from amanuensis.user import UserModel
|
|
|
|
|
|
def get_bp():
|
|
"""Create a blueprint for pages outside of a specific lexicon"""
|
|
bp = Blueprint('home', __name__, url_prefix='/home')
|
|
|
|
@bp.route('/', methods=['GET'])
|
|
def home():
|
|
user_lexicons = []
|
|
public_lexicons = []
|
|
for lexicon in get_all_lexicons():
|
|
if current_user.in_lexicon(lexicon):
|
|
user_lexicons.append(lexicon)
|
|
elif lexicon.join.public:
|
|
public_lexicons.append(lexicon)
|
|
return render_template(
|
|
'home/home.html',
|
|
user_lexicons=user_lexicons,
|
|
public_lexicons=public_lexicons)
|
|
|
|
@bp.route('/admin/', methods=['GET'])
|
|
@login_required
|
|
@admin_required
|
|
def admin():
|
|
users = []
|
|
with json_ro('user', 'index.json') as index:
|
|
for name, uid in index.items():
|
|
users.append(UserModel.by(uid=uid))
|
|
|
|
lexicons = []
|
|
with json_ro('lexicon', 'index.json') as index:
|
|
for name, lid in index.items():
|
|
lexicons.append(LexiconModel.by(lid=lid))
|
|
|
|
return render_template('home/admin.html', users=users, lexicons=lexicons)
|
|
|
|
@bp.route("/admin/create/", methods=['GET', 'POST'])
|
|
@login_required
|
|
@admin_required
|
|
def admin_create():
|
|
form = LexiconCreateForm()
|
|
|
|
if form.validate_on_submit():
|
|
lexicon_name = form.lexiconName.data
|
|
editor_name = form.editorName.data
|
|
prompt = form.promptText.data
|
|
editor = UserModel.by(name=editor_name)
|
|
lexicon = create_lexicon(lexicon_name, editor)
|
|
with json_rw(lexicon.config_path) as cfg:
|
|
cfg.prompt = prompt
|
|
return redirect(url_for('lexicon.session', name=lexicon_name))
|
|
|
|
return render_template('home/create.html', form=form)
|
|
|
|
return bp
|