diff --git a/ckan/logic/action/get.py b/ckan/logic/action/get.py index 9e9beef112d..78325dbe7f7 100644 --- a/ckan/logic/action/get.py +++ b/ckan/logic/action/get.py @@ -892,49 +892,16 @@ def activity_detail_list(context, data_dict): return activity_detail_list_dictize(activity_detail_objects, context) def render_new_package_activity(context, activity): - - # FIXME: Get package from 'data' key of activity dict, not from model. - package = package_show(context=context, - data_dict={'id': activity['object_id']}) - return render('activity_streams/new_package.html', - extra_vars = {'activity':activity, 'package':package}) + extra_vars = {'activity': activity}) def render_new_resource_activity(context, activity, detail): - - # FIXME: Get package from 'data' key of activity dict, not from model. - package = package_show(context=context, - data_dict={'id': activity['object_id']}) - - # FIXME: Get resource from 'data' key of detail dict, not from model, then - # won't have to skip resources that have since been deleted from model. - try: - resource = resource_show(context=context, - data_dict={'id': detail['object_id']}) - except NotFound: - return '' - return render('activity_streams/new_resource.html', - extra_vars = {'activity': activity, 'package': package, 'resource': - resource}) + extra_vars = {'activity': activity, 'detail': detail}) def render_changed_resource_activity(context, activity, detail): - - # FIXME: Get package from 'data' key of activity dict, not from model. - package = package_show(context=context, - data_dict={'id': activity['object_id']}) - - # FIXME: Get resource from 'data' key of detail dict, not from model, then - # won't have to skip resources that have since been deleted from model. - try: - resource = resource_show(context=context, - data_dict={'id': detail['object_id']}) - except NotFound: - return '' - return render('activity_streams/changed_resource.html', - extra_vars = {'activity': activity, 'package': package, 'resource': - resource}) + extra_vars = {'activity': activity, 'detail': detail}) def render_changed_package_activity(context, activity): details = activity_detail_list(context=context, @@ -954,12 +921,8 @@ def render_changed_package_activity(context, activity): renderer = activity_detail_renderers[object_type][activity_type] return renderer(context, activity, detail) - # FIXME: Get package from 'data' key of activity dict, not from model. - package = package_show(context=context, - data_dict={'id': activity['object_id']}) - return render('activity_streams/changed_package.html', - extra_vars = {'activity':activity, 'package':package}) + extra_vars = {'activity': activity}) # Global dictionary mapping activity types to functions that render activity # dicts to HTML snippets for including in HTML pages. diff --git a/ckan/model/activity.py b/ckan/model/activity.py index 60aa50431d5..82b77019e63 100644 --- a/ckan/model/activity.py +++ b/ckan/model/activity.py @@ -4,6 +4,7 @@ from meta import * from types import make_uuid +from types import JsonDictType from core import * from package import * @@ -19,7 +20,7 @@ Column('object_id', types.UnicodeText), Column('revision_id', types.UnicodeText), Column('activity_type', types.UnicodeText), - Column('data', types.UnicodeText), + Column('data', JsonDictType), ) activity_detail_table = Table( @@ -29,31 +30,38 @@ Column('object_id', types.UnicodeText), Column('object_type', types.UnicodeText), Column('activity_type', types.UnicodeText), - Column('data', types.UnicodeText), + Column('data', JsonDictType), ) class Activity(DomainObject): - def __init__(self, user_id, object_id, revision_id, activity_type, data): + def __init__(self, user_id, object_id, revision_id, activity_type, + data=None): self.id = make_uuid() self.timestamp = datetime.datetime.now() self.user_id = user_id self.object_id = object_id self.revision_id = revision_id self.activity_type = activity_type - self.data = data + if data is None: + self.data = {} + else: + self.data = data mapper(Activity, activity_table) class ActivityDetail(DomainObject): def __init__(self, activity_id, object_id, object_type, activity_type, - data): + data=None): self.activity_id = activity_id self.object_id = object_id self.object_type = object_type self.activity_type = activity_type - self.data = data + if data is None: + self.data = {} + else: + self.data = data mapper(ActivityDetail, activity_detail_table, properties = { 'activity':orm.relation ( Activity, backref=orm.backref('activity_detail')) diff --git a/ckan/model/package.py b/ckan/model/package.py index 901723f2e3e..97af211b402 100644 --- a/ckan/model/package.py +++ b/ckan/model/package.py @@ -543,17 +543,22 @@ def get_fields(core_only=False, fields_to_ignore=None): return fields def activity_stream_item(self, activity_type, revision, user_id): + import ckan.model as model + from ckan.lib.dictization.model_dictize import package_dictize assert activity_type in ("new", "changed", "deleted"), \ str(activity_type) if activity_type == "new": - return Activity(user_id, self.id, revision.id, "new package", None) + return Activity(user_id, self.id, revision.id, "new package", + {'package': package_dictize(self, context={'model':model})}) elif activity_type == "changed": return Activity(user_id, self.id, revision.id, "changed package", - None) + {'package': package_dictize(self, context={'model':model})}) elif activity_type == "deleted": return Activity(user_id, self.id, revision.id, "deleted package", - None) + {'package': package_dictize(self, context={'model':model})}) def activity_stream_detail(self, activity_id, activity_type): + import ckan.model as model + from ckan.lib.dictization.model_dictize import package_dictize return ActivityDetail(activity_id, self.id, u"Package", activity_type, - data=None) + {'package': package_dictize(self, context={'model':model})}) diff --git a/ckan/model/resource.py b/ckan/model/resource.py index 02728459777..b3799ae52cd 100644 --- a/ckan/model/resource.py +++ b/ckan/model/resource.py @@ -141,8 +141,10 @@ def related_packages(self): return [self.resource_group.package] def activity_stream_detail(self, activity_id, activity_type): + import ckan.model as model + from ckan.lib.dictization.model_dictize import resource_dictize return ActivityDetail(activity_id, self.id, u"Resource", activity_type, - None) + {'resource': resource_dictize(self, context={'model':model})}) class ResourceGroup(vdm.sqlalchemy.RevisionedObjectMixin, vdm.sqlalchemy.StatefulObjectMixin, diff --git a/ckan/templates/activity_streams/changed_package.html b/ckan/templates/activity_streams/changed_package.html index 5fd23773edd..4777baabca8 100644 --- a/ckan/templates/activity_streams/changed_package.html +++ b/ckan/templates/activity_streams/changed_package.html @@ -8,14 +8,14 @@
- ${h.linked_user(activity['user_id'])} + ${h.linked_user(activity.user_id)} updated the dataset - ${package_summary(package)}
- ${h.render_datetime(activity['timestamp'], '%B %d %Y')} + ${package_summary(activity.data.package)}
+ ${h.render_datetime(activity.timestamp, '%B %d %Y')}
- ${h.markdown_extract(package.notes)} + ${h.markdown_extract(activity.data.package.notes)}
diff --git a/ckan/templates/activity_streams/changed_resource.html b/ckan/templates/activity_streams/changed_resource.html index 00ea7cb8aed..dcaeca96652 100644 --- a/ckan/templates/activity_streams/changed_resource.html +++ b/ckan/templates/activity_streams/changed_resource.html @@ -8,14 +8,14 @@
- ${h.linked_user(activity['user_id'])} + ${h.linked_user(activity.user_id)} updated - the resource ${resource_summary(package, resource)} - in the dataset ${package_summary(package)}
- ${h.render_datetime(activity['timestamp'], '%B %d %Y')} + the resource ${resource_summary(activity.data.package, detail.data.resource)} + in the dataset ${package_summary(activity.data.package)}
+ ${h.render_datetime(activity.timestamp, '%B %d %Y')}
- ${h.markdown_extract(package.notes)} + ${h.markdown_extract(activity.data.package.notes)}
diff --git a/ckan/templates/activity_streams/new_package.html b/ckan/templates/activity_streams/new_package.html index 13f6173f962..a29ad669312 100644 --- a/ckan/templates/activity_streams/new_package.html +++ b/ckan/templates/activity_streams/new_package.html @@ -8,14 +8,14 @@
- ${h.linked_user(activity['user_id'])} + ${h.linked_user(activity.user_id)} created the dataset - ${package_summary(package)}
- ${h.render_datetime(activity['timestamp'], '%B %d %Y')} + ${package_summary(activity.data.package)}
+ ${h.render_datetime(activity.timestamp, '%B %d %Y')}
- ${h.markdown_extract(package.notes)} + ${h.markdown_extract(activity.data.package.notes)}
diff --git a/ckan/templates/activity_streams/new_resource.html b/ckan/templates/activity_streams/new_resource.html index c057e4013e4..5f9913388cd 100644 --- a/ckan/templates/activity_streams/new_resource.html +++ b/ckan/templates/activity_streams/new_resource.html @@ -8,14 +8,14 @@
- ${h.linked_user(activity['user_id'])} + ${h.linked_user(activity.user_id)} added - the resource ${resource_summary(package, resource)} - to the dataset ${package_summary(package)}
- ${h.render_datetime(activity['timestamp'], '%B %d %Y')} + the resource ${resource_summary(activity.data.package, detail.data.resource)} + to the dataset ${package_summary(activity.data.package)}
+ ${h.render_datetime(activity.timestamp, '%B %d %Y')}
- ${h.markdown_extract(package.notes)} + ${h.markdown_extract(activity.data.package.notes)}