Skip to content

Instantly share code, notes, and snippets.

@kindly
Created November 4, 2011 10:41
Show Gist options
  • Select an option

  • Save kindly/1339075 to your computer and use it in GitHub Desktop.

Select an option

Save kindly/1339075 to your computer and use it in GitHub Desktop.
start of activity for ckan.
from sqlalchemy.orm.session import SessionExtension
class DatasetActivitySessionExtension(SessionExtension):
def before_commit(self, session):
session.flush()
try:
obj_cache = session._object_cache
revision = session.revision
except AttributeError:
return
new = obj_cache['new']
changed = obj_cache['changed']
deleted = obj_cache['deleted']
activity_detail = {}
activity = {}
## new packages first to exclude them from changed pacakges
for obj in new:
if isinstance(obj, Package):
activity[obj.id] = dataset_new_activity(obj)
activity_detail.setdefault(obj.id, []).append(
dataset_new_activity_detail(obj)
)
for obj in new:
if isinstance(obj, Package):
continue
try:
related_datasets = obj.related_packages()
except AttributeError:
continue
for dataset in related_datasets:
if not dataset.id in activity:
activity[dataset.id] = dataset_change_activity(dataset)
activity_detail.setdefault(dataset.id, []).append(
obj_new_activity_detail(obj)
)
for obj in changed:
try:
related_datasets = obj.related_packages()
except AttributeError:
continue
for dataset in related_datasets:
if not dataset.id in activity:
activity[dataset.id] = dataset_change_activity(dataset)
activity_detail.setdefault(dataset.id, []).append(
obj_changed_activity_detail(obj)
)
for obj in deleted:
from sqlalchemy.util import OrderedDict
from sqlalchemy.ext.orderinglist import ordering_list
from sqlalchemy import orm
from pylons import config
import vdm.sqlalchemy
from meta import *
from types import make_uuid, JsonDictType
from core import *
from package import *
from ckan.model import extension
__all__ = ['Activity', 'activity_table',
'ActivityDetail', 'activity_detail_table',
]
##formally package_resource
activity_table = Table(
'activity', metadata,
Column('id', types.UnicodeText, primary_key=True, default=make_uuid),
Column('timestamp', types.DateTime),
Column('user_id', types.UnicodeText),
Column('object_id', types.UnicodeText),
Column('revision_id', types.UnicodeText),
Column('activity_type', types.UnicodeText),
Column('data', types.UnicodeText),
)
activity_detail_table = Table(
'activity_detail', metadata,
Column('id', types.UnicodeText, primary_key=True, default=make_uuid),
Column('activity_id', types.UnicodeText, ForeignKey('activity.id')),
Column('object_id', types.UnicodeText),
Column('object_type', types.UnicodeText),
Column('activity_type', types.UnicodeText),
Column('data', types.UnicodeText),
)
class Activity:
pass
class ActivityDetail:
pass
mapper(Activity, activity_table)
mapper(ActivityDetail, activity_detail_table, properties={
'activity':orm.relation(Activity,
backref=orm.backref('activity_detail')
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment