73 lines
3.9 KiB
Python
73 lines
3.9 KiB
Python
from flask import current_app
|
|
from flask_wtf import FlaskForm
|
|
from wtforms import (StringField, PasswordField, BooleanField, SubmitField, EmailField, IntegerField, DateField,
|
|
SelectField, SelectMultipleField, FieldList, FormField)
|
|
from wtforms.validators import DataRequired, Length, Email, NumberRange, Optional
|
|
from common.models.user import Role
|
|
|
|
|
|
class TenantForm(FlaskForm):
|
|
name = StringField('Name', validators=[DataRequired(), Length(max=80)])
|
|
website = StringField('Website', validators=[DataRequired(), Length(max=255)])
|
|
# language fields
|
|
default_language = SelectField('Default Language', choices=[], validators=[DataRequired()])
|
|
allowed_languages = SelectMultipleField('Allowed Languages', choices=[], validators=[DataRequired()])
|
|
# LLM fields
|
|
default_embedding_model = SelectField('Default Embedding Model', choices=[], validators=[DataRequired()])
|
|
allowed_embedding_models = SelectMultipleField('Allowed Embedding Models', choices=[], validators=[DataRequired()])
|
|
default_llm_model = SelectField('Default Large Language Model', choices=[], validators=[DataRequired()])
|
|
allowed_llm_models = SelectMultipleField('Allowed Large Language Models', choices=[], validators=[DataRequired()])
|
|
# license fields
|
|
license_start_date = DateField('License Start Date', id='form-control datepicker', validators=[Optional()])
|
|
license_end_date = DateField('License End Date', id='form-control datepicker', validators=[Optional()])
|
|
allowed_monthly_interactions = IntegerField('Allowed Monthly Interactions', validators=[NumberRange(min=0)])
|
|
submit = SubmitField('Submit')
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(TenantForm, self).__init__(*args, **kwargs)
|
|
# initialise language fields
|
|
self.default_language.choices = [(lang, lang.lower()) for lang in current_app.config['SUPPORTED_LANGUAGES']]
|
|
self.allowed_languages.choices = [(lang, lang.lower()) for lang in current_app.config['SUPPORTED_LANGUAGES']]
|
|
# initialise LLM fields
|
|
self.default_embedding_model.choices = [(model, model) for model in current_app.config['SUPPORTED_EMBEDDINGS']]
|
|
self.allowed_embedding_models.choices = [(model, model) for model in current_app.config['SUPPORTED_EMBEDDINGS']]
|
|
self.default_llm_model.choices = [(model, model) for model in current_app.config['SUPPORTED_LLMS']]
|
|
self.allowed_llm_models.choices = [(model, model) for model in current_app.config['SUPPORTED_LLMS']]
|
|
|
|
|
|
class BaseUserForm(FlaskForm):
|
|
user_name = StringField('Name', validators=[DataRequired(), Length(max=80)])
|
|
email = EmailField('Email', validators=[DataRequired(), Email()])
|
|
first_name = StringField('First Name', validators=[DataRequired(), Length(max=80)])
|
|
last_name = StringField('Last Name', validators=[DataRequired(), Length(max=80)])
|
|
is_active = BooleanField('Is Active', id='flexSwitchCheckDefault')
|
|
valid_to = DateField('Valid to', id='datepicker')
|
|
tenant_id = IntegerField('Tenant ID', validators=[NumberRange(min=0)])
|
|
roles = SelectMultipleField('Roles', coerce=int)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(BaseUserForm, self).__init__(*args, **kwargs)
|
|
self.roles.choices = [(role.id, role.name) for role in Role.query.all()]
|
|
|
|
|
|
class CreateUserForm(BaseUserForm):
|
|
password = PasswordField('Password', validators=[DataRequired(), Length(min=8)])
|
|
confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), Length(min=8)])
|
|
submit = SubmitField('Create User')
|
|
|
|
|
|
class EditUserForm(BaseUserForm):
|
|
submit = SubmitField('Save User')
|
|
|
|
|
|
class RoleForm(FlaskForm):
|
|
# This subform will represent a single checkbox for each role
|
|
role_id = StringField('Role ID')
|
|
checked = BooleanField('Assigned')
|
|
|
|
|
|
class UserRoleForm(FlaskForm):
|
|
email = EmailField('Email', validators=[DataRequired(), Email()])
|
|
roles = FieldList(FormField(RoleForm), min_entries=1)
|
|
submit = SubmitField('Update Roles')
|