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 @@