import os from flask import Flask, redirect, render_template, request from shortener.exceptions import ApiException, ShortCodeNotFoundException from shortener.handlers import handle_shorten from shortener.resolver import resolver app = Flask(__name__) @app.route("/") def home(): return render_template("welcome.html") @app.route("/shorten", methods=["POST"]) def shorten_url(): try: result = handle_shorten() code = 200 except ApiException as e: result = {"message": e.message, "status": "error"} code = e.code is_api = bool(request.json) if is_api: return result, code return render_template("result.html", **result), code @app.route("/") def expand_url(shortcode: str): try: redirect_url = resolver.resolve_shortcode(shortcode) except ShortCodeNotFoundException: return render_template("not_found.html") return redirect(redirect_url, code=302) if __name__ == "__main__": port = int(os.environ.get("PORT", 5000)) app.run(host="0.0.0.0", port=port)