Improvements to user views and forms + correction of schema creation for new tenants.

This commit is contained in:
Josako
2024-06-03 13:24:13 +02:00
parent fcc0caeb09
commit c660c35de4
5 changed files with 73 additions and 10 deletions

View File

@@ -27,8 +27,11 @@ class TenantForm(FlaskForm):
html_included_elements = StringField('HTML Included Elements', validators=[Optional()])
html_excluded_elements = StringField('HTML Excluded Elements', validators=[Optional()])
# Embedding Search variables
es_k = IntegerField('Limit for Searching Embeddings (5)', validators=[NumberRange(min=0)])
es_k = IntegerField('Limit for Searching Embeddings (5)',
default=5,
validators=[NumberRange(min=0)])
es_similarity_threshold = FloatField('Similarity Threshold for Searching Embeddings (0.5)',
default=0.5,
validators=[NumberRange(min=0, max=1)])
submit = SubmitField('Submit')

View File

@@ -12,7 +12,7 @@ from common.extensions import db, kms_client, security
from common.utils.security_utils import send_confirmation_email, send_reset_email
from .user_forms import TenantForm, CreateUserForm, EditUserForm, TenantDomainForm
from common.utils.database import Database
from common.utils.view_assistants import prepare_table_for_macro
from common.utils.view_assistants import prepare_table_for_macro, form_validation_failed
from common.utils.key_encryption import generate_api_key
from common.utils.nginx_utils import prefixed_url_for
@@ -43,6 +43,7 @@ def log_after_request(response):
def tenant():
form = TenantForm()
if form.validate_on_submit():
current_app.logger.debug('Creating new tenant')
# Handle the required attributes
new_tenant = Tenant(name=form.name.data,
website=form.website.data,
@@ -50,18 +51,23 @@ def tenant():
allowed_languages=form.allowed_languages.data,
embedding_model=form.embedding_model.data,
llm_model=form.llm_model.data,
licence_start_date=form.license_start_date.data,
lic_end_date=form.license_end_date.data,
license_start_date=form.license_start_date.data,
license_end_date=form.license_end_date.data,
allowed_monthly_interactions=form.allowed_monthly_interactions.data)
# Handle Embedding Variables
new_tenant.html_tags = form.html_tags.data.split(',') if form.html_tags.data else [],
new_tenant.html_end_tags = form.html_end_tags.data.split(',') if form.html_end_tags.data else [],
new_tenant.html_tags = form.html_tags.data.split(',') if form.html_tags.data else []
new_tenant.html_end_tags = form.html_end_tags.data.split(',') if form.html_end_tags.data else []
new_tenant.html_included_elements = form.html_included_elements.data.split(
',') if form.html_included_elements.data else [],
',') if form.html_included_elements.data else []
new_tenant.html_excluded_elements = form.html_excluded_elements.data.split(
',') if form.html_excluded_elements.data else []
current_app.logger.debug(f'html_tags: {new_tenant.html_tags},'
f'html_end_tags: {new_tenant.html_end_tags},'
f'html_included_elements: {new_tenant.html_included_elements},'
f'html_excluded_elements: {new_tenant.html_excluded_elements}')
# Handle Timestamps
timestamp = dt.now(tz.utc)
new_tenant.created_at = timestamp
@@ -82,6 +88,8 @@ def tenant():
current_app.logger.info(f"Creating schema for tenant {new_tenant.id}")
Database(new_tenant.id).create_tenant_schema()
return redirect(prefixed_url_for('basic_bp.index'))
else:
form_validation_failed(request, form)
return render_template('user/tenant.html', form=form)
@@ -104,7 +112,7 @@ def edit_tenant(tenant_id):
if tenant.html_excluded_elements:
form.html_excluded_elements.data = ', '.join(tenant.html_excluded_elements)
if request.method == 'POST' and form.validate_on_submit():
if form.validate_on_submit():
# Populate the tenant with form data
form.populate_obj(tenant)
# Then handle the special fields manually
@@ -121,6 +129,8 @@ def edit_tenant(tenant_id):
if session['tenant'].get('id') == tenant_id:
session['tenant'] = tenant.to_dict()
# return redirect(url_for(f"user/tenant/tenant_id"))
else:
form_validation_failed(request, form)
return render_template('user/edit_tenant.html', form=form, tenant_id=tenant_id)
@@ -176,6 +186,8 @@ def user():
current_app.logger.error(f'Failed to add user with name {new_user.user_name}. Error: {str(e)}')
db.session.rollback()
flash(f'Failed to add user. Email or user name already exists.', 'danger')
else:
form_validation_failed(request, form)
return render_template('user/user.html', form=form)
@@ -186,7 +198,7 @@ def edit_user(user_id):
user = User.query.get_or_404(user_id) # This will return a 404 if no user is found
form = EditUserForm(obj=user)
if request.method == 'POST' and form.validate_on_submit():
if form.validate_on_submit():
# Populate the user with form data
user.first_name = form.first_name.data
user.last_name = form.last_name.data
@@ -212,6 +224,8 @@ def edit_user(user_id):
return redirect(
prefixed_url_for('user_bp.edit_user',
user_id=user.id)) # Assuming there's a user profile view to redirect to
else:
form_validation_failed(request, form)
form.roles.data = [role.id for role in user.roles]
return render_template('user/edit_user.html', form=form, user_id=user_id)
@@ -349,6 +363,8 @@ def tenant_domain():
current_app.logger.error(f'Failed to create Tenant Domain {new_tenant_domain.domain}. '
f'for tenant {session["tenant"]["id"]}'
f'Error: {str(e)}')
else:
flash('Please fill in all required fields.')
return render_template('user/tenant_domain.html', form=form)
@@ -375,6 +391,8 @@ def edit_tenant_domain(tenant_domain_id):
return redirect(
prefixed_url_for('user_bp.view_tenant_domains',
tenant_id=session['tenant']['id'])) # Assuming there's a user profile view to redirect to
else:
form_validation_failed(request, form)
return render_template('user/edit_tenant_domain.html', form=form, tenant_domain_id=tenant_domain_id)