Fancier docs.

This commit is contained in:
Robert Kolner committed 2013-06-07 15:31:28 +02:00
1 parent 6e5c3a89c7
commit 9943fb1165
4 files changed
+168 -37

No files matched your search

+16
View File
@@ -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
View File
@@ -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.
+64 -23
View File
@@ -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
View File
@@ -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.