FitTrackee/fittrackee/application/utils.py

66 lines
1.8 KiB
Python

from typing import Dict, List
from flask import Flask
from fittrackee import db
from .models import AppConfig
MAX_FILE_SIZE = 1 * 1024 * 1024 # 1MB
def get_or_init_config() -> AppConfig:
"""
Init application configuration.
"""
existing_config = AppConfig.query.one_or_none()
if existing_config:
return existing_config
config = AppConfig()
config.max_users = 0 # no limitation
config.max_single_file_size = MAX_FILE_SIZE
config.max_zip_file_size = MAX_FILE_SIZE * 10
db.session.add(config)
db.session.commit()
return config
def update_app_config_from_database(
current_app: Flask, db_config: AppConfig
) -> None:
current_app.config['gpx_limit_import'] = db_config.gpx_limit_import
current_app.config['max_single_file_size'] = db_config.max_single_file_size
current_app.config['MAX_CONTENT_LENGTH'] = db_config.max_zip_file_size
current_app.config['max_users'] = db_config.max_users
current_app.config[
'is_registration_enabled'
] = db_config.is_registration_enabled
current_app.config['privacy_policy_date'] = db_config.privacy_policy_date
def verify_app_config(config_data: Dict) -> List:
"""
Verify if application config is valid.
If not, it returns not empty string
"""
ret = []
if (
'gpx_limit_import' in config_data
and config_data['gpx_limit_import'] <= 0
):
ret.append('Max. files in a zip archive must be greater than 0')
if (
'max_single_file_size' in config_data
and config_data['max_single_file_size'] <= 0
):
ret.append('Max. size of uploaded files must be greater than 0')
if (
'max_zip_file_size' in config_data
and config_data['max_zip_file_size'] <= 0
):
ret.append('Max. size of zip archive must be greater than 0')
return ret