This is an automated email from the ASF dual-hosted git repository. brondsem pushed a commit to branch db/8438b in repository https://gitbox.apache.org/repos/asf/allura.git
commit e690bd9762fb7378d8a1c59d5842098d538f26e5 Author: Dave Brondsema <[email protected]> AuthorDate: Fri Jun 10 11:23:03 2022 -0400 [#8438] dynamically use current avatar urls in activity stream; fix Anonymous linking --- ForgeActivity/forgeactivity/main.py | 26 +++++++++++++++++----- .../forgeactivity/tests/functional/test_root.py | 24 +++++--------------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/ForgeActivity/forgeactivity/main.py b/ForgeActivity/forgeactivity/main.py index e8b53333f..9b6399301 100644 --- a/ForgeActivity/forgeactivity/main.py +++ b/ForgeActivity/forgeactivity/main.py @@ -124,15 +124,31 @@ class ForgeActivityController(BaseController): filtered_timeline = list(islice(filter(perm_check(c.user), timeline), 0, limit)) - if config.get("default_avatar_image"): - for t in filtered_timeline: + use_gravatar = h.asbool(config.get('use_gravatar')) + default_avatar = config.get("default_avatar_image") + icon_base = config.get('static.icon_base', '') # CDN, possibly + for t in filtered_timeline: + # fix broken links for Anonymous user + if t.actor.activity_url == '/u/userid-None/': + t.actor.activity_url = None + # fix avatars + if not use_gravatar: + # force current user icon (overwrites previous gravatar urls or defaults) + if t.actor.activity_url: + t.actor.activity_extras.icon_url = icon_base + t.actor.activity_url + 'user_icon' + # ideally ?{icon_timestamp} would be appended to URL for cache-busting when CDN is used, but that + # value would only be available by querying and loading the user-project + else: + t.actor.activity_extras.icon_url = None + elif default_avatar: if not t.actor.activity_extras.get('icon_url'): - t.actor.activity_extras.icon_url = config['default_avatar_image'] + t.actor.activity_extras.icon_url = default_avatar else: + # fix gravatar urls with old default avatar urls in them t.actor.activity_extras.icon_url = re.sub(r'([&?])d=[^&]*', - r'\1d={}'.format(config["default_avatar_image"]), + r'\1d={}'.format(default_avatar), t.actor.activity_extras.icon_url) - session(t).expunge(t) # don't save back this change + session(t).expunge(t) # don't save back these changes if extra_limit == limit: # if we didn't ask for extra, then we expect there's more if we got all we asked for diff --git a/ForgeActivity/forgeactivity/tests/functional/test_root.py b/ForgeActivity/forgeactivity/tests/functional/test_root.py index 6a58e3e56..cdbf679af 100644 --- a/ForgeActivity/forgeactivity/tests/functional/test_root.py +++ b/ForgeActivity/forgeactivity/tests/functional/test_root.py @@ -61,10 +61,7 @@ class TestActivityController(TestController): @td.with_tool('test', 'activity') @patch('forgeactivity.main.g.director') def test_index_html(self, director): - from activitystream.storage.base import StoredActivity - from bson import ObjectId - from datadiff.tools import assert_equal - director.get_timeline.return_value = [StoredActivity(**{ + director.get_timeline.return_value = [Activity(**{ "_id": ObjectId("529fa331033c5e6406d8b338"), "obj": { "activity_extras": { @@ -182,9 +179,7 @@ class TestActivityController(TestController): @td.with_tool('test', 'activity') @patch('forgeactivity.main.g.director') def test_feed_rss_project(self, director): - from activitystream.storage.base import StoredActivity - from bson import ObjectId - director.get_timeline.return_value = [StoredActivity(**{ + director.get_timeline.return_value = [Activity(**{ "_id": ObjectId("529fa331033c5e6406d8b338"), "obj": { "activity_extras": { @@ -234,8 +229,7 @@ class TestActivityController(TestController): @td.with_tool('test', 'activity') @patch('forgeactivity.main.g.director') def test_feed_rss_project_verb_without_activity_name(self, director): - from activitystream.storage.base import StoredActivity - director.get_timeline.return_value = [StoredActivity(**{ + director.get_timeline.return_value = [Activity(**{ "obj": { "activity_extras": {}, "activity_url": "/p/test/tickets/34/?limit=25#ed7c", @@ -259,9 +253,7 @@ class TestActivityController(TestController): @td.with_user_project('test-user-1') @patch('forgeactivity.main.g.director') def test_feed_rss_user(self, director): - from activitystream.storage.base import StoredActivity - from bson import ObjectId - director.get_timeline.return_value = [StoredActivity(**{ + director.get_timeline.return_value = [Activity(**{ "_id": ObjectId("529fa331033c5e6406d8b338"), "obj": { "activity_extras": { @@ -309,9 +301,7 @@ class TestActivityController(TestController): @td.with_tool('test', 'activity') @patch('forgeactivity.main.g.director') def test_feed_atom_project(self, director): - from activitystream.storage.base import StoredActivity - from bson import ObjectId - director.get_timeline.return_value = [StoredActivity(**{ + director.get_timeline.return_value = [Activity(**{ "_id": ObjectId("529fa331033c5e6406d8b338"), "obj": { "activity_extras": { @@ -365,9 +355,7 @@ class TestActivityController(TestController): @td.with_user_project('test-user-1') @patch('forgeactivity.main.g.director') def test_feed_atom_user(self, director): - from activitystream.storage.base import StoredActivity - from bson import ObjectId - director.get_timeline.return_value = [StoredActivity(**{ + director.get_timeline.return_value = [Activity(**{ "_id": ObjectId("529fa331033c5e6406d8b338"), "obj": { "activity_extras": {
