From 0e374741d0d3fe18cefda532a6b248d72ef3458d Mon Sep 17 00:00:00 2001 From: Andrew Snowden Date: Mon, 26 Oct 2015 15:58:52 +0200 Subject: [PATCH] Allow GZIP compression of assets --- flask_s3.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/flask_s3.py b/flask_s3.py index 67dc89f..92816de 100644 --- a/flask_s3.py +++ b/flask_s3.py @@ -3,6 +3,7 @@ import json import logging import os import re +import zlib from collections import defaultdict import boto3 @@ -175,6 +176,7 @@ def _static_folder_path(static_url, static_folder, static_asset): def _write_files(s3, app, static_url_loc, static_folder, files, bucket, ex_keys=None, hashes=None): """ Writes all the files inside a static folder to S3. """ + should_gzip = app.config.get('S3_GZIP') new_hashes = [] static_folder_rel = _path_to_relative_url(static_folder) for file_path in files: @@ -206,11 +208,19 @@ def _write_files(s3, app, static_url_loc, static_folder, files, bucket, for header, value in headers.iteritems(): h[header] = value + if should_gzip: + h["content-encoding"] = "gzip" + with open(file_path) as fp: metadata, params = split_metadata_params(merge_two_dicts(app.config['S3_HEADERS'], h)) + if should_gzip: + data = zlib.compress(fp.read()) + else: + data = fp.read() + s3.put_object(Bucket=bucket, Key=key_name, - Body=fp.read(), + Body=data, ACL="public-read", Metadata=metadata, **params) @@ -370,7 +380,8 @@ class FlaskS3(object): ('S3_HEADERS', {}), ('S3_FILEPATH_HEADERS', {}), ('S3_ONLY_MODIFIED', False), - ('S3_URL_STYLE', 'host')] + ('S3_URL_STYLE', 'host'), + ('S3_GZIP', False)] for k, v in defaults: app.config.setdefault(k, v)