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)), | 
