79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
"""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",
|
|
) |