shortener/shortener/main.py

43 lines
1,006 B
Python

import os
from dns.name import from_text
from dns.resolver import LRUCache, Resolver
from flask import Flask, redirect
from shortener.exceptions import ApiException
from shortener.handlers import handle_expand, handle_shorten
BASE_DOMAIN = os.getenv("BASE_DOMAIN")
app = Flask(__name__)
resolver = Resolver()
resolver.search = [from_text(BASE_DOMAIN)]
resolver.cache = LRUCache()
@app.route("/")
def home():
return "<p>Welcome to the url shortener!</p>"
@app.route("/shorten/", methods=["POST"])
def shorten_url():
try:
return handle_shorten()
except ApiException as e:
return {"status": "error", "message": e.message}, e.code
@app.route("/<string:shortcode>/")
def expand_url(shortcode: str):
try:
redirect_url = handle_expand(shortcode, resolver)
except:
return "<p>URL not found</p>"
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)