From fe0cbbc6e1bbd247450f230156d7b16c937713ee Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 28 Mar 2013 12:10:37 +0100 Subject: [PATCH] Change default filtering system to more simple method. --- greenmine/scrum/api.py | 34 +++++++++++++++++-- .../scrum/management/commands/sample_data.py | 31 +++++++++-------- greenmine/scrum/serializers.py | 1 + 3 files changed, 48 insertions(+), 18 deletions(-) diff --git a/greenmine/scrum/api.py b/greenmine/scrum/api.py index 2789a6b7..085333d0 100644 --- a/greenmine/scrum/api.py +++ b/greenmine/scrum/api.py @@ -4,6 +4,34 @@ from greenmine.scrum.serializers import * from greenmine.scrum.models import * +class SimpleFilterMixin(object): + filter_fields = [] + filter_special_fields = [] + + _special_values_dict = { + 'true': True, + 'false': False, + 'null': None, + } + + def get_queryset(self): + queryset = super(SimpleFilterMixin, self).get_queryset() + query_params = {} + + for field_name in self.filter_fields: + if field_name in self.request.QUERY_PARAMS: + field_data = self.request.QUERY_PARAMS[field_name] + if field_data in self._special_values_dict: + query_params[field_name] = self._special_values_dict[field_data] + else: + query_params[field_name] = field_data + + if query_params: + queryset = queryset.filter(**query_params) + + return queryset + + class ProjectList(generics.ListCreateAPIView): model = Project serializer_class = ProjectSerializer @@ -14,7 +42,7 @@ class ProjectDetail(generics.RetrieveUpdateDestroyAPIView): serializer_class = ProjectSerializer -class MilestoneList(generics.ListCreateAPIView): +class MilestoneList(SimpleFilterMixin, generics.ListCreateAPIView): model = Milestone serializer_class = MilestoneSerializer filter_fields = ('project',) @@ -25,7 +53,7 @@ class MilestoneDetail(generics.RetrieveUpdateDestroyAPIView): serializer_class = MilestoneSerializer -class UserStoryList(generics.ListCreateAPIView): +class UserStoryList(SimpleFilterMixin, generics.ListCreateAPIView): model = UserStory serializer_class = UserStorySerializer filter_fields = ('project', 'milestone') @@ -89,7 +117,7 @@ class IssueStatusDetail(generics.RetrieveUpdateDestroyAPIView): serializer_class = IssueStatusSerializer -class TaskStatusList(generics.ListCreateAPIView): +class TaskStatusList(SimpleFilterMixin, generics.ListCreateAPIView): model = TaskStatus serializer_class = TaskStatusSerializer filter_fields = ('project',) diff --git a/greenmine/scrum/management/commands/sample_data.py b/greenmine/scrum/management/commands/sample_data.py index e0f6ee09..650b94ad 100644 --- a/greenmine/scrum/management/commands/sample_data.py +++ b/greenmine/scrum/management/commands/sample_data.py @@ -29,22 +29,22 @@ subjects = [ class Command(BaseCommand): + def create_user(self, counter): + user = User.objects.create( + username='user%d' % (counter), + first_name='user%d' % (counter), + email='foouser%d@domain.com' % (counter), + ) + + user.set_password('user%d' % (counter)) + user.save() + return user + @transaction.commit_on_success def handle(self, *args, **options): - def create_user(counter): - user = User( - username='user%d' % (counter), - first_name='user%d' % (counter), - email='foouser%d@domain.com' % (counter), - ) - - user.set_password('user%d' % (counter)) - user.save() - return user - users = [] for x in range(10): - users.append(create_user(x)) + users.append(self.create_user(x)) # projects for x in xrange(3): @@ -128,12 +128,13 @@ class Command(BaseCommand): for y in xrange(20): bug = Issue.objects.create( project=project, - severity=Severity.objects.get(project=project, order=2), - priority=Priority.objects.get(project=project, order=3), - type=IssueType.objects.get(project=project, order=1), subject=lorem_ipsum.words(random.randint(1, 5), common=False), description=lorem_ipsum.words(random.randint(1, 15), common=False), owner=project.owner, + severity=Severity.objects.get(project=project, order=2), + status=IssueStatus.objects.get(project=project, order=4), + priority=Priority.objects.get(project=project, order=2), + type=IssueType.objects.get(project=project, order=1), tags=[], ) diff --git a/greenmine/scrum/serializers.py b/greenmine/scrum/serializers.py index 724621b6..6295f977 100644 --- a/greenmine/scrum/serializers.py +++ b/greenmine/scrum/serializers.py @@ -38,6 +38,7 @@ class UserStorySerializer(serializers.ModelSerializer): class Meta: model = UserStory fields = () + depth = 0 class ChangeSerializer(serializers.ModelSerializer):