From 41435ed0777fa36850eb82fc48355758b5fe7b4b Mon Sep 17 00:00:00 2001 From: Paal Braathen Date: Wed, 26 Jun 2013 19:37:39 +0200 Subject: [PATCH 1/4] Added institution endpoint --- .gitignore | 2 +- dusken/admin.py | 6 +++++- dusken/api/institution.py | 25 +++++++++++++++++++++++++ dusken/models.py | 4 ++++ dusken/urls.py | 2 ++ 5 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 dusken/api/institution.py diff --git a/.gitignore b/.gitignore index c6a6f48..a789335 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ settings.py *.bak build docs/_build - +db.sqlite3 diff --git a/dusken/admin.py b/dusken/admin.py index 958a432..9e0e799 100644 --- a/dusken/admin.py +++ b/dusken/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from dusken.models import Member +from dusken.models import Member, Institution class MemberAdmin(admin.ModelAdmin): fieldsets = [ @@ -8,4 +8,8 @@ class MemberAdmin(admin.ModelAdmin): ('User data', {'fields' : ['phone_number', 'date_of_birth', 'address', 'place_of_study']}), ] +class InstitutionAdmin(admin.ModelAdmin): + pass + admin.site.register(Member, MemberAdmin) +admin.site.register(Institution, InstitutionAdmin) diff --git a/dusken/api/institution.py b/dusken/api/institution.py new file mode 100644 index 0000000..f42e8b2 --- /dev/null +++ b/dusken/api/institution.py @@ -0,0 +1,25 @@ +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, HttpResponse +from tastypie.resources import ModelResource, ALL +from dusken.models import * +from dusken.api.membersbygroup import MembersByGroupResource +from dusken.api.groupsbymember import GroupsByMemberResource + + +class InstitutionResource(ModelResource): + + class Meta: + queryset = Institution.objects.all() + resource_name = 'institution' + list_allowed_methods = [ 'get', 'post' ] + detail_allowed_methods = [ 'get', 'patch', 'delete' ] + authorization = Authorization() # TODO: for dev (VERY INSECURE) + filtering = { + 'name' : [ 'exact' ], + } + diff --git a/dusken/models.py b/dusken/models.py index dee0f1d..73ba747 100644 --- a/dusken/models.py +++ b/dusken/models.py @@ -15,7 +15,11 @@ class Address(models.Model): updated = models.DateTimeField(auto_now=True) class Institution(models.Model): + def __unicode__(self): + return self.short_name +' - ' +self.name + name = models.CharField(max_length=255) + short_name = models.CharField(max_length=16) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) diff --git a/dusken/urls.py b/dusken/urls.py index 167049c..5a3d667 100644 --- a/dusken/urls.py +++ b/dusken/urls.py @@ -8,6 +8,7 @@ from dusken.api.membership import MembershipResource from dusken.api.group import GroupResource from dusken.api.groupsbymember import GroupsByMemberResource from dusken.api.membersbygroup import MembersByGroupResource +from dusken.api.institution import InstitutionResource admin.autodiscover() @@ -17,6 +18,7 @@ v1_api.register(MembershipResource()) v1_api.register(GroupResource()) v1_api.register(GroupsByMemberResource()) v1_api.register(MembersByGroupResource()) +v1_api.register(InstitutionResource()) urlpatterns = patterns('', url(r'^admin/doc/', include('django.contrib.admindocs.urls')), From 68c80722e9ef6a6d9b88c4bf1749f6553eb033f6 Mon Sep 17 00:00:00 2001 From: Paal Braathen Date: Wed, 26 Jun 2013 22:00:27 +0200 Subject: [PATCH 2/4] Added __unicode__ to model classes --- dusken/models.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dusken/models.py b/dusken/models.py index 73ba747..8881752 100644 --- a/dusken/models.py +++ b/dusken/models.py @@ -2,6 +2,9 @@ import django from django.db import models class Country(models.Model): + def __unicode__(self): + return self.name + name = models.CharField(max_length=50, unique=True) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) @@ -16,7 +19,7 @@ class Address(models.Model): class Institution(models.Model): def __unicode__(self): - return self.short_name +' - ' +self.name + return u'%s - %s' % (self.short_name, self.name) name = models.CharField(max_length=255) short_name = models.CharField(max_length=16) @@ -30,6 +33,9 @@ class PlaceOfStudy(models.Model): updated = models.DateTimeField(auto_now=True) class Member(django.contrib.auth.models.User): + def __unicode__(self): + return u'%s %s' % (self.first_name, self.last_name) + phone_number = models.IntegerField(unique=True, null=True, blank=True) date_of_birth = models.DateField(blank=True, null=True) legacy_id = models.IntegerField(unique=True, null=True, blank=True) From a41ca529fe48b0ba89615b90338705c3760e0d55 Mon Sep 17 00:00:00 2001 From: Paal Braathen Date: Wed, 26 Jun 2013 22:01:31 +0200 Subject: [PATCH 3/4] Fixed typo --- docs/member.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/member.rst b/docs/member.rst index b36767c..96b1a09 100644 --- a/docs/member.rst +++ b/docs/member.rst @@ -77,7 +77,7 @@ GET /member/(int)/ **Example response**: - .. sourcevode:: http + .. sourcecode:: http HTTP/1.1 200 OK Vary: Accept From 46ca4d55dec6106afecce6d3fdb5acdaf9186daf Mon Sep 17 00:00:00 2001 From: Paal Braathen Date: Wed, 26 Jun 2013 22:29:23 +0200 Subject: [PATCH 4/4] Added institution endpoint to docs --- docs/index.rst | 1 + docs/institution.rst | 55 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 docs/institution.rst diff --git a/docs/index.rst b/docs/index.rst index 44f08ec..aa909bf 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -13,6 +13,7 @@ Contents: member group + institution Indices and tables diff --git a/docs/institution.rst b/docs/institution.rst new file mode 100644 index 0000000..8322a60 --- /dev/null +++ b/docs/institution.rst @@ -0,0 +1,55 @@ +Institution +====== + +GET /institution/ +------------ +.. http:get:: /institution/ + + Returns info about all institutions. + + **Example request**: + + .. sourcecode:: http + + GET /institution/?format=json HTTP/1.1 + + :query offset: offset number. default is 0 + :query limit: limit number. default is 20 + :statuscode 200: Everything is gonna be alright. + :statuscode 403: User does not have necessary permissions. + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Vary: Accept + Content-Type: text/javascript + + { + "meta" : { + "limit" : 20, + "next" : null, + "offset" : 0, + "previous" : null, + "total_count" : 2 + }, + "objects" : [ + { + "created": "2013-06-26T12:15:52.889701", + "id": 1, + "name": "Universitetet i Oslo", + "resource_uri": "/api/v1/institution/1/", + "short_name": "UiO", + "updated": "2013-06-26T12:15:52.889785" + }, + { + "created": "2013-06-26T12:16:07.840886", + "id": 2, + "name": "Høgskolen i Oslo og Akershus", + "resource_uri": "/api/v1/institution/2/", + "short_name": "HiOA", + "updated": "2013-06-26T12:29:38.488712" + } + ] + }