"""Schedule configuration routes.""" from flask import Blueprint, flash, render_template, request from ..db import db from ..models import ScheduleConfig, VolumeConfig bp = Blueprint("schedule", __name__) @bp.route("/", methods=["GET", "POST"]) def schedule(): if request.method == "POST": try: # Check if we're updating volume or schedule if "total_volume" in request.form: # Volume update try: new_volume = float(request.form.get("total_volume", 0)) if new_volume <= 0 or new_volume > 1000: raise ValueError("Volume must be between 1 and 1000") volume_config = VolumeConfig.query.first() if not volume_config: volume_config = VolumeConfig(volume=new_volume) db.session.add(volume_config) else: volume_config.volume = new_volume db.session.commit() flash("Volume updated successfully!", "success") except ValueError as e: db.session.rollback() flash(f"Error updating volume: {str(e)}", "error") else: # Schedule update logic # Validate form data for hour in range(24): key = f"hour_{hour}" if key not in request.form: raise ValueError(f"Missing data for hour {hour}") try: weight = float(request.form.get(key, 0)) if weight < 0 or weight > 5: raise ValueError( f"Weight for hour {hour} must be between 0 and 5" ) except ValueError: raise ValueError(f"Invalid weight value for hour {hour}") # Update database if validation passes for hour in range(24): key = f"hour_{hour}" weight = float(request.form.get(key, 0)) config = ScheduleConfig.query.get(hour) if config: config.weight = weight else: db.session.add(ScheduleConfig(hour=hour, weight=weight)) db.session.commit() flash("Schedule updated successfully!", "success") except ValueError as e: db.session.rollback() flash(f"Error updating schedule: {str(e)}", "error") schedule = { sc.hour: sc.weight for sc in ScheduleConfig.query.order_by(ScheduleConfig.hour).all() } volume = VolumeConfig.query.first() return render_template( "schedule.html.jina", schedule=schedule, volume=volume.volume if volume else 0, app_title="PaperScraper", )