|
|
@@ -1,9 +1,22 @@
|
|
|
-from flask import Flask, render_template, make_response
|
|
|
+from flask import Flask, render_template, make_response, request
|
|
|
from bookworm import s3, constants
|
|
|
+import pg_simple
|
|
|
+import json
|
|
|
+import redis
|
|
|
|
|
|
s3client = s3.client()
|
|
|
app = Flask(__name__)
|
|
|
|
|
|
+@app.route('/books/status', methods=['GET'])
|
|
|
+def status_books():
|
|
|
+ keys = r.keys('book_*')
|
|
|
+ ret = {}
|
|
|
+ for key in keys:
|
|
|
+ val = r.hgetall(key)
|
|
|
+ ret[key] = val
|
|
|
+ print(ret)
|
|
|
+ return json.dumps(ret)
|
|
|
+
|
|
|
@app.route('/')
|
|
|
def index():
|
|
|
objects = s3client.list_objects_v2(Bucket=constants.PROCESSED_FILE_BUCKET)['Contents']
|
|
|
@@ -11,7 +24,7 @@ def index():
|
|
|
books = [obj['Key'] for obj in objects]
|
|
|
return render_template('kindle-index.j2', books=books)
|
|
|
|
|
|
-@app.route('/books/<path:book>')
|
|
|
+@app.route('/book/<path:book>')
|
|
|
def serve_books(book):
|
|
|
obj = s3client.get_object(Bucket=constants.PROCESSED_FILE_BUCKET, Key=book)
|
|
|
data = obj['Body'].read()
|
|
|
@@ -20,5 +33,27 @@ def serve_books(book):
|
|
|
response.headers.set('Content-Length', len(data))
|
|
|
return response
|
|
|
|
|
|
+@app.route('/book/search', methods=['GET'])
|
|
|
+def search_books():
|
|
|
+ terms = request.args.get('terms').split()
|
|
|
+ terms = [f'%{term}%' for term in terms]
|
|
|
+
|
|
|
+ books = db.fetchall('books',
|
|
|
+ fields=['bot', 'book'],
|
|
|
+ where=('lower(book) like all(%s)', [terms]),
|
|
|
+ limit=100)
|
|
|
+ return json.dumps([b._asdict() for b in books])
|
|
|
+
|
|
|
+@app.route('/book/fetch', methods=['POST'])
|
|
|
+def fetch_books():
|
|
|
+ fetch = request.json
|
|
|
+ print(fetch)
|
|
|
+ r.rpush(constants.REDIS_BOOK_COMMANDS, json.dumps({'bot': fetch['bot'], 'book': fetch['book']}))
|
|
|
+ return ''
|
|
|
+
|
|
|
+
|
|
|
if __name__ == '__main__':
|
|
|
- app.run()
|
|
|
+ pool = pg_simple.config_pool(dsn='dbname=david user=david')
|
|
|
+ db = pg_simple.PgSimple(pool)
|
|
|
+ r = redis.StrictRedis(host='localhost', port=6379, decode_responses=True)
|
|
|
+ app.run(host='0.0.0.0', debug=True)
|