Add lexicon create page shell
This commit is contained in:
parent
aaac4b6568
commit
6f326f91bd
|
@ -0,0 +1,49 @@
|
|||
from flask_wtf import FlaskForm
|
||||
from wtforms import StringField, PasswordField, BooleanField, SubmitField, TextAreaField
|
||||
from wtforms.validators import DataRequired, ValidationError
|
||||
|
||||
from amanuensis.config import json_ro
|
||||
|
||||
|
||||
# Custom validators
|
||||
def user(exists=True):
|
||||
template = 'User "{{}}" {}'.format("not found" if exists else "already exists")
|
||||
should_exist = bool(exists)
|
||||
def validate_user(form, field):
|
||||
with json_ro('user', 'index.json') as index:
|
||||
if (field.data in index.keys()) != should_exist:
|
||||
raise ValidationError(template.format(field.data))
|
||||
return validate_user
|
||||
|
||||
|
||||
def lexicon(exists=True):
|
||||
template = 'Lexicon "{{}}" {}'.format("not found" if exists else "already exists")
|
||||
should_exist = bool(exists)
|
||||
def validate_lexicon(form, field):
|
||||
with json_ro('lexicon', 'index.json') as index:
|
||||
if (field.data in index.keys()) != should_exist:
|
||||
raise ValidationError(template.format(field.data))
|
||||
return validate_lexicon
|
||||
|
||||
|
||||
# Forms
|
||||
class LoginForm(FlaskForm):
|
||||
"""/auth/login/"""
|
||||
username = StringField('Username', validators=[DataRequired()])
|
||||
password = PasswordField('Password', validators=[DataRequired()])
|
||||
remember = BooleanField('Stay logged in')
|
||||
submit = SubmitField('Log in')
|
||||
|
||||
|
||||
class LexiconCreateForm(FlaskForm):
|
||||
"""/admin/create/"""
|
||||
lexiconName = StringField('Lexicon name', validators=[DataRequired(), lexicon(exists=False)])
|
||||
editorName = StringField('Username of editor', validators=[DataRequired(), user(exists=True)])
|
||||
promptText = TextAreaField("Prompt")
|
||||
submit = SubmitField('Create')
|
||||
|
||||
|
||||
class LexiconConfigForm(FlaskForm):
|
||||
"""/lexicon/<name>/session/settings/"""
|
||||
configText = TextAreaField("Config file")
|
||||
submit = SubmitField("Submit")
|
|
@ -8,6 +8,7 @@ from wtforms import TextAreaField, SubmitField, StringField
|
|||
|
||||
from amanuensis.config import json_ro
|
||||
from amanuensis.lexicon import LexiconModel
|
||||
from amanuensis.server.forms import LexiconCreateForm
|
||||
from amanuensis.server.helpers import admin_required
|
||||
from amanuensis.user import UserModel
|
||||
|
||||
|
@ -20,7 +21,7 @@ def get_bp():
|
|||
def home():
|
||||
return render_template('home/home.html')
|
||||
|
||||
@bp.route('/admin/', methods=['GET', 'POST'])
|
||||
@bp.route('/admin/', methods=['GET'])
|
||||
@admin_required
|
||||
def admin():
|
||||
users = []
|
||||
|
@ -35,4 +36,17 @@ def get_bp():
|
|||
|
||||
return render_template('home/admin.html', users=users, lexicons=lexicons)
|
||||
|
||||
@bp.route("/admin/create/", methods=['GET', 'POST'])
|
||||
@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
|
||||
return "<br>".join([lexicon_name, editor_name, prompt])
|
||||
|
||||
return render_template('home/create.html', form=form)
|
||||
|
||||
return bp
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
{% block header %}<h2>Amanuensis - Admin Dashboard</h2>{% endblock %}
|
||||
|
||||
{% block sb_home %}<a href="{{ url_for('home.home') }}">Home</a>{% endblock %}
|
||||
{% set template_sidebar_rows = [self.sb_home()] %}
|
||||
{% block sb_create %}<a href="{{ url_for('home.admin_create') }}">Create a lexicon</a>{% endblock %}
|
||||
{% set template_sidebar_rows = [self.sb_home(), self.sb_create()] %}
|
||||
|
||||
{% block main %}
|
||||
<p>Users:</p>
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
{% extends "page_2col.html" %}
|
||||
{% import 'macros.html' as macros %}
|
||||
{% block title %}Admin | Amanuensis{% endblock %}
|
||||
{% block header %}<h2>Amanuensis - Create a Lexicon</h2>{% endblock %}
|
||||
|
||||
{% block sb_home %}<a href="{{ url_for('home.home') }}">Home</a>{% endblock %}
|
||||
{% block sb_admin %}<a href="{{ url_for('home.admin') }}">Admin</a>{% endblock %}
|
||||
{% set template_sidebar_rows = [self.sb_home(), self.sb_admin()] %}
|
||||
|
||||
{% block main %}
|
||||
<form action="" method="post" novalidate>
|
||||
{{ form.hidden_tag() }}
|
||||
<p>{{ form.lexiconName.label }}<br>{{ form.lexiconName(size=32) }}
|
||||
{% for error in form.lexiconName.errors %}
|
||||
<br><span style="color: #ff0000">{{ error }}</span>
|
||||
{% endfor %}</p>
|
||||
|
||||
<p>{{ form.editorName.label }}<br>{{ form.editorName(size=32) }}
|
||||
{% for error in form.editorName.errors %}
|
||||
<br><span style="color: #ff0000">{{ error }}</span>
|
||||
{% endfor %}</p>
|
||||
|
||||
<p>{{ form.promptText.label }}<br>{{ form.promptText(class_="fullwidth") }}</p>
|
||||
|
||||
<p>{{ form.submit() }}</p>
|
||||
</form>
|
||||
{% for message in get_flashed_messages() %}
|
||||
<span style="color: #ff0000">{{ message }}</span><br>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
{% set template_content_blocks = [self.main()] %}
|
Loading…
Reference in New Issue