From 64443b263186615ffda09c0cc5c155690d278442 Mon Sep 17 00:00:00 2001 From: Andres Vazquez Date: Fri, 6 May 2022 16:12:29 +0200 Subject: [PATCH] Improve activity queries --- ckan/model/activity.py | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/ckan/model/activity.py b/ckan/model/activity.py index c62aa95c420..1ab9fc4589a 100644 --- a/ckan/model/activity.py +++ b/ckan/model/activity.py @@ -244,6 +244,7 @@ def package_activity_list( etc. ''' + import ckan.model as model q = _package_activity_query(package_id) if not include_hidden_activity: @@ -257,13 +258,24 @@ def package_activity_list( q, include=False, types=exclude_activity_types) if after: - q = _filter_activitites_from_timestamp(q, timestamp=after, after=True) + q = q.filter(model.Activity.timestamp > after) if before: - q = _filter_activitites_from_timestamp(q, timestamp=before, after=False) + q = q.filter(model.Activity.timestamp < before) - # revert sort queries for "only after" queries + # revert sort queries for "only before" queries revese_order = before and not after - results = _activities_limit(q, limit, offset, revese_order).all() + if revese_order: + q = q.order_by(model.Activity.timestamp) + else: + # type_ignore_reason: incomplete SQLAlchemy types + q = q.order_by(model.Activity.timestamp.desc()) # type: ignore + + if offset: + q = q.offset(offset) + if limit: + q = q.limit(limit) + + results = q.all() # revert result if required if revese_order: @@ -546,23 +558,6 @@ def _filter_activitites_from_users(q: QActivity) -> QActivity: return q -def _filter_activitites_from_timestamp( - q: QActivity, - timestamp: datetime.datetime, - after: bool - ) -> QActivity: - '''Adds a filter to an existing query object to include or exclude - (include=False) activities based on a list of types. - - ''' - import ckan.model as model - if after: - q = q.filter(model.Activity.timestamp > timestamp) - else: - q = q.filter(model.Activity.timestamp < timestamp) - return q - - def _filter_activitites_from_type( q: QActivity, types: list[str], include: bool = True): '''Adds a filter to an existing query object to include or exclude