in ForgeActivity/forgeactivity/main.py [0:0]
def _get_activities_data(self, **kw):
noindex_tags = ['git', 'svn', 'hg', 'commit', 'merge-request']
activity_enabled = asbool(config.get('activitystream.enabled', False))
if not activity_enabled:
raise exc.HTTPNotFound()
c.follow_toggle = W.follow_toggle
c.page_list = W.page_list
if c.project.is_user_project:
followee = c.project.user_project_of
actor_only = followee != c.user
else:
followee = c.project
actor_only = False
following = g.director.is_connected(c.user, followee)
limit, page = h.paging_sanitizer(kw.get('limit', 100), kw.get('page', 0))
extra_limit = limit
# get more in case perm check filters some out
if page == 0 and limit <= 10:
extra_limit = limit * 20
timeline = g.director.get_timeline(followee, page,
limit=extra_limit,
actor_only=actor_only)
filtered_timeline = list(islice(filter(perm_check(c.user), timeline),
0, limit))
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 = default_avatar
else:
# fix gravatar urls with old default avatar urls in them
t.actor.activity_extras.icon_url = re.sub(r'([&?])d=[^&]*',
fr'\1d={default_avatar}',
t.actor.activity_extras.icon_url)
if t.actor.activity_url:
t.actor.activity_url = f'{t.actor.activity_url}profile/'
should_noindex = any(name in noindex_tags for name in t.tags)
t.obj.noindex = should_noindex
t.target.noindex = should_noindex
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
has_more = len(timeline) == limit
else:
# if we did ask for extra, check filtered result
has_more = len(filtered_timeline) == limit
return dict(
followee=followee,
following=following,
timeline=filtered_timeline,
noindex=not filtered_timeline,
page=page,
limit=limit,
has_more=has_more,
actor_only=actor_only)