Skip to content

Commit

Permalink
include_hidden_activity is a normal param in data_dict instead of con…
Browse files Browse the repository at this point in the history
…text
  • Loading branch information
David Read committed Apr 19, 2019
1 parent 15507df commit 75592d9
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 6 deletions.
27 changes: 24 additions & 3 deletions ckan/logic/action/get.py
Expand Up @@ -2541,14 +2541,21 @@ def package_activity_list(context, data_dict):
``ckan.activity_list_limit``, upper limit: ``100`` unless set in
site's configuration ``ckan.activity_list_limit_max``)
:type limit: int
:param include_hidden_activity: whether to include 'hidden' activity, which
is not shown in the Activity Stream page. Hidden activity includes activity
done by the site_user, such as harvests, which are not shown in the
activity stream because they can be too numerous, or activity by other
users specified in config option `ckan.hide_activity_from_users`. NB Only
sysadmins may set include_hidden_activity to true. (default: false)
:type include_hidden_activity: bool
:rtype: list of dictionaries
'''
# FIXME: Filter out activities whose subject or object the user is not
# authorized to read.
data_dict['include_data'] = False
include_hidden_activity = asbool(context.get('include_hidden_activity'))
include_hidden_activity = data_dict.get('include_hidden_activity', False)
_check_access('package_activity_list', context, data_dict)

model = context['model']
Expand Down Expand Up @@ -2589,14 +2596,21 @@ def group_activity_list(context, data_dict):
``ckan.activity_list_limit``, upper limit: ``100`` unless set in
site's configuration ``ckan.activity_list_limit_max``)
:type limit: int
:param include_hidden_activity: whether to include 'hidden' activity, which
is not shown in the Activity Stream page. Hidden activity includes activity
done by the site_user, such as harvests, which are not shown in the
activity stream because they can be too numerous, or activity by other
users specified in config option `ckan.hide_activity_from_users`. NB Only
sysadmins may set include_hidden_activity to true. (default: false)
:type include_hidden_activity: bool
:rtype: list of dictionaries
'''
# FIXME: Filter out activities whose subject or object the user is not
# authorized to read.
data_dict = dict(data_dict, include_data=False)
include_hidden_activity = asbool(context.get('include_hidden_activity'))
include_hidden_activity = data_dict.get('include_hidden_activity', False)
_check_access('group_activity_list', context, data_dict)

