from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify from flask_login import login_required, current_user from extensions import db, environment, htmx from jinja2_fragments import render_block import json community = Blueprint('community', __name__) @community.route("/", methods=["GET"]) @login_required def index(): search_query = request.args.get("q", "") public_functions = db.get_public_http_functions(search_query) if htmx: return render_block( environment, "community/index.html", "page", public_functions=public_functions, search_query=search_query ) return render_template("community/index.html", public_functions=public_functions, search_query=search_query) @community.route("/", methods=["GET"]) @login_required def view(function_id): function = db.get_public_http_function_by_id(function_id) if not function: flash("Function not found or not public", "error") return redirect(url_for("community.index")) # Format environment info for display if function.get('environment_info'): function['environment_info'] = json.dumps(function['environment_info'], indent=2) if htmx: return render_block(environment, "community/view.html", "page", function=function) return render_template("community/view.html", function=function) @community.route("/fork/", methods=["POST"]) @login_required def fork(function_id): try: user_id = current_user.id new_name = db.fork_http_function(user_id, function_id) flash(f"Function forked as '{new_name}'", "success") return jsonify({"status": "success", "redirect": url_for("http.overview")}) except Exception as e: return jsonify({"status": "error", "message": str(e)}), 400