2022-06-12 21:03:51 +01:00
|
|
|
|
2022-06-19 13:22:24 +01:00
|
|
|
from ..extensions import db
|
2022-08-20 10:56:43 +01:00
|
|
|
from ..tools.logs import write
|
2022-06-12 21:03:51 +01:00
|
|
|
|
2022-06-20 11:27:05 +01:00
|
|
|
from flask import jsonify
|
2022-08-20 10:56:43 +01:00
|
|
|
from sqlalchemy.exc import SQLAlchemyError
|
2022-06-12 21:03:51 +01:00
|
|
|
from wtforms.validators import ValidationError
|
|
|
|
|
|
|
|
import json
|
|
|
|
from sqlalchemy.ext import mutable
|
|
|
|
|
|
|
|
class JsonEncodedDict(db.TypeDecorator):
|
|
|
|
"""Enables JSON storage by encoding and decoding on the fly."""
|
|
|
|
impl = db.Text
|
|
|
|
|
|
|
|
def process_bind_param(self, value, dialect):
|
|
|
|
if value is None:
|
|
|
|
return '{}'
|
|
|
|
else:
|
|
|
|
return json.dumps(value)
|
|
|
|
|
|
|
|
def process_result_value(self, value, dialect):
|
|
|
|
if value is None:
|
|
|
|
return {}
|
|
|
|
else:
|
|
|
|
return json.loads(value)
|
|
|
|
|
|
|
|
mutable.MutableDict.associate_with(JsonEncodedDict)
|
|
|
|
|
|
|
|
def value(min:int=0, max:int=None):
|
|
|
|
if not max:
|
|
|
|
message = f'Value must be greater than {min}.'
|
|
|
|
else:
|
|
|
|
message = f'Value must be between {min} and {max}.'
|
|
|
|
def length(form, field):
|
|
|
|
value = field.data or 0
|
|
|
|
if value < min or max != None and value > max:
|
|
|
|
raise ValidationError(message)
|
2022-06-14 22:55:11 +01:00
|
|
|
return length
|
|
|
|
|
|
|
|
def get_time_options():
|
|
|
|
time_options = [
|
|
|
|
('none', 'None'),
|
|
|
|
('60', '1 hour'),
|
|
|
|
('90', '1 hour 30 minutes'),
|
|
|
|
('120', '2 hours')
|
|
|
|
]
|
2022-06-15 11:23:38 +01:00
|
|
|
return time_options
|
|
|
|
|
|
|
|
def get_dataset_choices():
|
2022-06-15 23:54:44 +01:00
|
|
|
from ..models import Dataset
|
2022-08-20 10:56:43 +01:00
|
|
|
try: datasets = Dataset.query.all()
|
|
|
|
except SQLAlchemyError as exception:
|
|
|
|
write('system.log', f'Database error when fetching dataset lists: {exception}')
|
|
|
|
return []
|
2022-06-15 11:23:38 +01:00
|
|
|
dataset_choices = []
|
|
|
|
for dataset in datasets:
|
2022-06-22 01:56:13 +01:00
|
|
|
label = dataset.get_name()
|
2022-06-15 11:23:38 +01:00
|
|
|
label = f'{label} (Default)' if dataset.default else label
|
2022-06-15 23:54:44 +01:00
|
|
|
choice = (dataset.id, label)
|
2022-06-15 11:23:38 +01:00
|
|
|
dataset_choices.append(choice)
|
2022-06-20 11:27:05 +01:00
|
|
|
return dataset_choices
|
|
|
|
|
|
|
|
def send_errors_to_client(form):
|
2022-08-11 16:58:00 +01:00
|
|
|
errors = [*form.errors.values()]
|
2022-06-20 11:27:05 +01:00
|
|
|
return jsonify({ 'error': errors}), 400
|