44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
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("/<string:shortcode>")
|
|
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)
|