Fixed implementation to match tests.

This commit is contained in:
Robert Kolner committed 2013-02-21 14:36:57 +01:00
1 parent 59b0efc84a
commit 6ae201c71c
4 files changed
+47 -6

No files matched your search

+1 -1
View File
@@ -122,7 +122,7 @@ INSTALLED_APPS = (
)
# Profile of the User class used for authentication.
AUTH_PROFILE_MODEL = 'main.models.Member'
AUTH_PROFILE_MODULE = 'main.Member'
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
+39 -3
View File
@@ -1,3 +1,4 @@
from tastypie import fields
from tastypie.resources import ModelResource, ALL
from tastypie.authorization import Authorization
from main.models import *
@@ -9,6 +10,11 @@ class MemberResource(ModelResource):
(1) /api/v1/member/
(2) /api/v1/member/{id}/
"""
username = fields.CharField(attribute='username', readonly=True)
email = fields.CharField(attribute='email', readonly=True)
first_name = fields.CharField(attribute='first_name', readonly=True)
last_name = fields.CharField(attribute='last_name', readonly=True)
class Meta:
queryset = Member.objects.all()
resource_name = 'member'
@@ -17,8 +23,38 @@ class MemberResource(ModelResource):
authorization = Authorization() # TODO: for dev (VERY INSECURE)
excludes = [ 'password' ]
filtering = {
'username' : ALL,
'epost' : ALL,
'phone_number' : ALL
'username' : [ 'exact' ],
'email' : [ 'exact' ],
'first_name' : [ 'exact' ],
'last_name' : [ 'exact' ],
'phone_number' : [ 'exact' ],
}
def build_filters(self, filters=None):
if filters is None:
filters = {}
orm_filters = super(MemberResource, self).build_filters(filters)
return orm_filters
def apply_filters(self, request, applicable_filters):
extra_filters = {}
if 'username__exact' in applicable_filters:
extra_filters['username'] = applicable_filters.pop('username__exact')
if 'first_name__exact' in applicable_filters:
extra_filters['first_name'] = applicable_filters.pop('first_name__exact')
if 'last_name__exact' in applicable_filters:
extra_filters['last_name'] = applicable_filters.pop('last_name__exact')
if 'email__exact' in applicable_filters:
extra_filters['email'] = applicable_filters.pop('email__exact')
filters = super(MemberResource, self).apply_filters(request, applicable_filters)
for key,value in extra_filters.items():
filters = filter(lambda m: getattr(m.user, key) == value, filters)
return filters
def dehydrate(self, bundle):
return bundle
+2 -2
View File
@@ -11,6 +11,7 @@ class MembershipResource(ModelResource):
(1) /api/v1/membership/
"""
member = fields.ForeignKey(MemberResource, 'member')
expires = fields.DateTimeField(attribute='expires', readonly=True)
class Meta:
queryset = Membership.objects.all()
@@ -24,8 +25,7 @@ class MembershipResource(ModelResource):
}
def dehydrate(self, bundle):
bundle.data['expires'] = str(bundle.obj.expires().date())
bundle.data['member'] = bundle.obj.member.id
bundle.data['mtype'] = bundle.obj.mtype.id
bundle.data['payment'] = bundle.obj.payment.id
bundle.data['payment'] = None if not bundle.obj.payment else bundle.obj.payment.id
return bundle
+5
View File
@@ -29,6 +29,11 @@ class Member(models.Model):
# Auth:
user = models.OneToOneField(User)
def username(self): return self.user.username
def email(self): return self.user.email
def first_name(self): return self.user.first_name
def last_name(self): return self.user.last_name
# Profile fields:
phone_number = models.IntegerField(unique=True, null=True, blank=True)
date_of_birth = models.DateField(blank=True, null=True)