diff --git a/dusken/api/abstract_groupmember.py b/dusken/api/abstract_groupmember.py new file mode 100644 index 0000000..11b03b5 --- /dev/null +++ b/dusken/api/abstract_groupmember.py @@ -0,0 +1,104 @@ +from django.shortcuts import get_object_or_404 +from tastypie import fields +from tastypie.authorization import Authorization +from tastypie.bundle import Bundle +from tastypie.exceptions import ImmediateHttpResponse +from tastypie.http import HttpNotFound, HttpAccepted, HttpCreated, HttpResponse, HttpBadRequest, HttpNoContent +from tastypie.resources import Resource +from dusken.models import Member, Group + +import logging + +class GroupMemberObject(object): + def __init__(self): + self.member_id = 0 + self.group_id = [] + self.is_member = True + +class AbstractGroupMemberResource(Resource): + member_id = fields.IntegerField(attribute='member_id') + group_id = fields.IntegerField(attribute='group_id') + is_member = fields.BooleanField(attribute='is_member') + + class Meta: + object_class = GroupMemberObject + list_allowed_methods = [ 'get' ] + detail_allowed_methods = [ 'get', 'delete', 'post' ] + authorization = Authorization() # TODO: Obvious + + def detail_uri_kwargs(self, bundle_or_obj): + kwargs = { + 'resource_name': self._meta.resource_name, + } + + return kwargs + + def get_object_list(self, request): + return self.obj_get_list(request) + + + def obj_get_list(self, request=None, **kwargs): + raise NotImplementedError + + def obj_get(self, request=None, **kwargs): + member_id = int(kwargs['member_id']) + member = get_object_or_404(Member, pk=member_id) + + group_id = int(kwargs['group_id']) + group = get_object_or_404(Group, pk=group_id) + + obj = GroupMemberObject() + obj.member_id = member_id + obj.group_id = group_id + + if self._member_has_group(member, group): + obj.is_member = True + else: + obj.is_member = False + + return obj + + def post_detail(self, request=None, **kwargs): + """ + Creates a new relationship between a member and a group. + """ + member_id = int(kwargs['member_id']) + member = get_object_or_404(Member, pk=member_id) + + group_id = int(kwargs['group_id']) + group = get_object_or_404(Group, pk=group_id) + + if self._member_has_group(member, group): + # TODO: Check for a correct status code to return in this case. + return HttpCreated() + + member.groups.add(group) + member.save() + + return HttpCreated() + + def obj_update(self, bundle, request=None, **kwargs): + logging.info("Someone tried to obj_update, but I can't do that, man, I can't do that!") + return # We can't update. + + def obj_delete_list(self, request=None, **kwargs): + logging.info("Someone tried to obj_delete_list, but I can't do that, man, I can't do that!") + return # We can't delete lists. + + def obj_delete(self, request=None, **kwargs): + member_id = int(kwargs['member_id']) + member = get_object_or_404(Member, pk=member_id) + + group_id = int(kwargs['group_id']) + group = get_object_or_404(Group, pk=group_id) + + group.user_set.remove(member) + return HttpNoContent() + + def rollback(self, bundles): + logging.info("Someone tried to rollback, but I can't do that, man, I can't do that!") + return + + def _member_has_group(self, member, group): + return member.groups.filter(id=group.id).count() != 0 + diff --git a/dusken/api/groupsbymember.py b/dusken/api/groupsbymember.py index 97ad330..5288767 100644 --- a/dusken/api/groupsbymember.py +++ b/dusken/api/groupsbymember.py @@ -1,113 +1,20 @@ from django.shortcuts import get_object_or_404 -from tastypie import fields -from tastypie.authorization import Authorization -from tastypie.bundle import Bundle -from tastypie.exceptions import ImmediateHttpResponse -from tastypie.http import HttpNotFound, HttpAccepted, HttpCreated, HttpResponse, HttpBadRequest, HttpNoContent -from tastypie.resources import Resource +from dusken.api.abstract_groupmember import GroupMemberObject, AbstractGroupMemberResource from dusken.models import Member, Group import logging -class GroupByMemberObject(object): - def __init__(self): - self.member_id = 0 - self.group_id = [] - self.is_member = True - -class GroupsByMemberResource(Resource): - member_id = fields.IntegerField(attribute='member_id') - group_id = fields.IntegerField(attribute='group_id') - is_member = fields.BooleanField(attribute='is_member') - - class Meta: - object_class = GroupByMemberObject - list_allowed_methods = [ 'get' ] - detail_allowed_methods = [ 'get', 'delete', 'post' ] - authorization = Authorization() # TODO: Obvious - - def detail_uri_kwargs(self, bundle_or_obj): - kwargs = { - 'resource_name': self._meta.resource_name, - } - - return kwargs - - def get_object_list(self, request): - return self.obj_get_list(request) - - +class GroupsByMemberResource(AbstractGroupMemberResource): def obj_get_list(self, request=None, **kwargs): member_id = int(kwargs['member_id']) member = get_object_or_404(Member, pk=member_id) groups = [] for group in member.groups.all(): - obj = GroupByMemberObject - obj.member_id = member_id + obj = GroupMemberObject() + obj.member_id = member.id obj.group_id = group.id obj.is_member = True groups.append(obj) return groups - def obj_get(self, request=None, **kwargs): - member_id = int(kwargs['member_id']) - member = get_object_or_404(Member, pk=member_id) - - group_id = int(kwargs['group_id']) - group = get_object_or_404(Group, pk=group_id) - - obj = GroupByMemberObject() - obj.member_id = member_id - obj.group_id = group_id - - if self.__member_has_group(member, group): - obj.is_member = True - else: - obj.is_member = False - - return obj - - def post_detail(self, request=None, **kwargs): - """ - Creates a new relationship between a member and a group. - """ - member_id = int(kwargs['member_id']) - member = get_object_or_404(Member, pk=member_id) - - group_id = int(kwargs['group_id']) - group = get_object_or_404(Group, pk=group_id) - - if self.__member_has_group(member, group): - # TODO: Check for a correct status code to return in this case. - return HttpCreated() - - member.groups.add(group) - member.save() - - return HttpCreated() - - def obj_update(self, bundle, request=None, **kwargs): - logging.info("Someone tried to obj_update, but I can't do that, man, I can't do that!") - return # We can't update. - - def obj_delete_list(self, request=None, **kwargs): - logging.info("Someone tried to obj_delete_list, but I can't do that, man, I can't do that!") - return # We can't delete lists. - - def obj_delete(self, request=None, **kwargs): - member_id = int(kwargs['member_id']) - member = get_object_or_404(Member, pk=member_id) - - group_id = int(kwargs['group_id']) - group = get_object_or_404(Group, pk=group_id) - - group.user_set.remove(member) - return HttpNoContent() - - def rollback(self, bundles): - logging.info("Someone tried to rollback, but I can't do that, man, I can't do that!") - return - - def __member_has_group(self, member, group): - return member.groups.filter(id=group.id).count() != 0 diff --git a/dusken/api/membersbygroup.py b/dusken/api/membersbygroup.py index 4b13d0b..bed7315 100644 --- a/dusken/api/membersbygroup.py +++ b/dusken/api/membersbygroup.py @@ -1,112 +1,20 @@ -from tastypie import fields -from tastypie.authorization import Authorization -from tastypie.bundle import Bundle -from tastypie.exceptions import ImmediateHttpResponse -from tastypie.http import HttpNotFound, HttpAccepted, HttpCreated, HttpResponse, HttpBadRequest -from tastypie.resources import Resource +from django.shortcuts import get_object_or_404 +from dusken.api.abstract_groupmember import GroupMemberObject, AbstractGroupMemberResource from dusken.models import Member, Group import logging -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 = [] - detail_allowed_methods = [ 'get', 'delete', 'post' ] - 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): - logging.info("Someone tried to get_object_list, but I can't do that, man, I can't do that!") - pass # We can't return lists. - +class MembersByGroupResource(AbstractGroupMemberResource): def obj_get_list(self, request=None, **kwargs): - logging.info("Someone tried to obj_get_list, but I can't do that, man, I can't do that!") - pass # We can't return lists. + group_id = int(kwargs['group_id']) + group = get_object_or_404(Group, pk=group_id) + members = [] + for member in group.user_set.all(): + obj = GroupMemberObject() + obj.member_id = member.id + obj.group_id = group.id + obj.is_member = True + members.append(obj) - def obj_get(self, request=None, **kwargs): - keys = kwargs['pk'].split("/") - group_id = int(keys[0]) - group = Group.objects.get(id=group_id) + return members - member = None - if len(keys) > 1: - member_id = int(keys[1]) - member = Member.objects.get(id=member_id) - - if member is None: - return None - - if member.groups.filter(name=group.name).count() == 0: - raise ImmediateHttpResponse(HttpNotFound()) - - if group is None: - return None - - obj = MembersByGroupObject() - obj.group_id = group.id - - if member is None: - for member in group.user_set.all(): - obj.members.append(member.id) - else: - obj.members.append(member.id) - - return obj - - def post_detail(self, request=None, **kwargs): - """ - Creates a new relationship be. - """ - - keys = kwargs['pk'].split('/') - if len(keys) < 2: - raise ImmediateHttpResponse(HttpBadRequest()) - - member_id = keys[0] - group_id = keys[1] - - - logging.error("Calling create function with parameters {0}".format(str(kwargs))) - return HttpCreated() - - def obj_update(self, bundle, request=None, **kwargs): - logging.info("Someone tried to obj_update, but I can't do that, man, I can't do that!") - return # We can't update. - - def obj_delete_list(self, request=None, **kwargs): - logging.info("Someone tried to obj_delete_list, but I can't do that, man, I can't do that!") - return # We can't delete lists. - - def obj_delete(self, request=None, **kwargs): - print str(kwargs +"\n\n\n\n") - group = Group.objects.get(id=group_id) - member = Member.objects.get(id=user_id) - group.user_set.remove(member) - - - def rollback(self, bundles): - logging.info("Someone tried to rollback, but I can't do that, man, I can't do that!") - return