This repository has been archived on 2025-06-17. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
dusken-prototype/dusken/api/membersbygroup.py
T

92 lines
2.6 KiB
Python

from tastypie import fields
from tastypie.authorization import Authorization
from tastypie.bundle import Bundle
from tastypie.exceptions import ImmediateHttpResponse
from tastypie.http import HttpNotFound
from tastypie.resources import Resource
from dusken.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):
keys = kwargs['pk'].split("/")
group_id = int(keys[0])
group = Group.objects.get(id=group_id)
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 obj_create(self, request=None, **kwargs):
pass # TODO
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