kopia lustrzana https://github.com/dgtlmoon/changedetection.io
BrowserSteps - Faster screenshot updates and enable gzip compression for all content replies in the UI (#1171)
rodzic
6d932149e3
commit
51d57f0963
|
@ -27,6 +27,7 @@ from flask import (
|
||||||
session,
|
session,
|
||||||
url_for,
|
url_for,
|
||||||
)
|
)
|
||||||
|
from flask_compress import Compress as FlaskCompress
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
from flask_restful import abort, Api
|
from flask_restful import abort, Api
|
||||||
from flask_wtf import CSRFProtect
|
from flask_wtf import CSRFProtect
|
||||||
|
@ -51,6 +52,10 @@ app = Flask(__name__,
|
||||||
static_url_path="",
|
static_url_path="",
|
||||||
static_folder="static",
|
static_folder="static",
|
||||||
template_folder="templates")
|
template_folder="templates")
|
||||||
|
from flask_compress import Compress
|
||||||
|
|
||||||
|
# Super handy for compressing large BrowserSteps responses and others
|
||||||
|
FlaskCompress(app)
|
||||||
|
|
||||||
# Stop browser caching of assets
|
# Stop browser caching of assets
|
||||||
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
|
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
|
||||||
|
|
|
@ -210,16 +210,29 @@ def construct_blueprint(datastore: ChangeDetectionStore):
|
||||||
except playwright._impl._api_types.Error as e:
|
except playwright._impl._api_types.Error as e:
|
||||||
return make_response("Browser session ran out of time :( Please reload this page."+str(e), 401)
|
return make_response("Browser session ran out of time :( Please reload this page."+str(e), 401)
|
||||||
|
|
||||||
p = {'screenshot': "data:image/png;base64,{}".format(
|
# Use send_file() which is way faster than read/write loop on bytes
|
||||||
|
import json
|
||||||
|
from tempfile import mkstemp
|
||||||
|
from flask import send_file
|
||||||
|
tmp_fd, tmp_file = mkstemp(text=True, suffix=".json", prefix="changedetectionio-")
|
||||||
|
|
||||||
|
output = json.dumps({'screenshot': "data:image/png;base64,{}".format(
|
||||||
base64.b64encode(state[0]).decode('ascii')),
|
base64.b64encode(state[0]).decode('ascii')),
|
||||||
'xpath_data': state[1],
|
'xpath_data': state[1],
|
||||||
'session_age_start': this_session.age_start,
|
'session_age_start': this_session.age_start,
|
||||||
'browser_time_remaining': round(remaining)
|
'browser_time_remaining': round(remaining)
|
||||||
}
|
})
|
||||||
|
|
||||||
|
with os.fdopen(tmp_fd, 'w') as f:
|
||||||
|
f.write(output)
|
||||||
|
|
||||||
# @todo BSON/binary JSON, faster xfer, OR pick it off the disk
|
response = make_response(send_file(path_or_file=tmp_file,
|
||||||
return p
|
mimetype='application/json; charset=UTF-8',
|
||||||
|
etag=True))
|
||||||
|
# No longer needed
|
||||||
|
os.unlink(tmp_file)
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
return browser_steps_blueprint
|
return browser_steps_blueprint
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
flask~=2.0
|
flask~=2.0
|
||||||
flask_wtf
|
flask_wtf
|
||||||
|
flask-compress
|
||||||
eventlet>=0.31.0
|
eventlet>=0.31.0
|
||||||
validators
|
validators
|
||||||
timeago~=1.0
|
timeago~=1.0
|
||||||
|
|
Ładowanie…
Reference in New Issue