Abstraction <3

This commit is contained in:
Robert Kolner committed 2013-07-15 15:28:19 +02:00
1 parent 6451b45c91
commit bf7783b16e
3 files changed
+121 -202

No files matched your search

+104
View File
@@ -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
+4 -97
View File
@@ -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
+13 -105
View File
@@ -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