diff --git a/dusken/main/api/membersbygroup.py b/dusken/main/api/membersbygroup.py new file mode 100644 index 0000000..baf8d1d --- /dev/null +++ b/dusken/main/api/membersbygroup.py @@ -0,0 +1,76 @@ +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 MembersByGroupObject(object): + def __init__(self): + self.group_id = 0 + self.members = [] + +class MembersByGroupResource(Resource): + group_id = fields.IntegerField(attribute='group_id') + members = fields.ListField(attribute='members') + + class Meta: + resource_name = 'membersbygroup' + object_class = MembersByGroupObject + list_allowed_methods = [ 'post' ] + detail_allowed_methods = [ 'get', 'delete' ] + authorization = Authorization() # TODO: Obvious + + 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.group_id + else: + kwargs['pk'] = bundle_or_obj.group_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): + group_id = int(kwargs['pk']) + group = Group.objects.get(id=group_id) + + if group is None: + return None + + obj = MembersByGroupObject() + obj.group_id = group.id + for member in group.user_set.all(): + obj.members.append(member.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 19fcc51..58b5c8d 100644 --- a/dusken/main/urls.py +++ b/dusken/main/urls.py @@ -4,12 +4,14 @@ from main.api.member import MemberResource from main.api.membership import MembershipResource from main.api.group import GroupResource from main.api.groupsbymember import GroupsByMemberResource +from main.api.membersbygroup import MembersByGroupResource v1_api = Api(api_name='v1') v1_api.register(MemberResource()) v1_api.register(MembershipResource()) v1_api.register(GroupResource()) v1_api.register(GroupsByMemberResource()) +v1_api.register(MembersByGroupResource()) urlpatterns = patterns('', (r'^api/', include(v1_api.urls)),