diff --git a/src/api/models.py b/src/api/models.py index 5375996..fd82e12 100644 --- a/src/api/models.py +++ b/src/api/models.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- from tastypie import fields +from tastypie.constants import ALL_WITH_RELATIONS, ALL from tastypie.resources import ModelResource from accounts.models import User -from super_archives.models import Message +from super_archives.models import Message, EmailAddress from proxy.models import Revision, Ticket, Wiki @@ -15,13 +16,73 @@ class UserResource(ModelResource): excludes = ['email', 'password', 'is_active', 'is_staff', 'is_superuser', 'verification_hash'] allowed_methods = ['get', ] + filtering = { + 'username': ALL, + 'institution': ALL, + 'role': ALL, + 'twitter': ALL, + 'facebook': ALL, + 'google_talk': ALL, + 'github': ALL, + 'webpage': ALL, + 'bio': ALL, + } + + def build_filters(self, filters=None): + if filters is None: + filters = {} + + orm_filters = super(UserResource, self).build_filters(filters) + + if 'email' in filters: + qs = User.objects.filter(email=filters['email']) + orm_filters['pk__in'] = [i.pk for i in qs] + + return orm_filters + + +class EmailAddressResource(ModelResource): + user = fields.ForeignKey(UserResource, 'user', full=False, null=True) + + class Meta: + queryset = EmailAddress.objects.all() + resource_name = 'emailaddress' + excludes = ['address', 'md5'] + allowed_methods = ['get', ] + filtering = { + 'user': ALL_WITH_RELATIONS, + 'real_name': ALL, + } + + def build_filters(self, filters=None): + if filters is None: + filters = {} + + orm_filters = super(EmailAddressResource, self).build_filters(filters) + + if 'email' in filters or 'address' in filters: + address = filters.get('email') if filters.get('email') else \ + filters.get('address') + qs = EmailAddress.objects.filter(address=address) + orm_filters['pk__in'] = [i.pk for i in qs] + + return orm_filters class MessageResource(ModelResource): + emailaddress = fields.ForeignKey(EmailAddressResource, 'from_address', + full=False) + class Meta: queryset = Message.objects.all() resource_name = 'message' excludes = ['spam', 'subject_clean', 'message_id'] + filtering = { + 'from_address': ALL_WITH_RELATIONS, + 'subject': ALL, + 'body': ALL, + 'received_time': ALL, + } class RevisionResource(ModelResource): @@ -29,6 +90,14 @@ class RevisionResource(ModelResource): queryset = Revision.objects.all() resource_name = 'revision' excludes = ['collaborators', ] + filtering = { + 'key': ALL, + 'rev': ALL, + 'author': ALL, + 'message': ALL, + 'repository_name': ALL, + 'created': ALL, + } class TicketResource(ModelResource): @@ -36,6 +105,23 @@ class TicketResource(ModelResource): queryset = Ticket.objects.all() resource_name = 'ticket' excludes = ['collaborators', ] + filtering = { + 'id': ALL, + 'summary': ALL, + 'description': ALL, + 'milestone': ALL, + 'priority': ALL, + 'component': ALL, + 'version': ALL, + 'severity': ALL, + 'reporter': ALL, + 'author': ALL, + 'status': ALL, + 'keywords': ALL, + 'created': ALL, + 'modified': ALL, + 'modified_by': ALL, + } class WikiResource(ModelResource): @@ -43,3 +129,12 @@ class WikiResource(ModelResource): queryset = Wiki.objects.all() resource_name = 'wiki' excludes = ['collaborators', ] + filtering = { + 'name': ALL, + 'wiki_text': ALL, + 'author': ALL, + 'name': ALL, + 'created': ALL, + 'modified': ALL, + 'modified_by': ALL, + } diff --git a/src/api/urls.py b/src/api/urls.py index 6f35ef3..b5d7f69 100644 --- a/src/api/urls.py +++ b/src/api/urls.py @@ -4,13 +4,14 @@ from django.conf.urls import patterns, include, url from tastypie.api import Api -from .models import (UserResource, MessageResource, RevisionResource, - TicketResource, WikiResource) +from .models import (UserResource, EmailAddressResource, MessageResource, + RevisionResource, TicketResource, WikiResource) from .views import VoteView api = Api(api_name='colab') api.register(UserResource()) +api.register(EmailAddressResource()) api.register(MessageResource()) api.register(RevisionResource()) api.register(TicketResource()) -- libgit2 0.21.2