model = context['model']
Expand Down Expand Up @@ -2635,14 +2649,21 @@ def organization_activity_list(context, data_dict):
``ckan.activity_list_limit``, upper limit: ``100`` unless set in
site's configuration ``ckan.activity_list_limit_max``)
:type limit: int
:param include_hidden_activity: whether to include 'hidden' activity, which
is not shown in the Activity Stream page. Hidden activity includes activity
done by the site_user, such as harvests, which are not shown in the
activity stream because they can be too numerous, or activity by other
users specified in config option `ckan.hide_activity_from_users`. NB Only
sysadmins may set include_hidden_activity to true. (default: false)
:type include_hidden_activity: bool
:rtype: list of dictionaries
'''
# FIXME: Filter out activities whose subject or object the user is not
# authorized to read.
data_dict['include_data'] = False
include_hidden_activity = asbool(context.get('include_hidden_activity'))
include_hidden_activity = data_dict.get('include_hidden_activity', False)
_check_access('organization_activity_list', context, data_dict)

model = context['model']
Expand Down
5 changes: 4 additions & 1 deletion ckan/logic/schema.py
Expand Up @@ -615,13 +615,16 @@ def default_dashboard_activity_list_schema(
@validator_args
def default_activity_list_schema(
not_missing, unicode_safe, configured_default,
natural_number_validator, limit_to_configured_maximum):
natural_number_validator, limit_to_configured_maximum,
ignore_missing, boolean_validator, ignore_not_sysadmin):
schema = default_pagination_schema()
schema['id'] = [not_missing, unicode_safe]
schema['limit'] = [
configured_default('ckan.activity_list_limit', 31),
natural_number_validator,
limit_to_configured_maximum('ckan.activity_list_limit_max', 100)]
schema['include_hidden_activity'] = [
ignore_missing, ignore_not_sysadmin, boolean_validator]
return schema


Expand Down
3 changes: 1 addition & 2 deletions ckan/migration/migrate_package_activity.py
Expand Up @@ -129,9 +129,8 @@ def migrate_dataset(dataset_name, errors):
# non-hidden Activity, then it does a diff with the hidden one (rather than
# the most recent non-hidden one), so it is important to store the
# package_dict in hidden Activity objects.
context = dict(get_context(), include_hidden_activity=True)
package_activity_stream = logic.get_action(u'package_activity_list')(
context, {u'id': dataset_name})
get_context(), {u'id': dataset_name, u'include_hidden_activity': True})
num_activities = len(package_activity_stream)
if not num_activities:
print(u' No activities')
Expand Down
84 changes: 84 additions & 0 deletions ckan/tests/logic/action/test_get.py
Expand Up @@ -2669,6 +2669,34 @@ def test_limit_hits_max(self):
results = helpers.call_action('package_activity_list', id=id, limit='9')
eq(len(results), 7) # i.e. ckan.activity_list_limit_max

def test_normal_user_doesnt_see_hidden_activities(self):
# activity is 'hidden' because dataset is created by site_user
dataset = factories.Dataset()

activities = helpers.call_action('package_activity_list',
id=dataset['id'])
eq([activity['activity_type'] for activity in activities],
[])

def test_sysadmin_user_doesnt_see_hidden_activities_by_default(self):
# activity is 'hidden' because dataset is created by site_user
dataset = factories.Dataset()

activities = helpers.call_action('package_activity_list',
id=dataset['id'])
eq([activity['activity_type'] for activity in activities],
[])

def test_sysadmin_user_can_include_hidden_activities(self):
# activity is 'hidden' because dataset is created by site_user
dataset = factories.Dataset()

activities = helpers.call_action('package_activity_list',
include_hidden_activity=True,
id=dataset['id'])
eq([activity['activity_type'] for activity in activities],
['new package'])


class TestUserActivityList(helpers.FunctionalTestBase):
def test_create_user(self):
Expand Down Expand Up @@ -3056,6 +3084,34 @@ def test_limit_hits_max(self):
results = helpers.call_action('group_activity_list', id=id, limit='9')
eq(len(results), 7) # i.e. ckan.activity_list_limit_max

def test_normal_user_doesnt_see_hidden_activities(self):
# activity is 'hidden' because group is created by site_user
group = factories.Group()

activities = helpers.call_action('group_activity_list',
id=group['id'])
eq([activity['activity_type'] for activity in activities],
[])

def test_sysadmin_user_doesnt_see_hidden_activities_by_default(self):
# activity is 'hidden' because group is created by site_user
group = factories.Group()

activities = helpers.call_action('group_activity_list',
id=group['id'])
eq([activity['activity_type'] for activity in activities],
[])

def test_sysadmin_user_can_include_hidden_activities(self):
# activity is 'hidden' because group is created by site_user
group = factories.Group()

activities = helpers.call_action('group_activity_list',
include_hidden_activity=True,
id=group['id'])
eq([activity['activity_type'] for activity in activities],
['new group'])


class TestOrganizationActivityList(helpers.FunctionalTestBase):
def test_create_organization(self):
Expand Down Expand Up @@ -3230,6 +3286,34 @@ def test_limit_hits_max(self):
results = helpers.call_action('organization_activity_list', id=id, limit='9')
eq(len(results), 7) # i.e. ckan.activity_list_limit_max

def test_normal_user_doesnt_see_hidden_activities(self):
# activity is 'hidden' because org is created by site_user
org = factories.Organization()

activities = helpers.call_action('organization_activity_list',
id=org['id'])
eq([activity['activity_type'] for activity in activities],
[])

def test_sysadmin_user_doesnt_see_hidden_activities_by_default(self):
# activity is 'hidden' because org is created by site_user
org = factories.Organization()

activities = helpers.call_action('organization_activity_list',
id=org['id'])
eq([activity['activity_type'] for activity in activities],
[])

def test_sysadmin_user_can_include_hidden_activities(self):
# activity is 'hidden' because org is created by site_user
org = factories.Organization()

activities = helpers.call_action('organization_activity_list',
include_hidden_activity=True,
id=org['id'])
eq([activity['activity_type'] for activity in activities],
['new organization'])


class TestRecentlyChangedPackagesActivityList(helpers.FunctionalTestBase):
def test_create_dataset(self):
Expand Down

0 comments on commit 75592d9

Please sign in to comment.