Skip to content

Commit

Permalink
Refactor activity_dictize
Browse files Browse the repository at this point in the history
  • Loading branch information
David Read committed Feb 22, 2019
1 parent 94df949 commit 3c20b94
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 13 deletions.
20 changes: 7 additions & 13 deletions ckan/lib/dictization/model_dictize.py
Expand Up @@ -637,19 +637,13 @@ def vocabulary_list_dictize(vocabulary_list, context):
def activity_dictize(activity, context, include_data=False):
activity_dict = d.table_dictize(activity, context)
if not include_data:
# take a copy of the activity data, since the original may be used
# elsewhere during the same render and we don't want to affect that
activity_dict['data'] = copy.deepcopy(activity_dict['data'])
# delete all the data apart from the title field on each data object,
# because that is needed to display it in the activity stream
for obj_key in activity_dict['data'].keys():
obj_data = activity_dict['data'][obj_key]
if isinstance(obj_data, dict):
for key in obj_data.keys():
if key != 'title':
del obj_data[key]
else:
del activity_dict['data'][obj_key]
# replace the data with just a {'title': title} and not the rest of
# the dataset/group/org/custom obj. we need the title to display it
# in the activity stream.
activity_dict['data'] = {
key: {'title': val['title']}
for (key, val) in activity_dict['data'].items()
if 'title' in val}
return activity_dict


Expand Down
48 changes: 48 additions & 0 deletions ckan/tests/lib/dictization/test_model_dictize.py
Expand Up @@ -608,3 +608,51 @@ def test_vocabulary_dictize_not_including_datasets(self):
assert len(vocab_dict["tags"]) == 2
for tag in vocab_dict["tags"]:
assert len(tag.get("packages", [])) == 0


class TestActivityDictize(object):
def setup(self):
helpers.reset_db()

def test_include_data(self):
dataset = factories.Dataset()
user = factories.User()
activity = factories.Activity(
user_id=user['id'],
object_id=dataset['id'],
revision_id=None,
activity_type='new package',
data={
'package': copy.deepcopy(dataset),
'actor': 'Mr Someone',
})
activity_obj = model.Activity.get(activity['id'])
context = {'model': model, 'session': model.Session}
dictized = model_dictize.activity_dictize(activity_obj, context,
include_data=True)
assert_equal(dictized['user_id'], user['id'])
assert_equal(dictized['activity_type'], 'new package')
assert_equal(dictized['data']['package']['title'], dataset['title'])
assert_equal(dictized['data']['package']['id'], dataset['id'])
assert_equal(dictized['data']['actor'], 'Mr Someone')

def test_dont_include_data(self):
dataset = factories.Dataset()
user = factories.User()
activity = factories.Activity(
user_id=user['id'],
object_id=dataset['id'],
revision_id=None,
activity_type='new package',
data={
'package': copy.deepcopy(dataset),
'actor': 'Mr Someone',
})
activity_obj = model.Activity.get(activity['id'])
context = {'model': model, 'session': model.Session}
dictized = model_dictize.activity_dictize(activity_obj, context,
include_data=False)
assert_equal(dictized['user_id'], user['id'])
assert_equal(dictized['activity_type'], 'new package')
assert_equal(dictized['data'],
{'package': {'title': dataset['title']}})

0 comments on commit 3c20b94

Please sign in to comment.