1
0
mirror of https://github.com/alvierahman90/mobile-chemguide.git synced 2024-10-22 12:31:52 +00:00

closes #1 cache pages when retrieved

This commit is contained in:
Akbar Rahman 2021-05-20 09:26:53 +01:00
parent d99e8589fd
commit 1cea4a7b1c
4 changed files with 48 additions and 5 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
__pycache__
env

11
docker-compose.py Normal file
View File

@ -0,0 +1,11 @@
version: '3'
services:
web:
build: .
ports:
- '80:80'
db:
image: redis:latest
volumes:
- ./:/data

View File

@ -7,6 +7,7 @@ idna==2.10
itsdangerous==1.1.0 itsdangerous==1.1.0
Jinja2==2.11.3 Jinja2==2.11.3
MarkupSafe==1.1.1 MarkupSafe==1.1.1
redis==3.5.3
requests==2.25.1 requests==2.25.1
urllib3==1.26.4 urllib3==1.26.4
Werkzeug==1.0.1 Werkzeug==1.0.1

View File

@ -1,16 +1,28 @@
from flask import Flask from flask import Flask
import requests import requests
import re import re
import redis
import time
app = Flask(__name__) app = Flask(__name__)
CHEMGUIDE_BASE="https://chemguide.co.uk/" CHEMGUIDE_BASE="https://chemguide.co.uk/"
PAGE_CACHE_DURATION = 3600 # cache pages for an hour before retrieving again
db = redis.Redis(host='db', port=6379, db=0)
@app.route('/') class PathKeyType():
@app.route('/<path:path>') Data = 1
def path(path='/'): Date = 2
def pathkey(path, type):
if type == PathKeyType.Data:
return f"{path}:data"
elif type == PathKeyType.Date:
return f"{path}:date"
def set_cache(path):
r = requests.get(CHEMGUIDE_BASE + '/' + path) r = requests.get(CHEMGUIDE_BASE + '/' + path)
try: try:
return re.sub( data = re.sub(
r'<table .* width="480"', r'<table .* width="480"',
'<table style="max-width: 60em; margin: 0 auto; font-size: 16px;"', '<table style="max-width: 60em; margin: 0 auto; font-size: 16px;"',
re.sub( re.sub(
@ -41,7 +53,24 @@ def path(path='/'):
) )
) )
except UnicodeDecodeError: except UnicodeDecodeError:
return r.content data = r.content
db.set(pathkey(path, PathKeyType.Data), data)
db.set(pathkey(path, PathKeyType.Date), time.time())
def get_page(path):
date = db.get(pathkey(path, PathKeyType.Date))
if date is not None:
if float(str(date, 'utf-8')) + PAGE_CACHE_DURATION < time.time():
set_cache(path)
else:
set_cache(path)
return db.get(pathkey(path, PathKeyType.Data))
@app.route('/')
@app.route('/<path:path>')
def path(path='/'):
return get_page(path)
if __name__ == '__main__': if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True) app.run(host='0.0.0.0', debug=True)