Archived
Fancier docs.
This commit is contained in:
1 parent
6e5c3a89c7
commit
9943fb1165
4 files changed
+168
-37
No files matched your search
@@ -1,6 +1,8 @@
|
||||
Group
|
||||
=====
|
||||
|
||||
GET /group/
|
||||
-----------
|
||||
.. http:get:: /group/
|
||||
|
||||
Return information about all groups.
|
||||
@@ -13,6 +15,8 @@ Group
|
||||
|
||||
:statuscode 200: OK!
|
||||
|
||||
GET /group/(int)/
|
||||
-----------------
|
||||
.. http:get:: /group/(int:group_id)/
|
||||
|
||||
Return information about a specific group.
|
||||
@@ -24,6 +28,8 @@ Group
|
||||
:statuscode 200: OK!
|
||||
:statuscode 404: Group (`group_id`) was not found.
|
||||
|
||||
POST /group/
|
||||
------------
|
||||
.. http:post:: /group/
|
||||
|
||||
Create new group.
|
||||
@@ -41,6 +47,8 @@ Group
|
||||
:statuscode 403: You don't have necessary permissions.
|
||||
:statuscode 500: Group with this `posix_name` alredy exists or malformed body.
|
||||
|
||||
PATCH /group/(int)/
|
||||
-------------------
|
||||
.. http:patch:: /group/(int:group_id)/
|
||||
|
||||
Change name of a group.
|
||||
@@ -57,3 +65,11 @@ Group
|
||||
:statuscode 202: Changed!
|
||||
:statuscode 403: You don't have enough permissions to change this group.
|
||||
:statuscode 500: Group (`group_id`) does not exist or malformed body.
|
||||
|
||||
DELETE /group/(int)/
|
||||
--------------------
|
||||
.. http:delete:: /group/(int:group_id)/
|
||||
|
||||
Delete a group.
|
||||
|
||||
:statuscode 204: Deleted!
|
||||
+70
-13
@@ -1,6 +1,8 @@
|
||||
Member
|
||||
======
|
||||
|
||||
GET /member/
|
||||
------------
|
||||
.. http:get:: /member/
|
||||
|
||||
Returns info about all members.
|
||||
@@ -16,6 +18,51 @@ Member
|
||||
:query limit: limit number. default is 20
|
||||
:statuscode 200: Everything is gonna be alright.
|
||||
|
||||
GET /member/(int)/
|
||||
------------------
|
||||
.. http:get:: /member/(int:member_id)/
|
||||
|
||||
Returns info about member (`member_id`).
|
||||
|
||||
**Example request**:
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
GET /member/1337/?format=json HTTP/1.1
|
||||
Content-Type: application/json
|
||||
|
||||
:statuscode 200: OK!
|
||||
:statuscode 403: No permissions, mate.
|
||||
:statuscode 404: There's no user with given id.
|
||||
|
||||
GET /member/(int)/group/
|
||||
------------------------
|
||||
.. http:get:: /member/(int:member_id)/group/
|
||||
|
||||
Gets all groups member (`member_id`) is a member of.
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
GET /member/1337/group/?format=json HTTP/1.1
|
||||
|
||||
:statuscode 200: OK!
|
||||
:statuscode 403: You don't have enough permissions.
|
||||
|
||||
GET /member/(int)/group/(int)/
|
||||
------------------------------
|
||||
.. http:get:: /member/(int:member_id)/group/(int:group_id)/
|
||||
|
||||
Checks if member (`member_id`) is a member of group (`group_id`).
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
GET /member/1337/group/42/?format=json HTTP/1.1
|
||||
|
||||
:statuscode 200: OK!
|
||||
:statuscode 403: No go, brother :(
|
||||
|
||||
POST /member/
|
||||
-------------
|
||||
.. http:post:: /member/
|
||||
|
||||
Creates a new member with data given in body (json)
|
||||
@@ -35,20 +82,17 @@ Member
|
||||
:statuscode 201: User created.
|
||||
:statuscode 500: Invalid body or username already exists.
|
||||
|
||||
.. http:get:: /member/(int:member_id)/
|
||||
POST /member/(int)/group/(int)/
|
||||
-------------------------------
|
||||
.. http:post:: /member/(int:member_id)/group/(int:group_id)/
|
||||
|
||||
Returns info about member (`member_id`).
|
||||
Adds member (`member_id`) to group (`group_id`).
|
||||
|
||||
**Example request**:
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
GET /member/1337/?format=json HTTP/1.1
|
||||
Content-Type: application/json
|
||||
|
||||
:statuscode 200: OK!
|
||||
:statuscode 404: There's no user with given id.
|
||||
:statuscode 201: User added!
|
||||
:statuscode 403: Yeah...no.
|
||||
|
||||
PATCH /member/(int)/
|
||||
--------------------
|
||||
.. http:patch:: /member/(int:member_id)/
|
||||
|
||||
Updates fields of a member (`member_id`). Can't update username.
|
||||
@@ -65,9 +109,11 @@ Member
|
||||
}
|
||||
|
||||
:statuscode 202: User changed.
|
||||
:statuscode 403: Returned if request contains `"username"` field.
|
||||
:statuscode 403: Returned if request contains `"username"` field or you're missing necessary permissions.
|
||||
:statuscode 500: Invalid body.
|
||||
|
||||
DELETE /member/(int)/
|
||||
---------------------
|
||||
.. http:delete:: /member/(int:member_id)/
|
||||
|
||||
Deactivates a member.
|
||||
@@ -76,4 +122,15 @@ Member
|
||||
|
||||
DELETE /member/1337/?format=json HTTP/1.1
|
||||
|
||||
:statusc:de 403:
|
||||
:statuscode 204: User deactivated.
|
||||
:statuscode 403: You don't have enough permissions to deactivate users.
|
||||
|
||||
DELETE /member/(int)/group/(int)/
|
||||
---------------------------------
|
||||
|
||||
.. http:delete:: /member/(int:member_id)/group/(group_id)/
|
||||
|
||||
Removes a member from a group.
|
||||
|
||||
:statuscode 204: User removed from group.
|
||||
:statuscode 403: I can't let you do that, Dave.
|
||||
@@ -1,9 +1,14 @@
|
||||
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
|
||||
from tastypie.resources import Resource
|
||||
from dusken.models import Member, Group
|
||||
|
||||
import logging
|
||||
|
||||
class GroupsByMemberObject(object):
|
||||
def __init__(self):
|
||||
self.member_id = 0
|
||||
@@ -14,24 +19,19 @@ class GroupsByMemberResource(Resource):
|
||||
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' ]
|
||||
}
|
||||
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.member_id
|
||||
kwargs['pk'] = bundle_or_obj.obj.group_id
|
||||
else:
|
||||
kwargs['pk'] = bundle_or_obj.member_id
|
||||
kwargs['pk'] = bundle_or_obj.group_id
|
||||
|
||||
if self._meta.api_name is not None:
|
||||
kwargs['api_name'] = self._meta.api_name
|
||||
@@ -39,41 +39,82 @@ class GroupsByMemberResource(Resource):
|
||||
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.
|
||||
|
||||
def obj_get_list(self, request=None, **kwargs):
|
||||
pass # We can't return lists.
|
||||
member_id = int(kwargs['pk'])
|
||||
member = get_object_or_404(Member, pk=member_id)
|
||||
|
||||
obj = GroupsByMemberObject()
|
||||
obj.member_id = member_id
|
||||
|
||||
#print "\n\n\n" +str(member.groups.all()) +"\n\n\n"
|
||||
for group in member.groups.all():
|
||||
obj.groups.append(group)
|
||||
|
||||
return obj
|
||||
|
||||
def obj_get(self, request=None, **kwargs):
|
||||
member_id = int(kwargs['pk'])
|
||||
member = Member.objects.get(id=member_id)
|
||||
|
||||
if member is None:
|
||||
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 = GroupsByMemberObject()
|
||||
obj.member_id = member.id
|
||||
for group in member.groups.all():
|
||||
obj.groups.append(group.id)
|
||||
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):
|
||||
group = Group.objects.get(id=group_id)
|
||||
member = Member.objects.get(id=user_id)
|
||||
group.user_set.add(member)
|
||||
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):
|
||||
pass # We can't update.
|
||||
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):
|
||||
pass # We can't delete lists.
|
||||
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):
|
||||
pass
|
||||
logging.info("Someone tried to rollback, but I can't do that, man, I can't do that!")
|
||||
return
|
||||
+18
-1
@@ -1,10 +1,14 @@
|
||||
from django.contrib.auth.models import User
|
||||
from django.conf.urls import url
|
||||
from django.shortcuts import get_object_or_404
|
||||
from tastypie import fields
|
||||
from tastypie.authorization import Authorization
|
||||
from tastypie.exceptions import ImmediateHttpResponse
|
||||
from tastypie.http import HttpForbidden, HttpNoContent
|
||||
from tastypie.http import HttpForbidden, HttpNoContent, HttpResponse
|
||||
from tastypie.resources import ModelResource, ALL
|
||||
from dusken.models import *
|
||||
from dusken.api.membersbygroup import MembersByGroupResource
|
||||
from dusken.api.groupsbymember import GroupsByMemberResource
|
||||
|
||||
|
||||
class MemberResource(ModelResource):
|
||||
@@ -28,6 +32,19 @@ class MemberResource(ModelResource):
|
||||
'phone_number' : [ 'exact' ],
|
||||
}
|
||||
|
||||
def prepend_urls(self):
|
||||
return [
|
||||
url(r"^(?P<resource_name>%s)/(?P<pk>\d+)/groups/$" % (self._meta.resource_name), self.wrap_view("get_groups"), name="api_get_groups"),
|
||||
]
|
||||
|
||||
def get_groups(self, request, **kwargs):
|
||||
pk = kwargs['pk']
|
||||
member = get_object_or_404(Member, pk=pk)
|
||||
|
||||
#response = HttpResponse(self._meta.serializer.serialize(member, self.determine_format(request)))
|
||||
resource = GroupsByMemberResource()
|
||||
return resource.get_list(request, pk=pk)
|
||||
|
||||
def apply_filters(self, request, applicable_filters):
|
||||
# Extra filters are used for filtering by attributes in User class. Find out if there
|
||||
# are any, and if so, apply them.
|
||||
|
||||
Reference in new issue
Block a user