From 9bc68f15dfee32a821e291773ea6e910cad12173 Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Fri, 27 Dec 2013 22:55:55 +0100 Subject: [PATCH] MeResource: cleanups and fixes --- dusken/admin.py | 2 ++ dusken/api/me.py | 48 ++++++++++-------------------------------------- dusken/models.py | 8 ++++---- dusken/urls.py | 10 +++++++--- 4 files changed, 23 insertions(+), 45 deletions(-) diff --git a/dusken/admin.py b/dusken/admin.py index bb56d31..6657197 100644 --- a/dusken/admin.py +++ b/dusken/admin.py @@ -34,5 +34,7 @@ admin.site.register(Member, MemberAdmin) admin.site.register(MemberMeta) admin.site.register(Membership) admin.site.register(MembershipType) +admin.site.register(Payment) +admin.site.register(PaymentType) admin.site.register(PlaceOfStudy) admin.site.register(ServiceHook) diff --git a/dusken/api/me.py b/dusken/api/me.py index cba549d..85f4942 100644 --- a/dusken/api/me.py +++ b/dusken/api/me.py @@ -1,36 +1,24 @@ -from django.conf.urls import url -from django.contrib.auth.hashers import make_password -from django.contrib.auth.models import User -from django.db import IntegrityError -from django.shortcuts import get_object_or_404 - -from tastypie.authorization import Authorization -from tastypie.exceptions import ImmediateHttpResponse, BadRequest -from tastypie.http import HttpForbidden, HttpNoContent, HttpResponse, HttpAccepted from tastypie import fields -from tastypie.resources import ModelResource, ALL -from tastypie.validation import CleanedDataFormValidation +from tastypie.resources import ModelResource -from dusken.authentication import ServiceAuthentication, OAuth20Authentication +from dusken.authentication import OAuth20Authentication from dusken.authorization import MyDjangoAuthorization -from dusken.models import * -from dusken.utils.api import generate_username, random_string -from dusken.forms import MemberCreateForm +from dusken.models import Member from dusken.api.division import DivisionResource from dusken.api.membership import MembershipResource from dusken.api.address import AddressResource -from dusken.api.groupsbymember import GroupsByMemberResource +from dusken.api.group import GroupResource class MeResource(ModelResource): """ - This class provides following endpoints: - (1) /api/v1/me/ + This class provides following endpoint: + /api/v1/me/ """ - groups = fields.ToManyField(GroupsByMemberResource, 'groups') - divisions = fields.ToManyField(DivisionResource, 'division_set') - memberships = fields.ToManyField(MembershipResource, 'membership_set') - #address = fields.ForeignKey(AddressResource, 'address') + groups = fields.ToManyField(GroupResource, 'groups', full=True) + divisions = fields.ToManyField(DivisionResource, 'division_set', full=True) + memberships = fields.ToManyField(MembershipResource, 'membership_set', full=True) + address = fields.ForeignKey(AddressResource, 'address', full=True) class Meta: queryset = Member.objects.all() @@ -45,26 +33,10 @@ class MeResource(ModelResource): # Only return the authenticated user's member object return super(MeResource, self).get_object_list(request).filter(pk=request.user.id) - def detail_groups(self, request, **kwargs): - resource = GroupsByMemberResource() - return resource.dispatch_detail(request, **kwargs) - def dehydrate(self, bundle): """ Catches GET requests and adds more data. """ bundle.data['has_valid_membership'] = bundle.obj.has_valid_membership() - # Add address: - #address = bundle.obj.address - #if address is None: - # bundle.data['address'] = None - #else: - # # TODO: There has to be a better way... - # bundle.data['address'] = { - # 'city' : address.city, - # 'country' : address.country.name, - # 'postal_code' : address.postal_code, - # 'street_address' : address.street_address, - # } return bundle diff --git a/dusken/models.py b/dusken/models.py index f4da27b..efeaf73 100644 --- a/dusken/models.py +++ b/dusken/models.py @@ -35,7 +35,7 @@ class Member(django.contrib.auth.models.AbstractUser): # FIXME more than one membership? # FIXME membership_type? membership = self.membership_set.filter(end_date__gt=datetime.datetime.now()) - return len(membership) == 1 and membership.is_valid() + return len(membership) == 1 and membership[0].is_valid() class Membership(AbstractBaseModel): def __unicode__(self): @@ -67,7 +67,7 @@ class MembershipType(AbstractBaseModel): is_active = models.BooleanField(default=True) does_not_expire = models.BooleanField(default=False) -class PaymentType(AbstractBaseModel): +class PaymentType(models.Model): def __unicode__(self): return u"{}".format(self.name) @@ -77,7 +77,7 @@ class PaymentType(AbstractBaseModel): class Payment(AbstractBaseModel): def __unicode__(self): - return self.payment_type #TODO + return "{},- via {}".format(self.value, self.payment_type.name) # Note: More like tokens? payment_type = models.ForeignKey('dusken.PaymentType') @@ -156,7 +156,7 @@ class Division(AbstractBaseModel): is_active = models.BooleanField(default=True) members = models.ManyToManyField('dusken.Member', null=True, blank=True) parent = models.ForeignKey('self', null=True, blank=True, related_name='children') - groups = models.ManyToManyField(django.contrib.auth.models.Group, null=True, blank=True) # permissions + groups = models.ManyToManyField(django.contrib.auth.models.Group, null=True, blank=True) # permissions # TODO remove this? class ServiceHook(AbstractBaseModel): """ diff --git a/dusken/urls.py b/dusken/urls.py index e808d3f..ef04017 100644 --- a/dusken/urls.py +++ b/dusken/urls.py @@ -2,6 +2,8 @@ from django.conf.urls import patterns, include, url from django.contrib import admin from tastypie.api import Api +from dusken.api.address import AddressResource +from dusken.api.division import DivisionResource from dusken.api.me import MeResource from dusken.api.member import MemberResource, MemberCreateResource from dusken.api.membership import MembershipResource @@ -11,11 +13,13 @@ from dusken.api.institution import InstitutionResource admin.autodiscover() v1_api = Api(api_name='v1') -v1_api.register(MeResource()) -v1_api.register(MemberResource()) -v1_api.register(MembershipResource()) +v1_api.register(AddressResource()) +v1_api.register(DivisionResource()) v1_api.register(GroupResource()) v1_api.register(InstitutionResource()) +v1_api.register(MemberResource()) +v1_api.register(MembershipResource()) +v1_api.register(MeResource()) urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)),