-
Notifications
You must be signed in to change notification settings - Fork 2
/
app.py
executable file
·72 lines (50 loc) · 1.93 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"""Flask web application interface to meme generation."""
import random
import os
import tempfile
from itertools import chain
import requests
from PIL import Image
from flask import Flask, render_template, abort, request
import quoteengine
from memeengine.meme_generator import MemeGenerator
from quoteengine.ingestors import Ingestor
app = Flask(__name__)
meme = MemeGenerator('./static')
def setup():
"""Load all resources."""
quote_files = ['./_data/DogQuotes/DogQuotesTXT.txt',
'./_data/DogQuotes/DogQuotesDOCX.docx',
'./_data/DogQuotes/DogQuotesPDF.pdf',
'./_data/DogQuotes/DogQuotesCSV.csv']
quotes = list(chain(*[Ingestor.parse(f) for f in quote_files]))
images_path = "./_data/photos/dog/"
imgs = [f"{images_path}/{f}" for f in os.listdir(images_path) if f.endswith(".jpg")]
return quotes, imgs
quotes, imgs = setup()
@app.route('/')
def meme_rand():
"""Generate a random meme."""
img = random.choice(imgs)
quote = random.choice(quotes)
path = meme.make_meme(img, quote.body, quote.author)
return render_template('meme.html', path=path)
@app.route('/create', methods=['GET'])
def meme_form():
"""User input for meme information."""
return render_template('meme_form.html')
@app.route('/create', methods=['POST'])
def meme_post():
"""Create a user defined meme."""
r = requests.get(request.form['image_url'], allow_redirects=True, stream=True)
tmp_file = tempfile.NamedTemporaryFile(prefix='meme-gen-web-dl-', suffix='.jpg', delete=False).name
try:
Image.open(r.raw).save(tmp_file)
except OSError:
print(f"cannot convert file to jpg")
quote = quoteengine.QuoteModel(body=request.form['body'], author=request.form['author'])
path = meme.make_meme(tmp_file, quote.body, quote.author)
os.unlink(tmp_file)
return render_template('meme.html', path=path)
if __name__ == "__main__":
app.run()