shortener/shortener/main.py

44 lines
1.1 KiB
Python
Raw Normal View History

import os
2021-05-29 15:57:49 +02:00
from flask import Flask, redirect, render_template, request
2021-05-29 15:57:49 +02:00
from shortener.exceptions import ApiException, ShortCodeNotFoundException
from shortener.handlers import handle_shorten
from shortener.resolver import resolver
app = Flask(__name__)
@app.route("/")
def home():
2021-05-29 15:57:49 +02:00
return render_template("welcome.html")
2021-05-29 15:57:49 +02:00
@app.route("/shorten", methods=["POST"])
def shorten_url():
try:
2021-05-29 15:57:49 +02:00
result = handle_shorten()
code = 200
except ApiException as e:
2021-05-29 15:57:49 +02:00
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
2021-05-29 15:57:49 +02:00
@app.route("/<string:shortcode>")
def expand_url(shortcode: str):
try:
2021-05-29 15:57:49 +02:00
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)