Mede some minor fixes
parent
bce92c42f0
commit
8cb299c218
|
@ -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)
|
||||
|
|
|
@ -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,)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# -* coding: utf-8 -*-
|
||||
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 = ()
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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):
|
||||
"""
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from greenmine.base.permissions import BaseDetailPermission
|
||||
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import django_filters
|
||||
|
||||
from rest_framework import generics
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
||||
PRIORITY_CHOICES = (
|
||||
(1, _(u'Low')),
|
||||
(3, _(u'Normal')),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from greenmine.base.permissions import BaseDetailPermission
|
||||
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -7,6 +7,7 @@ from picklefield.fields import dbsafe_encode, dbsafe_decode
|
|||
|
||||
import json, reversion
|
||||
|
||||
|
||||
class PickleField(serializers.WritableField):
|
||||
"""
|
||||
Pickle objects serializer.
|
||||
|
|
|
@ -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<pk>[0-9]+)/$', api.ProjectDetail.as_view(), name='project-detail'),
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
from greenmine.wiki.models import WikiPage, WikiPageAttachment
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# -* coding: utf-8 -*-
|
||||
|
||||
from haystack import indexes
|
||||
from .models import WikiPage
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from greenmine.wiki.models import WikiPage, WikiPageAttachment
|
||||
|
|
|
@ -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<projectid>\d+)-(?P<slug>[\w\-\d]+)/$', api.WikiPageDetail.as_view(), name='wiki-page-detail'),
|
||||
|
|
Loading…
Reference in New Issue