From d0fb2c3c0a446a3b24a51da279a40a0305eeabf4 Mon Sep 17 00:00:00 2001 From: Robert Kolner Date: Wed, 17 Apr 2013 20:48:53 +0200 Subject: [PATCH] Added resource for gettings all groups a member is part of. TODO: No tests yet. --- dusken/main/api/group.py | 4 +- dusken/main/api/groupsbymember.py | 79 +++++++++++++++++++++++++++++++ dusken/main/urls.py | 4 +- 3 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 dusken/main/api/groupsbymember.py diff --git a/dusken/main/api/group.py b/dusken/main/api/group.py index fd84f9c..8d5c0c3 100644 --- a/dusken/main/api/group.py +++ b/dusken/main/api/group.py @@ -1,6 +1,6 @@ -from tastypie.resources import ModelResource, ALL from tastypie.authorization import Authorization -from main.models import * +from tastypie.resources import ModelResource, ALL +from main.models import Group class GroupResource(ModelResource): diff --git a/dusken/main/api/groupsbymember.py b/dusken/main/api/groupsbymember.py new file mode 100644 index 0000000..e13e2ca --- /dev/null +++ b/dusken/main/api/groupsbymember.py @@ -0,0 +1,79 @@ +from tastypie import fields +from tastypie.authorization import Authorization +from tastypie.bundle import Bundle +from tastypie.resources import Resource +from main.models import Member, Group + +class GroupsByMemberObject(object): + def __init__(self): + self.member_id = 0 + self.groups = [] + +class GroupsByMemberResource(Resource): + member_id = fields.IntegerField(attribute='member_id') + groups = fields.ListField(attribute='groups') + + class Meta: + resource_name = 'groupsbymember' + object_class = GroupsByMemberObject + list_allowed_methods = [ 'post' ] + detail_allowed_methods = [ 'get', 'delete' ] + authorization = Authorization() # TODO: look up + filtering = { + 'member_id' : [ 'exact' ] + } + + def detail_uri_kwargs(self, bundle_or_obj): + kwargs = { + 'resource_name': self._meta.resource_name, + } + + if isinstance(bundle_or_obj, Bundle): + kwargs['pk'] = bundle_or_obj.obj.member_id + else: + kwargs['pk'] = bundle_or_obj.member_id + + if self._meta.api_name is not None: + kwargs['api_name'] = self._meta.api_name + + return kwargs + + def get_object_list(self, request): + pass # We can't return lists. + + def obj_get_list(self, request=None, **kwargs): + pass # We can't return lists. + + def obj_get(self, request=None, **kwargs): + member_id = int(kwargs['pk']) + member = Member.objects.get(id=member_id) + + if member is None: + return None + + obj = GroupsByMemberObject() + obj.member_id = member.id + for group in member.groups.all(): + obj.groups.append(group.id) + + return obj + + def obj_create(self, request=None, **kwargs): + group = Group.objects.get(id=group_id) + member = Member.objects.get(id=user_id) + group.user_set.add(member) + + def obj_update(self, bundle, request=None, **kwargs): + pass # We can't update. + + def obj_delete_list(self, request=None, **kwargs): + pass # We can't delete lists. + + def obj_delete(self, request=None, **kwargs): + group = Group.objects.get(id=group_id) + member = Member.objects.get(id=user_id) + group.user_set.remove(member) + + + def rollback(self, bundles): + pass diff --git a/dusken/main/urls.py b/dusken/main/urls.py index 14ff0ce..19fcc51 100644 --- a/dusken/main/urls.py +++ b/dusken/main/urls.py @@ -3,13 +3,13 @@ from tastypie.api import Api from main.api.member import MemberResource from main.api.membership import MembershipResource from main.api.group import GroupResource -from main.api.groupmembership import GroupMembershipResource +from main.api.groupsbymember import GroupsByMemberResource v1_api = Api(api_name='v1') v1_api.register(MemberResource()) v1_api.register(MembershipResource()) v1_api.register(GroupResource()) -v1_api.register(GroupMembershipResource()) +v1_api.register(GroupsByMemberResource()) urlpatterns = patterns('', (r'^api/', include(v1_api.urls)),