From 8cb299c2180ae2f9b7fe930e14842bbce3fedb3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 26 Apr 2013 15:30:06 +0200 Subject: [PATCH] Mede some minor fixes --- greenmine/documents/admin.py | 5 +++-- greenmine/documents/api.py | 20 ++++++++++--------- greenmine/documents/models.py | 1 + greenmine/documents/permissions.py | 3 +++ greenmine/documents/search_indexes.py | 9 ++++++--- greenmine/documents/serializers.py | 7 +++++-- greenmine/documents/urls.py | 5 ++++- greenmine/questions/admin.py | 7 ++++--- greenmine/questions/api.py | 20 ++++++++++--------- greenmine/questions/models.py | 2 -- greenmine/questions/permissions.py | 2 ++ greenmine/questions/search_indexes.py | 9 ++++++--- greenmine/questions/serializers.py | 7 ++++--- greenmine/questions/urls.py | 5 ++++- greenmine/scrum/admin.py | 10 ++++++++++ greenmine/scrum/api.py | 2 ++ greenmine/scrum/choices.py | 1 + .../scrum/management/commands/sample_data.py | 17 ++++++++-------- greenmine/scrum/models.py | 3 +-- greenmine/scrum/permissions.py | 2 ++ greenmine/scrum/search_indexes.py | 7 +++++-- greenmine/scrum/serializers.py | 1 + greenmine/scrum/urls.py | 1 + greenmine/wiki/admin.py | 1 + greenmine/wiki/api.py | 4 ++-- greenmine/wiki/models.py | 4 ++-- greenmine/wiki/permissions.py | 4 ++++ greenmine/wiki/search_indexes.py | 1 + greenmine/wiki/serializers.py | 2 ++ greenmine/wiki/urls.py | 3 +++ 30 files changed, 111 insertions(+), 54 deletions(-) diff --git a/greenmine/documents/admin.py b/greenmine/documents/admin.py index 4754e991..d5ef6709 100644 --- a/greenmine/documents/admin.py +++ b/greenmine/documents/admin.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- + from django.contrib import admin -from greenmine.documents.models import Document +from . import models class DocumentAdmin(admin.ModelAdmin): list_display = ["title", "project", "owner"] -admin.site.register(Document, DocumentAdmin) +admin.site.register(models.Document, DocumentAdmin) diff --git a/greenmine/documents/api.py b/greenmine/documents/api.py index 0f05260d..b16cbe11 100644 --- a/greenmine/documents/api.py +++ b/greenmine/documents/api.py @@ -1,19 +1,21 @@ +# -*- coding: utf-8 -*- + from rest_framework import generics -from greenmine.documents.serializers import DocumentSerializer -from greenmine.documents.models import Document -from greenmine.documents.permissions import DocumentDetailPermission +from . import serializers +from . import models +from . import permissions class DocumentList(generics.ListCreateAPIView): - model = Document - serializer_class = DocumentSerializer + model = models.Document + serializer_class = serializers.DocumentSerializer def get_queryset(self): - return self.model.objects.filter(project__members=self.request.user) + return super(DocumentList, self).filter(project__members=self.request.user) class DocumentDetail(generics.RetrieveUpdateDestroyAPIView): - model = Document - serializer_class = DocumentSerializer - permission_classes = (DocumentDetailPermission,) + model = models.Document + serializer_class = serializers.DocumentSerializer + permission_classes = (permissions.DocumentDetailPermission,) diff --git a/greenmine/documents/models.py b/greenmine/documents/models.py index 4a557c7a..172f5c8d 100644 --- a/greenmine/documents/models.py +++ b/greenmine/documents/models.py @@ -1,4 +1,5 @@ # -* coding: utf-8 -*- + from django.db import models from django.utils.translation import ugettext_lazy as _ diff --git a/greenmine/documents/permissions.py b/greenmine/documents/permissions.py index a9c3a330..1e43a59d 100644 --- a/greenmine/documents/permissions.py +++ b/greenmine/documents/permissions.py @@ -1,5 +1,8 @@ +# -*- coding: utf-8 -*- + from greenmine.base.permissions import BaseDetailPermission + class DocumentDetailPermission(BaseDetailPermission): get_permission = "can_view_document" put_permission = "can_change_document" diff --git a/greenmine/documents/search_indexes.py b/greenmine/documents/search_indexes.py index bc89050e..843483c1 100644 --- a/greenmine/documents/search_indexes.py +++ b/greenmine/documents/search_indexes.py @@ -1,14 +1,17 @@ # -* coding: utf-8 -*- + from haystack import indexes -from .models import Document + +from . import models class DocumentIndex(indexes.SearchIndex, indexes.Indexable): - text = indexes.CharField(document=True, use_template=True, template_name='search/indexes/document_text.txt') + text = indexes.CharField(document=True, use_template=True, + template_name='search/indexes/document_text.txt') title = indexes.CharField(model_attr='title') def get_model(self): - return Document + return models.Document def index_queryset(self, using=None): return self.get_model().objects.all() diff --git a/greenmine/documents/serializers.py b/greenmine/documents/serializers.py index 50c4c0d3..fa330d23 100644 --- a/greenmine/documents/serializers.py +++ b/greenmine/documents/serializers.py @@ -1,8 +1,11 @@ +# -*- coding: utf-8 -*- + from rest_framework import serializers -from greenmine.documents.models import Document +from . import models + class DocumentSerializer(serializers.ModelSerializer): class Meta: - model = Document + model = models.Document fields = () diff --git a/greenmine/documents/urls.py b/greenmine/documents/urls.py index e40bffdc..10fdd949 100644 --- a/greenmine/documents/urls.py +++ b/greenmine/documents/urls.py @@ -1,7 +1,10 @@ +# -*- coding: utf-8 -*- + from django.conf.urls import patterns, url from rest_framework.urlpatterns import format_suffix_patterns -from greenmine.documents import api +from . import api + urlpatterns = format_suffix_patterns(patterns('', url(r'^documents/$', api.DocumentList.as_view(), name='document-list'), diff --git a/greenmine/questions/admin.py b/greenmine/questions/admin.py index 2d807148..6e875f72 100644 --- a/greenmine/questions/admin.py +++ b/greenmine/questions/admin.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- + from django.contrib import admin -from greenmine.questions.models import Question, QuestionStatus +from . import models import reversion @@ -9,10 +10,10 @@ import reversion class QuestionAdmin(reversion.VersionAdmin): list_display = ["subject", "project", "owner"] -admin.site.register(Question, QuestionAdmin) +admin.site.register(models.Question, QuestionAdmin) class QuestionStatusAdmin(admin.ModelAdmin): list_display = ["name", "order", "is_closed", "project"] -admin.site.register(QuestionStatus, QuestionStatusAdmin) +admin.site.register(models.QuestionStatus, QuestionStatusAdmin) diff --git a/greenmine/questions/api.py b/greenmine/questions/api.py index 83c8d728..3ba530a2 100644 --- a/greenmine/questions/api.py +++ b/greenmine/questions/api.py @@ -3,29 +3,31 @@ from rest_framework import generics from rest_framework.permissions import IsAuthenticated -from greenmine.questions.serializers import QuestionSerializer -from greenmine.questions.models import Question -from greenmine.questions.permissions import QuestionDetailPermission +from . import serializers +from . import models +from . import permissions import reversion + class QuestionList(generics.ListCreateAPIView): - model = Question - serializer_class = QuestionSerializer + model = models.Question + serializer_class = serializers.QuestionSerializer filter_fields = ('project',) permission_classes = (IsAuthenticated,) def get_queryset(self): - return self.model.objects.filter(project__members=self.request.user) + return super(QuestionList, self).filter(project__members=self.request.user) + def pre_save(self, obj): obj.owner = self.request.user class QuestionDetail(generics.RetrieveUpdateDestroyAPIView): - model = Question - serializer_class = QuestionSerializer - permission_classes = (IsAuthenticated, QuestionDetailPermission,) + model = models.Question + serializer_class = serializers.QuestionSerializer + permission_classes = (IsAuthenticated, permissions.QuestionDetailPermission,) def post_save(self, obj, created=False): with reversion.create_revision(): diff --git a/greenmine/questions/models.py b/greenmine/questions/models.py index b2d0988e..b0b0a654 100644 --- a/greenmine/questions/models.py +++ b/greenmine/questions/models.py @@ -102,9 +102,7 @@ class Question(models.Model): super(Question, self).save(*args, **kwargs) - # Model related signals handlers - @receiver(models.signals.post_save, sender=Project, dispatch_uid='project_post_save_add_question_states') def project_post_save_add_question_states(sender, instance, created, **kwargs): """ diff --git a/greenmine/questions/permissions.py b/greenmine/questions/permissions.py index b276fd41..0cb030e3 100644 --- a/greenmine/questions/permissions.py +++ b/greenmine/questions/permissions.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + from greenmine.base.permissions import BaseDetailPermission diff --git a/greenmine/questions/search_indexes.py b/greenmine/questions/search_indexes.py index ecb0bbee..45b00fa8 100644 --- a/greenmine/questions/search_indexes.py +++ b/greenmine/questions/search_indexes.py @@ -1,14 +1,17 @@ # -* coding: utf-8 -*- + from haystack import indexes -from .models import Question + +from . import models class QuestionIndex(indexes.SearchIndex, indexes.Indexable): - text = indexes.CharField(document=True, use_template=True, template_name='search/indexes/question_text.txt') + text = indexes.CharField(document=True, use_template=True, + template_name='search/indexes/question_text.txt') title = indexes.CharField(model_attr='subject') def get_model(self): - return Question + return models.Question def index_queryset(self, using=None): return self.get_model().objects.all() diff --git a/greenmine/questions/serializers.py b/greenmine/questions/serializers.py index 412c1652..4e623945 100644 --- a/greenmine/questions/serializers.py +++ b/greenmine/questions/serializers.py @@ -2,10 +2,11 @@ from rest_framework import serializers -from greenmine.questions.models import Question +import reversion + from greenmine.scrum.serializers import PickleField -import reversion +from . import models class QuestionSerializer(serializers.ModelSerializer): @@ -14,7 +15,7 @@ class QuestionSerializer(serializers.ModelSerializer): history = serializers.SerializerMethodField('get_history') class Meta: - model = Question + model = models.Question fields = () def get_comment(self, obj): diff --git a/greenmine/questions/urls.py b/greenmine/questions/urls.py index 9eef951c..3f44bddd 100644 --- a/greenmine/questions/urls.py +++ b/greenmine/questions/urls.py @@ -1,7 +1,10 @@ +# -*- coding: utf-8 -*- + from django.conf.urls import patterns, url from rest_framework.urlpatterns import format_suffix_patterns -from greenmine.questions import api +from . import api + urlpatterns = format_suffix_patterns(patterns('', url(r'^questions/$', api.QuestionList.as_view(), name='question-list'), diff --git a/greenmine/scrum/admin.py b/greenmine/scrum/admin.py index 2f0172a5..2cfef0eb 100644 --- a/greenmine/scrum/admin.py +++ b/greenmine/scrum/admin.py @@ -30,6 +30,7 @@ class UserStoryInline(admin.TabularInline): else: return models.UserStory.objects.none() + class ProjectAdmin(reversion.VersionAdmin): list_display = ["name", "owner"] inlines = [MembershipInline, MilestoneInline, UserStoryInline] @@ -67,30 +68,39 @@ class MembershipAdmin(admin.ModelAdmin): list_display = ['project', 'role', 'user'] list_filter = ['project', 'role'] + class IssueAdmin(reversion.VersionAdmin): list_display = ["subject", "type"] + class SeverityAdmin(admin.ModelAdmin): list_display = ["name", "order", "project"] + class PriorityAdmin(admin.ModelAdmin): list_display = ["name", "order", "project"] + class PointsAdmin(admin.ModelAdmin): list_display = ["name", "order", "project"] + class IssueTypeAdmin(admin.ModelAdmin): list_display = ["name", "order", "project"] + class IssueStatusAdmin(admin.ModelAdmin): list_display = ["name", "order", "is_closed", "project"] + class TaskStatusAdmin(admin.ModelAdmin): list_display = ["name", "order", "is_closed", "project"] + class UserStoryStatusAdmin(admin.ModelAdmin): list_display = ["name", "order", "is_closed", "project"] + admin.site.register(models.Task, TaskAdmin) admin.site.register(models.Issue, IssueAdmin) diff --git a/greenmine/scrum/api.py b/greenmine/scrum/api.py index c5e2b219..2ace56c3 100644 --- a/greenmine/scrum/api.py +++ b/greenmine/scrum/api.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + import django_filters from rest_framework import generics diff --git a/greenmine/scrum/choices.py b/greenmine/scrum/choices.py index 540fb4b2..9dcfcc7a 100644 --- a/greenmine/scrum/choices.py +++ b/greenmine/scrum/choices.py @@ -2,6 +2,7 @@ from django.utils.translation import ugettext_lazy as _ + PRIORITY_CHOICES = ( (1, _(u'Low')), (3, _(u'Normal')), diff --git a/greenmine/scrum/management/commands/sample_data.py b/greenmine/scrum/management/commands/sample_data.py index 290499da..190efb71 100644 --- a/greenmine/scrum/management/commands/sample_data.py +++ b/greenmine/scrum/management/commands/sample_data.py @@ -13,6 +13,7 @@ from greenmine.base.models import User, Role from greenmine.scrum.models import * from greenmine.questions.models import * + subjects = [ "Fixing templates for Django 1.2.", "get_actions() does not check for 'delete_selected' in actions", @@ -32,13 +33,13 @@ 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), + username='useri{0}'.format(counter), + first_name='user{0}'.format(counter), + email='foouser{0}@domain.com'.format(counter), token=''.join(random.sample('abcdef0123456789', 10)), ) - user.set_password('user%d' % (counter)) + user.set_password('user{0}'.format(counter)) user.save() return user @@ -54,8 +55,8 @@ class Command(BaseCommand): for x in xrange(3): # create project project = Project( - name='Project Example 1 %s' % (x), - description='Project example %s description' % (x), + name='Project Example 1 {0}'.format(x), + description='Project example {0} description'.format(x), owner=random.choice(users), public=True, ) @@ -71,7 +72,7 @@ class Command(BaseCommand): for y in xrange(2): milestone = Milestone.objects.create( project=project, - name='Sprint %s' % (y), + name='Sprint {0}'.format(y), owner=project.owner, created_date=now_date, modified_date=now_date, @@ -102,7 +103,7 @@ class Command(BaseCommand): for w in xrange(3): Task.objects.create( - subject="Task %s" % (w), + subject="Task %s".format(w), description=lorem_ipsum.words(30, common=False), project=project, owner=random.choice(users), diff --git a/greenmine/scrum/models.py b/greenmine/scrum/models.py index 431a52bc..10fe908a 100644 --- a/greenmine/scrum/models.py +++ b/greenmine/scrum/models.py @@ -376,8 +376,7 @@ class Attachment(models.Model): def __unicode__(self): return u'content_type {0} - object_id {1} - attachment {2}'.format( - self.content_type, self.object_id, self.id - ) + self.content_type, self.object_id, self.id) class Task(models.Model): diff --git a/greenmine/scrum/permissions.py b/greenmine/scrum/permissions.py index aa705584..d7b5e390 100644 --- a/greenmine/scrum/permissions.py +++ b/greenmine/scrum/permissions.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + from greenmine.base.permissions import BaseDetailPermission diff --git a/greenmine/scrum/search_indexes.py b/greenmine/scrum/search_indexes.py index 064977a8..a3632926 100644 --- a/greenmine/scrum/search_indexes.py +++ b/greenmine/scrum/search_indexes.py @@ -1,10 +1,12 @@ # -* coding: utf-8 -*- + from haystack import indexes from greenmine.scrum.models import UserStory, Task class UserStoryIndex(indexes.SearchIndex, indexes.Indexable): - text = indexes.CharField(document=True, use_template=True, template_name='search/indexes/userstory_text.txt') + text = indexes.CharField(document=True, use_template=True, + template_name='search/indexes/userstory_text.txt') title = indexes.CharField(model_attr='subject') def get_model(self): @@ -15,7 +17,8 @@ class UserStoryIndex(indexes.SearchIndex, indexes.Indexable): class TaskIndex(indexes.SearchIndex, indexes.Indexable): - text = indexes.CharField(document=True, use_template=True, template_name='search/indexes/task_text.txt') + text = indexes.CharField(document=True, use_template=True, + template_name='search/indexes/task_text.txt') title = indexes.CharField(model_attr='subject') def get_model(self): diff --git a/greenmine/scrum/serializers.py b/greenmine/scrum/serializers.py index c25f3989..07daa29d 100644 --- a/greenmine/scrum/serializers.py +++ b/greenmine/scrum/serializers.py @@ -7,6 +7,7 @@ from picklefield.fields import dbsafe_encode, dbsafe_decode import json, reversion + class PickleField(serializers.WritableField): """ Pickle objects serializer. diff --git a/greenmine/scrum/urls.py b/greenmine/scrum/urls.py index a2840cbf..164552c0 100644 --- a/greenmine/scrum/urls.py +++ b/greenmine/scrum/urls.py @@ -5,6 +5,7 @@ from rest_framework.urlpatterns import format_suffix_patterns from greenmine.scrum import api + urlpatterns = format_suffix_patterns(patterns('', url(r'^projects/$', api.ProjectList.as_view(), name='project-list'), url(r'^projects/(?P[0-9]+)/$', api.ProjectDetail.as_view(), name='project-detail'), diff --git a/greenmine/wiki/admin.py b/greenmine/wiki/admin.py index 9ad9bf50..8ed443f5 100644 --- a/greenmine/wiki/admin.py +++ b/greenmine/wiki/admin.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- + from django.contrib import admin from greenmine.wiki.models import WikiPage, WikiPageAttachment diff --git a/greenmine/wiki/api.py b/greenmine/wiki/api.py index b37dd073..184c8b4f 100644 --- a/greenmine/wiki/api.py +++ b/greenmine/wiki/api.py @@ -37,8 +37,8 @@ class WikiPageDetail(generics.RetrieveUpdateDestroyAPIView): # Get the single item from the filtered queryset obj = queryset.get() except ObjectDoesNotExist: - raise Http404(_("No %(verbose_name)s found matching the query") % - {'verbose_name': queryset.model._meta.verbose_name}) + raise Http404(_("No {verbose_name} found matching the query").format( + verbose_name=queryset.model._meta.verbose_name)) return obj diff --git a/greenmine/wiki/models.py b/greenmine/wiki/models.py index 9ccd67c2..b57dabc4 100644 --- a/greenmine/wiki/models.py +++ b/greenmine/wiki/models.py @@ -59,5 +59,5 @@ class WikiPageAttachment(models.Model): ordering = ['wikipage', 'created_date'] def __unicode__(self): - return u'project {0} - page {1} - attachment {2}'.format(self.wikipage.project_id, self.wikipage.subject, self.id) - + return u'project {0} - page {1} - attachment {2}'.format(self.wikipage.project_id, + self.wikipage.subject, self.id) diff --git a/greenmine/wiki/permissions.py b/greenmine/wiki/permissions.py index 9ee4d38b..73352807 100644 --- a/greenmine/wiki/permissions.py +++ b/greenmine/wiki/permissions.py @@ -1,5 +1,8 @@ +# -*- coding: utf-8 -*- + from greenmine.base.permissions import BaseDetailPermission + class WikiPageDetailPermission(BaseDetailPermission): get_permission = "can_view_wikipage" put_permission = "change_wikipage" @@ -8,6 +11,7 @@ class WikiPageDetailPermission(BaseDetailPermission): safe_methods = ['HEAD', 'OPTIONS'] path_to_project = ['project'] + class WikiPageAttachmentDetailPermission(BaseDetailPermission): get_permission = "can_view_wikipageattachment" put_permission = "change_wikipageattachment" diff --git a/greenmine/wiki/search_indexes.py b/greenmine/wiki/search_indexes.py index 0a14b8f6..fdc6cd2c 100644 --- a/greenmine/wiki/search_indexes.py +++ b/greenmine/wiki/search_indexes.py @@ -1,4 +1,5 @@ # -* coding: utf-8 -*- + from haystack import indexes from .models import WikiPage diff --git a/greenmine/wiki/serializers.py b/greenmine/wiki/serializers.py index 8b354dc9..6879c89a 100644 --- a/greenmine/wiki/serializers.py +++ b/greenmine/wiki/serializers.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + from rest_framework import serializers from greenmine.wiki.models import WikiPage, WikiPageAttachment diff --git a/greenmine/wiki/urls.py b/greenmine/wiki/urls.py index 0128e065..251d6a07 100644 --- a/greenmine/wiki/urls.py +++ b/greenmine/wiki/urls.py @@ -1,8 +1,11 @@ +# -*- coding: utf-8 -*- + from django.conf.urls import patterns, url from rest_framework.urlpatterns import format_suffix_patterns from greenmine.wiki import api + urlpatterns = format_suffix_patterns(patterns('', url(r'^pages/$', api.WikiPageList.as_view(), name='wiki-page-list'), url(r'^pages/(?P\d+)-(?P[\w\-\d]+)/$', api.WikiPageDetail.as_view(), name='wiki-page-detail'),