shortener/shortener/main.py

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)