Code example, first pass.

This commit is contained in:
Elf M. Sternberg 2020-10-01 16:10:48 -07:00
parent 3ba2901a0b
commit 06cf147005
6 changed files with 104 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
.#*
*~
*#
*.aux
*.pyc

11
Pipfile Normal file
View File

@ -0,0 +1,11 @@
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[packages]
[dev-packages]
[requires]
python_version = "3.8"

20
Pipfile.lock generated Normal file
View File

@ -0,0 +1,20 @@
{
"_meta": {
"hash": {
"sha256": "e2a8a78582d100dc86a0694f5ad982ca341a6b861fd871c6306733562f9e16cc"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.8"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.python.org/simple",
"verify_ssl": true
}
]
},
"default": {},
"develop": {}
}

11
README.md Normal file
View File

@ -0,0 +1,11 @@
# TinyURL
## Getting started
```
git checkout <repository>
cd tinyurl
pipenv shell
python ./tinyurl.py
```

10
templates/error.html Normal file
View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Error {{code}}</title>
</head>
<body>
<h1>Error {{code}}</h1>
</body>
</html>

47
tinyurl.py Normal file
View File

@ -0,0 +1,47 @@
from flask import Flask, json, redirect, request, render_template, jsonify
import short_url
app = Flask(__name__)
found = {}
database = {}
@app.route('/', methods=['POST'])
def post_tinyurl():
body = request.get_json(silent=True, force=True)
if body is None or 'url' not in body:
return (render_template("error.html", code=400), 400)
url = body['url']
if url in found:
return jsonify({
'url': url,
'short_url_code': '/' + found[url]
})
counter = len(database) + 1
newurl = short_url.encode_url(counter)
database[newurl] = url
found[url] = newurl
return jsonify({
'url': url,
'short_url_code': '/' + newurl
})
@app.route('/<url>', methods=["GET"])
def get_tinyurl(url):
if url not in database:
return render_template('error.html', code=404), 404
return redirect(database[url], 301)
@ app.errorhandler(404)
def not_found(error):
return render_template('error.html', code=404), 404
if __name__ == '__main__':
app.run(debug=True)