Initial commit
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
from flask import Blueprint, flash, redirect, render_template, request, url_for
|
||||
from flask_login import login_required
|
||||
|
||||
from app.extensions import db
|
||||
from app.guides import GUIDES
|
||||
from app.models import Mirror, Profile, ProfileItem, TestResult
|
||||
from app.services.tester import test_all_enabled, test_mirror
|
||||
|
||||
mirrors_bp = Blueprint("mirrors", __name__, url_prefix="/mirrors")
|
||||
|
||||
|
||||
@mirrors_bp.route("/")
|
||||
@login_required
|
||||
def list_mirrors():
|
||||
category = request.args.get("category")
|
||||
query = Mirror.query.order_by(Mirror.category, Mirror.priority)
|
||||
if category:
|
||||
query = query.filter_by(category=category)
|
||||
mirrors = query.all()
|
||||
categories = Mirror.CATEGORIES
|
||||
return render_template(
|
||||
"mirrors/list.html",
|
||||
mirrors=mirrors,
|
||||
categories=categories,
|
||||
category_labels=Mirror.CATEGORY_LABELS,
|
||||
current_category=category,
|
||||
guides=GUIDES,
|
||||
)
|
||||
|
||||
|
||||
@mirrors_bp.route("/create", methods=["GET", "POST"])
|
||||
@login_required
|
||||
def create():
|
||||
if request.method == "POST":
|
||||
mirror = Mirror(
|
||||
category=request.form["category"],
|
||||
name=request.form["name"].strip(),
|
||||
url=request.form.get("url", "").strip() or None,
|
||||
ips=request.form.get("ips", "").strip() or None,
|
||||
priority=int(request.form.get("priority", 100)),
|
||||
enabled=request.form.get("enabled") == "on",
|
||||
notes=request.form.get("notes", "").strip() or None,
|
||||
)
|
||||
meta_prefix = request.form.get("instead_prefix", "").strip()
|
||||
if meta_prefix:
|
||||
mirror.set_meta({"instead_prefix": meta_prefix})
|
||||
db.session.add(mirror)
|
||||
db.session.commit()
|
||||
flash("میرور با موفقیت ایجاد شد.", "success")
|
||||
return redirect(url_for("mirrors.list_mirrors"))
|
||||
|
||||
return render_template(
|
||||
"mirrors/form.html",
|
||||
mirror=None,
|
||||
categories=Mirror.CATEGORIES,
|
||||
category_labels=Mirror.CATEGORY_LABELS,
|
||||
)
|
||||
|
||||
|
||||
@mirrors_bp.route("/<int:mirror_id>/edit", methods=["GET", "POST"])
|
||||
@login_required
|
||||
def edit(mirror_id):
|
||||
mirror = Mirror.query.get_or_404(mirror_id)
|
||||
if request.method == "POST":
|
||||
mirror.category = request.form["category"]
|
||||
mirror.name = request.form["name"].strip()
|
||||
mirror.url = request.form.get("url", "").strip() or None
|
||||
mirror.ips = request.form.get("ips", "").strip() or None
|
||||
mirror.priority = int(request.form.get("priority", 100))
|
||||
mirror.enabled = request.form.get("enabled") == "on"
|
||||
mirror.notes = request.form.get("notes", "").strip() or None
|
||||
meta_prefix = request.form.get("instead_prefix", "").strip()
|
||||
if meta_prefix:
|
||||
mirror.set_meta({"instead_prefix": meta_prefix})
|
||||
db.session.commit()
|
||||
flash("میرور بهروزرسانی شد.", "success")
|
||||
return redirect(url_for("mirrors.list_mirrors"))
|
||||
|
||||
return render_template(
|
||||
"mirrors/form.html",
|
||||
mirror=mirror,
|
||||
categories=Mirror.CATEGORIES,
|
||||
category_labels=Mirror.CATEGORY_LABELS,
|
||||
)
|
||||
|
||||
|
||||
@mirrors_bp.route("/<int:mirror_id>/delete", methods=["POST"])
|
||||
@login_required
|
||||
def delete(mirror_id):
|
||||
mirror = Mirror.query.get_or_404(mirror_id)
|
||||
db.session.delete(mirror)
|
||||
db.session.commit()
|
||||
flash("میرور حذف شد.", "warning")
|
||||
return redirect(url_for("mirrors.list_mirrors"))
|
||||
|
||||
|
||||
@mirrors_bp.route("/<int:mirror_id>/test", methods=["POST"])
|
||||
@login_required
|
||||
def test_one(mirror_id):
|
||||
mirror = Mirror.query.get_or_404(mirror_id)
|
||||
results = test_mirror(mirror)
|
||||
ok = all(r.success for r in results)
|
||||
flash(
|
||||
f"تست {mirror.name}: {'موفق' if ok else 'ناموفق'}",
|
||||
"success" if ok else "danger",
|
||||
)
|
||||
return redirect(url_for("mirrors.list_mirrors", category=mirror.category))
|
||||
|
||||
|
||||
@mirrors_bp.route("/test-all", methods=["POST"])
|
||||
@login_required
|
||||
def test_all():
|
||||
category = request.form.get("category") or None
|
||||
test_all_enabled(category)
|
||||
flash("تست همه میرورها انجام شد.", "info")
|
||||
return redirect(url_for("mirrors.list_mirrors", category=category))
|
||||
|
||||
|
||||
@mirrors_bp.route("/results")
|
||||
@login_required
|
||||
def results():
|
||||
category = request.args.get("category")
|
||||
query = TestResult.query.join(Mirror).order_by(TestResult.tested_at.desc())
|
||||
if category:
|
||||
query = query.filter(Mirror.category == category)
|
||||
results_list = query.limit(100).all()
|
||||
return render_template(
|
||||
"mirrors/results.html",
|
||||
results=results_list,
|
||||
category_labels=Mirror.CATEGORY_LABELS,
|
||||
current_category=category,
|
||||
categories=Mirror.CATEGORIES,
|
||||
)
|
||||
Reference in New Issue
Block a user