diff options
Diffstat (limited to 'coip')
-rw-r--r-- | coip/apps/activitystreams/urls.py | 4 | ||||
-rw-r--r-- | coip/apps/activitystreams/views.py | 45 | ||||
-rw-r--r-- | coip/apps/membership/models.py | 18 | ||||
-rw-r--r-- | coip/apps/membership/views.py | 6 | ||||
-rw-r--r-- | coip/apps/opensocial/activitystreams/__init__.py | 0 | ||||
-rw-r--r-- | coip/apps/opensocial/activitystreams/managers.py (renamed from coip/apps/activitystreams/managers.py) | 0 | ||||
-rw-r--r-- | coip/apps/opensocial/activitystreams/urls.py | 10 | ||||
-rw-r--r-- | coip/apps/opensocial/activitystreams/views.py | 14 | ||||
-rw-r--r-- | coip/apps/opensocial/people.py | 8 | ||||
-rw-r--r-- | coip/settings.py | 2 | ||||
-rw-r--r-- | coip/urls.py | 2 |
11 files changed, 92 insertions, 17 deletions
diff --git a/coip/apps/activitystreams/urls.py b/coip/apps/activitystreams/urls.py index e5d0d94..edbab36 100644 --- a/coip/apps/activitystreams/urls.py +++ b/coip/apps/activitystreams/urls.py @@ -5,6 +5,6 @@ Created on Nov 7, 2011 ''' from django.conf.urls.defaults import patterns, url -urlpatterns = patterns('', - url(r'^@any/(?P<id>[0-9]+)', view='coip.apps.activitystreams.urls') +urlpatterns = patterns('coip.apps.activitystreams.views', + url(r'^@any/(?P<id>[0-9]+)/?$', view='name') )
\ No newline at end of file diff --git a/coip/apps/activitystreams/views.py b/coip/apps/activitystreams/views.py index a99bec3..91ba957 100644 --- a/coip/apps/activitystreams/views.py +++ b/coip/apps/activitystreams/views.py @@ -6,9 +6,52 @@ Created on Nov 8, 2011 from django.shortcuts import get_object_or_404 from coip.apps.name.models import Name from coip.multiresponse import json_response +from django_oauth2_lite.decorators import oauth2_required +from actstream.models import Action +from django.http import HttpResponseNotFound +from coip.extensions.templatetags.userdisplay import userdisplay + +def user_to_json(o): + return { + 'objectType': 'person', + 'id': o.username, + 'displayName': userdisplay(o) + } + +def name_to_json(o): + return { + 'objectType': 'group', + 'id': o.id, + 'url': o.url(), + 'displayName': o.shortname() + } + +def object_to_json(o): + if o: + n = o.__class__.__name__ + if n == 'User': + return user_to_json(o) + if n == 'Name': + return name_to_json(o) + else: + return "none" + +def activity_to_json(activity): + r = { + "published": activity.timestamp.isoformat(), + "actor": object_to_json(activity.actor), + "verb": activity.verb, + "object": object_to_json(activity.action_object), + "target": object_to_json(activity.target) + } + return r @oauth2_required(scope='memberships') def name(request,id): name = get_object_or_404(Name,pk=id) # check ownership - return json_response(name.actor_actions.name_activities())
\ No newline at end of file + stream = Action.objects.stream_for_object_as_target(name) + if stream: + return json_response([activity_to_json(activity) for activity in stream]) + else: + return HttpResponseNotFound()
\ No newline at end of file diff --git a/coip/apps/membership/models.py b/coip/apps/membership/models.py index 68eda96..9aec54f 100644 --- a/coip/apps/membership/models.py +++ b/coip/apps/membership/models.py @@ -71,7 +71,7 @@ To view information about \'%s\' open this link in your browser: fail_silently=False) return -def add_member(name,member_name,hidden=False): +def add_member(name,member_name,hidden=False,actor=None): (m,created) = Membership.objects.get_or_create(user=member_name,name=name) if created or not m.enabled or m.hidden != hidden: m.enabled = True @@ -82,30 +82,30 @@ def add_member(name,member_name,hidden=False): name.nmembers = -1 name.save() - if not m.hidden: - action.send(m.user,verb='added to',target=m.name) + if not m.hidden and actor: + action.send(actor,action_object=m.user,verb='added to',target=m.name) return m.send_notification("added to") -def disable_member(name,member_name): +def disable_member(name,member_name,actor=None): m = Membership.objects.get(name=name,user=member_name) if m: m.enabled = False m.save() m.send_notification("temporarily removed from") - if not m.hidden: - action.send(m.user,verb='temporarily removed from',target=m.name) + if not m.hidden and actor: + action.send(actor,action_object=m.user,verb='temporarily removed from',target=m.name) if name.nmembers != -1: name.nmembers = -1 name.save() -def remove_member(name,member_name): +def remove_member(name,member_name,actor=None): m = Membership.objects.get(name=name,user=member_name) if m: m.send_notification("removed from") - if not m.hidden: - action.send(m.user,verb='removed from',target=m.name) + if not m.hidden and actor: + action.send(actor,action_object=m.user,verb='removed from',target=m.name) m.delete() if name.nmembers != -1: diff --git a/coip/apps/membership/views.py b/coip/apps/membership/views.py index 3d5a178..c1f3afb 100644 --- a/coip/apps/membership/views.py +++ b/coip/apps/membership/views.py @@ -33,7 +33,7 @@ def join(request,id,membername=None): m = Membership(name=name,enabled=True) form = MembershipForm(request.POST,instance=m) if form.is_valid(): - add_member(name,form.cleaned_data['user']) + add_member(name,form.cleaned_data['user'],actor=request.user) return HttpResponseRedirect(name.url()) else: return respond_to(request, @@ -42,7 +42,7 @@ def join(request,id,membername=None): else: if membername: user = get_object_or_404(User,username=membername) - add_member(name, user) + add_member(name, user,actor=request.user) return HttpResponseRedirect(name.url()) else: form = MembershipForm() @@ -55,5 +55,5 @@ def leave(request,id,membername=None): name = get_object_or_404(Name,pk=id) if membername: user = get_object_or_404(User,username=membername) - remove_member(name, user) + remove_member(name, user,actor=request.user) return HttpResponseRedirect(name.url()) diff --git a/coip/apps/opensocial/activitystreams/__init__.py b/coip/apps/opensocial/activitystreams/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/coip/apps/opensocial/activitystreams/__init__.py diff --git a/coip/apps/activitystreams/managers.py b/coip/apps/opensocial/activitystreams/managers.py index aaa73f9..aaa73f9 100644 --- a/coip/apps/activitystreams/managers.py +++ b/coip/apps/opensocial/activitystreams/managers.py diff --git a/coip/apps/opensocial/activitystreams/urls.py b/coip/apps/opensocial/activitystreams/urls.py new file mode 100644 index 0000000..e5d0d94 --- /dev/null +++ b/coip/apps/opensocial/activitystreams/urls.py @@ -0,0 +1,10 @@ +''' +Created on Nov 7, 2011 + +@author: leifj +''' +from django.conf.urls.defaults import patterns, url + +urlpatterns = patterns('', + url(r'^@any/(?P<id>[0-9]+)', view='coip.apps.activitystreams.urls') +)
\ No newline at end of file diff --git a/coip/apps/opensocial/activitystreams/views.py b/coip/apps/opensocial/activitystreams/views.py new file mode 100644 index 0000000..a99bec3 --- /dev/null +++ b/coip/apps/opensocial/activitystreams/views.py @@ -0,0 +1,14 @@ +''' +Created on Nov 8, 2011 + +@author: leifj +''' +from django.shortcuts import get_object_or_404 +from coip.apps.name.models import Name +from coip.multiresponse import json_response + +@oauth2_required(scope='memberships') +def name(request,id): + name = get_object_or_404(Name,pk=id) + # check ownership + return json_response(name.actor_actions.name_activities())
\ No newline at end of file diff --git a/coip/apps/opensocial/people.py b/coip/apps/opensocial/people.py index bf814e2..613ef68 100644 --- a/coip/apps/opensocial/people.py +++ b/coip/apps/opensocial/people.py @@ -17,6 +17,8 @@ from django.shortcuts import get_object_or_404 import logging from pprint import pformat from coip.apps.opensocial.common import OpenSocialResource +from tastypie.authentication import OAuthAuthentication +from tastypie.authorization import DjangoAuthorization class GroupResource(OpenSocialResource): @@ -25,6 +27,8 @@ class GroupResource(OpenSocialResource): serializer = OpenSocialSerializer() resource_name = 'groups' fields = ['short','description','id'] + authentication = OAuthAuthentication() + authorization = DjangoAuthorization() def override_urls(self): return [ @@ -68,6 +72,8 @@ class MembershipResource(OpenSocialResource): class Meta: queryset = Membership.objects.all() serializer = OpenSocialSerializer() + authentication = OAuthAuthentication() + authorization = DjangoAuthorization() resource_name = 'membership' fields = ['user','name'] filtering = { @@ -86,6 +92,8 @@ class PersonResource(OpenSocialResource): class Meta: queryset = User.objects.all() + authentication = OAuthAuthentication() + authorization = DjangoAuthorization() fields = ['username'] resource_name = 'people' serializer = OpenSocialSerializer() diff --git a/coip/settings.py b/coip/settings.py index 9357607..9586b5a 100644 --- a/coip/settings.py +++ b/coip/settings.py @@ -105,7 +105,6 @@ INSTALLED_APPS = ( 'ghettoq', 'djkombu', 'tastypie', - 'actstream', 'django_oauth2_lite', 'coip.extensions', 'coip.apps.name', @@ -113,6 +112,7 @@ INSTALLED_APPS = ( 'coip.apps.invitation', 'coip.apps.userprofile', 'coip.apps.link', + 'actstream', 'coip.apps.activitystreams' ) diff --git a/coip/urls.py b/coip/urls.py index e41a47a..d74a332 100644 --- a/coip/urls.py +++ b/coip/urls.py @@ -71,7 +71,7 @@ urlpatterns = patterns('', (r'^rtree.json$', 'coip.apps.name.views.rtree'), (r'^rtree/(?P<id>[0-9]+).json$', 'coip.apps.name.views.rtree'), # APIs - (r'^api/activitystreams', include('coip.apps.activitystreams.urls')), + (r'^api/activitystreams/', include('coip.apps.activitystreams.urls')), (r'^api/opensocial/1.0/rpc', 'coip.apps.opensocial.common.system'), #(r'^opensocial/2.0/activitystreams', include(opensocial_v2_as.urls)), (r'^api/opensocial/', include(opensocial_v1.urls)), |