This is an automated email from the ASF dual-hosted git repository.
brondsem pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/allura.git
The following commit(s) were added to refs/heads/master by this push:
new 8c14791 SF-5746 use project icon file hash for cache busting
8c14791 is described below
commit 8c147913519d4cfeeab3b99b48734f9ccc2d977d
Author: Kenton Taylor <[email protected]>
AuthorDate: Wed Feb 10 18:34:58 2021 +0000
SF-5746 use project icon file hash for cache busting
---
Allura/allura/ext/admin/admin_main.py | 2 +-
Allura/allura/model/project.py | 12 ++++++++++++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/Allura/allura/ext/admin/admin_main.py
b/Allura/allura/ext/admin/admin_main.py
index a2384bd..26380b2 100644
--- a/Allura/allura/ext/admin/admin_main.py
+++ b/Allura/allura/ext/admin/admin_main.py
@@ -335,7 +335,7 @@ class ProjectAdminController(BaseController):
c.project.removal_changed_date = datetime.utcnow()
if 'delete_icon' in kw:
M.ProjectFile.query.remove(dict(project_id=c.project._id,
category=re.compile(r'^icon')))
- c.project.set_tool_data('allura', icon_original_size=None)
+ c.project.set_tool_data('allura', icon_original_size=None,
icon_sha256=None)
M.AuditLog.log('remove project icon')
g.post_event('project_updated')
redirect('overview')
diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index 68585b7..5819a8f 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -21,6 +21,8 @@ from __future__ import absolute_import
import logging
from calendar import timegm
from collections import Counter, OrderedDict
+from hashlib import sha256
+
from datetime import datetime
from copy import deepcopy
import six.moves.urllib.request
@@ -380,8 +382,18 @@ class Project(SearchIndexable, MappedClass, ActivityNode,
ActivityObject):
)
# store the dimensions so we don't have to read the whole image each
time we need to know
icon_orig_img = PIL.Image.open(icon_orig.rfile())
+
self.set_tool_data('allura', icon_original_size=icon_orig_img.size)
+ try:
+ # calc and save icon file hash, for better cache busting purposes
+ file_input.seek(0)
+ file_bytes = file_input.read()
+ file_sha256 = sha256(file_bytes).hexdigest()
+ self.set_tool_data('allura', icon_sha256=file_sha256)
+ except Exception as ex:
+ log.exception('Failed to calculate sha256 for icon file for
{}'.format(self.shortname))
+
@property
def icon(self):
return self.icon_sized(DEFAULT_ICON_WIDTH)