Mede some minor fixes
parent
bce92c42f0
commit
8cb299c218
|
@ -1,10 +1,11 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from greenmine.documents.models import Document
|
from . import models
|
||||||
|
|
||||||
|
|
||||||
class DocumentAdmin(admin.ModelAdmin):
|
class DocumentAdmin(admin.ModelAdmin):
|
||||||
list_display = ["title", "project", "owner"]
|
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 rest_framework import generics
|
||||||
|
|
||||||
from greenmine.documents.serializers import DocumentSerializer
|
from . import serializers
|
||||||
from greenmine.documents.models import Document
|
from . import models
|
||||||
from greenmine.documents.permissions import DocumentDetailPermission
|
from . import permissions
|
||||||
|
|
||||||
|
|
||||||
class DocumentList(generics.ListCreateAPIView):
|
class DocumentList(generics.ListCreateAPIView):
|
||||||
model = Document
|
model = models.Document
|
||||||
serializer_class = DocumentSerializer
|
serializer_class = serializers.DocumentSerializer
|
||||||
|
|
||||||
def get_queryset(self):
|
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):
|
class DocumentDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
model = Document
|
model = models.Document
|
||||||
serializer_class = DocumentSerializer
|
serializer_class = serializers.DocumentSerializer
|
||||||
permission_classes = (DocumentDetailPermission,)
|
permission_classes = (permissions.DocumentDetailPermission,)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
# -* coding: utf-8 -*-
|
# -* coding: utf-8 -*-
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from greenmine.base.permissions import BaseDetailPermission
|
from greenmine.base.permissions import BaseDetailPermission
|
||||||
|
|
||||||
|
|
||||||
class DocumentDetailPermission(BaseDetailPermission):
|
class DocumentDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_document"
|
get_permission = "can_view_document"
|
||||||
put_permission = "can_change_document"
|
put_permission = "can_change_document"
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
# -* coding: utf-8 -*-
|
# -* coding: utf-8 -*-
|
||||||
|
|
||||||
from haystack import indexes
|
from haystack import indexes
|
||||||
from .models import Document
|
|
||||||
|
from . import models
|
||||||
|
|
||||||
|
|
||||||
class DocumentIndex(indexes.SearchIndex, indexes.Indexable):
|
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')
|
title = indexes.CharField(model_attr='title')
|
||||||
|
|
||||||
def get_model(self):
|
def get_model(self):
|
||||||
return Document
|
return models.Document
|
||||||
|
|
||||||
def index_queryset(self, using=None):
|
def index_queryset(self, using=None):
|
||||||
return self.get_model().objects.all()
|
return self.get_model().objects.all()
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from greenmine.documents.models import Document
|
from . import models
|
||||||
|
|
||||||
|
|
||||||
class DocumentSerializer(serializers.ModelSerializer):
|
class DocumentSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Document
|
model = models.Document
|
||||||
fields = ()
|
fields = ()
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.conf.urls import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
from rest_framework.urlpatterns import format_suffix_patterns
|
from rest_framework.urlpatterns import format_suffix_patterns
|
||||||
|
|
||||||
from greenmine.documents import api
|
from . import api
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = format_suffix_patterns(patterns('',
|
urlpatterns = format_suffix_patterns(patterns('',
|
||||||
url(r'^documents/$', api.DocumentList.as_view(), name='document-list'),
|
url(r'^documents/$', api.DocumentList.as_view(), name='document-list'),
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from greenmine.questions.models import Question, QuestionStatus
|
from . import models
|
||||||
|
|
||||||
import reversion
|
import reversion
|
||||||
|
|
||||||
|
@ -9,10 +10,10 @@ import reversion
|
||||||
class QuestionAdmin(reversion.VersionAdmin):
|
class QuestionAdmin(reversion.VersionAdmin):
|
||||||
list_display = ["subject", "project", "owner"]
|
list_display = ["subject", "project", "owner"]
|
||||||
|
|
||||||
admin.site.register(Question, QuestionAdmin)
|
admin.site.register(models.Question, QuestionAdmin)
|
||||||
|
|
||||||
|
|
||||||
class QuestionStatusAdmin(admin.ModelAdmin):
|
class QuestionStatusAdmin(admin.ModelAdmin):
|
||||||
list_display = ["name", "order", "is_closed", "project"]
|
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 import generics
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
|
||||||
from greenmine.questions.serializers import QuestionSerializer
|
from . import serializers
|
||||||
from greenmine.questions.models import Question
|
from . import models
|
||||||
from greenmine.questions.permissions import QuestionDetailPermission
|
from . import permissions
|
||||||
|
|
||||||
import reversion
|
import reversion
|
||||||
|
|
||||||
|
|
||||||
class QuestionList(generics.ListCreateAPIView):
|
class QuestionList(generics.ListCreateAPIView):
|
||||||
model = Question
|
model = models.Question
|
||||||
serializer_class = QuestionSerializer
|
serializer_class = serializers.QuestionSerializer
|
||||||
filter_fields = ('project',)
|
filter_fields = ('project',)
|
||||||
permission_classes = (IsAuthenticated,)
|
permission_classes = (IsAuthenticated,)
|
||||||
|
|
||||||
def get_queryset(self):
|
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):
|
def pre_save(self, obj):
|
||||||
obj.owner = self.request.user
|
obj.owner = self.request.user
|
||||||
|
|
||||||
|
|
||||||
class QuestionDetail(generics.RetrieveUpdateDestroyAPIView):
|
class QuestionDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
model = Question
|
model = models.Question
|
||||||
serializer_class = QuestionSerializer
|
serializer_class = serializers.QuestionSerializer
|
||||||
permission_classes = (IsAuthenticated, QuestionDetailPermission,)
|
permission_classes = (IsAuthenticated, permissions.QuestionDetailPermission,)
|
||||||
|
|
||||||
def post_save(self, obj, created=False):
|
def post_save(self, obj, created=False):
|
||||||
with reversion.create_revision():
|
with reversion.create_revision():
|
||||||
|
|
|
@ -102,9 +102,7 @@ class Question(models.Model):
|
||||||
super(Question, self).save(*args, **kwargs)
|
super(Question, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Model related signals handlers
|
# Model related signals handlers
|
||||||
|
|
||||||
@receiver(models.signals.post_save, sender=Project, dispatch_uid='project_post_save_add_question_states')
|
@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):
|
def project_post_save_add_question_states(sender, instance, created, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from greenmine.base.permissions import BaseDetailPermission
|
from greenmine.base.permissions import BaseDetailPermission
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
# -* coding: utf-8 -*-
|
# -* coding: utf-8 -*-
|
||||||
|
|
||||||
from haystack import indexes
|
from haystack import indexes
|
||||||
from .models import Question
|
|
||||||
|
from . import models
|
||||||
|
|
||||||
|
|
||||||
class QuestionIndex(indexes.SearchIndex, indexes.Indexable):
|
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')
|
title = indexes.CharField(model_attr='subject')
|
||||||
|
|
||||||
def get_model(self):
|
def get_model(self):
|
||||||
return Question
|
return models.Question
|
||||||
|
|
||||||
def index_queryset(self, using=None):
|
def index_queryset(self, using=None):
|
||||||
return self.get_model().objects.all()
|
return self.get_model().objects.all()
|
||||||
|
|
|
@ -2,10 +2,11 @@
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from greenmine.questions.models import Question
|
import reversion
|
||||||
|
|
||||||
from greenmine.scrum.serializers import PickleField
|
from greenmine.scrum.serializers import PickleField
|
||||||
|
|
||||||
import reversion
|
from . import models
|
||||||
|
|
||||||
|
|
||||||
class QuestionSerializer(serializers.ModelSerializer):
|
class QuestionSerializer(serializers.ModelSerializer):
|
||||||
|
@ -14,7 +15,7 @@ class QuestionSerializer(serializers.ModelSerializer):
|
||||||
history = serializers.SerializerMethodField('get_history')
|
history = serializers.SerializerMethodField('get_history')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Question
|
model = models.Question
|
||||||
fields = ()
|
fields = ()
|
||||||
|
|
||||||
def get_comment(self, obj):
|
def get_comment(self, obj):
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.conf.urls import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
from rest_framework.urlpatterns import format_suffix_patterns
|
from rest_framework.urlpatterns import format_suffix_patterns
|
||||||
|
|
||||||
from greenmine.questions import api
|
from . import api
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = format_suffix_patterns(patterns('',
|
urlpatterns = format_suffix_patterns(patterns('',
|
||||||
url(r'^questions/$', api.QuestionList.as_view(), name='question-list'),
|
url(r'^questions/$', api.QuestionList.as_view(), name='question-list'),
|
||||||
|
|
|
@ -30,6 +30,7 @@ class UserStoryInline(admin.TabularInline):
|
||||||
else:
|
else:
|
||||||
return models.UserStory.objects.none()
|
return models.UserStory.objects.none()
|
||||||
|
|
||||||
|
|
||||||
class ProjectAdmin(reversion.VersionAdmin):
|
class ProjectAdmin(reversion.VersionAdmin):
|
||||||
list_display = ["name", "owner"]
|
list_display = ["name", "owner"]
|
||||||
inlines = [MembershipInline, MilestoneInline, UserStoryInline]
|
inlines = [MembershipInline, MilestoneInline, UserStoryInline]
|
||||||
|
@ -67,30 +68,39 @@ class MembershipAdmin(admin.ModelAdmin):
|
||||||
list_display = ['project', 'role', 'user']
|
list_display = ['project', 'role', 'user']
|
||||||
list_filter = ['project', 'role']
|
list_filter = ['project', 'role']
|
||||||
|
|
||||||
|
|
||||||
class IssueAdmin(reversion.VersionAdmin):
|
class IssueAdmin(reversion.VersionAdmin):
|
||||||
list_display = ["subject", "type"]
|
list_display = ["subject", "type"]
|
||||||
|
|
||||||
|
|
||||||
class SeverityAdmin(admin.ModelAdmin):
|
class SeverityAdmin(admin.ModelAdmin):
|
||||||
list_display = ["name", "order", "project"]
|
list_display = ["name", "order", "project"]
|
||||||
|
|
||||||
|
|
||||||
class PriorityAdmin(admin.ModelAdmin):
|
class PriorityAdmin(admin.ModelAdmin):
|
||||||
list_display = ["name", "order", "project"]
|
list_display = ["name", "order", "project"]
|
||||||
|
|
||||||
|
|
||||||
class PointsAdmin(admin.ModelAdmin):
|
class PointsAdmin(admin.ModelAdmin):
|
||||||
list_display = ["name", "order", "project"]
|
list_display = ["name", "order", "project"]
|
||||||
|
|
||||||
|
|
||||||
class IssueTypeAdmin(admin.ModelAdmin):
|
class IssueTypeAdmin(admin.ModelAdmin):
|
||||||
list_display = ["name", "order", "project"]
|
list_display = ["name", "order", "project"]
|
||||||
|
|
||||||
|
|
||||||
class IssueStatusAdmin(admin.ModelAdmin):
|
class IssueStatusAdmin(admin.ModelAdmin):
|
||||||
list_display = ["name", "order", "is_closed", "project"]
|
list_display = ["name", "order", "is_closed", "project"]
|
||||||
|
|
||||||
|
|
||||||
class TaskStatusAdmin(admin.ModelAdmin):
|
class TaskStatusAdmin(admin.ModelAdmin):
|
||||||
list_display = ["name", "order", "is_closed", "project"]
|
list_display = ["name", "order", "is_closed", "project"]
|
||||||
|
|
||||||
|
|
||||||
class UserStoryStatusAdmin(admin.ModelAdmin):
|
class UserStoryStatusAdmin(admin.ModelAdmin):
|
||||||
list_display = ["name", "order", "is_closed", "project"]
|
list_display = ["name", "order", "is_closed", "project"]
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(models.Task, TaskAdmin)
|
admin.site.register(models.Task, TaskAdmin)
|
||||||
admin.site.register(models.Issue, IssueAdmin)
|
admin.site.register(models.Issue, IssueAdmin)
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import django_filters
|
import django_filters
|
||||||
|
|
||||||
from rest_framework import generics
|
from rest_framework import generics
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
PRIORITY_CHOICES = (
|
PRIORITY_CHOICES = (
|
||||||
(1, _(u'Low')),
|
(1, _(u'Low')),
|
||||||
(3, _(u'Normal')),
|
(3, _(u'Normal')),
|
||||||
|
|
|
@ -13,6 +13,7 @@ from greenmine.base.models import User, Role
|
||||||
from greenmine.scrum.models import *
|
from greenmine.scrum.models import *
|
||||||
from greenmine.questions.models import *
|
from greenmine.questions.models import *
|
||||||
|
|
||||||
|
|
||||||
subjects = [
|
subjects = [
|
||||||
"Fixing templates for Django 1.2.",
|
"Fixing templates for Django 1.2.",
|
||||||
"get_actions() does not check for 'delete_selected' in actions",
|
"get_actions() does not check for 'delete_selected' in actions",
|
||||||
|
@ -32,13 +33,13 @@ subjects = [
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
def create_user(self, counter):
|
def create_user(self, counter):
|
||||||
user = User.objects.create(
|
user = User.objects.create(
|
||||||
username='user%d' % (counter),
|
username='useri{0}'.format(counter),
|
||||||
first_name='user%d' % (counter),
|
first_name='user{0}'.format(counter),
|
||||||
email='foouser%d@domain.com' % (counter),
|
email='foouser{0}@domain.com'.format(counter),
|
||||||
token=''.join(random.sample('abcdef0123456789', 10)),
|
token=''.join(random.sample('abcdef0123456789', 10)),
|
||||||
)
|
)
|
||||||
|
|
||||||
user.set_password('user%d' % (counter))
|
user.set_password('user{0}'.format(counter))
|
||||||
user.save()
|
user.save()
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
@ -54,8 +55,8 @@ class Command(BaseCommand):
|
||||||
for x in xrange(3):
|
for x in xrange(3):
|
||||||
# create project
|
# create project
|
||||||
project = Project(
|
project = Project(
|
||||||
name='Project Example 1 %s' % (x),
|
name='Project Example 1 {0}'.format(x),
|
||||||
description='Project example %s description' % (x),
|
description='Project example {0} description'.format(x),
|
||||||
owner=random.choice(users),
|
owner=random.choice(users),
|
||||||
public=True,
|
public=True,
|
||||||
)
|
)
|
||||||
|
@ -71,7 +72,7 @@ class Command(BaseCommand):
|
||||||
for y in xrange(2):
|
for y in xrange(2):
|
||||||
milestone = Milestone.objects.create(
|
milestone = Milestone.objects.create(
|
||||||
project=project,
|
project=project,
|
||||||
name='Sprint %s' % (y),
|
name='Sprint {0}'.format(y),
|
||||||
owner=project.owner,
|
owner=project.owner,
|
||||||
created_date=now_date,
|
created_date=now_date,
|
||||||
modified_date=now_date,
|
modified_date=now_date,
|
||||||
|
@ -102,7 +103,7 @@ class Command(BaseCommand):
|
||||||
|
|
||||||
for w in xrange(3):
|
for w in xrange(3):
|
||||||
Task.objects.create(
|
Task.objects.create(
|
||||||
subject="Task %s" % (w),
|
subject="Task %s".format(w),
|
||||||
description=lorem_ipsum.words(30, common=False),
|
description=lorem_ipsum.words(30, common=False),
|
||||||
project=project,
|
project=project,
|
||||||
owner=random.choice(users),
|
owner=random.choice(users),
|
||||||
|
|
|
@ -376,8 +376,7 @@ class Attachment(models.Model):
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return u'content_type {0} - object_id {1} - attachment {2}'.format(
|
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):
|
class Task(models.Model):
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from greenmine.base.permissions import BaseDetailPermission
|
from greenmine.base.permissions import BaseDetailPermission
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
# -* coding: utf-8 -*-
|
# -* coding: utf-8 -*-
|
||||||
|
|
||||||
from haystack import indexes
|
from haystack import indexes
|
||||||
from greenmine.scrum.models import UserStory, Task
|
from greenmine.scrum.models import UserStory, Task
|
||||||
|
|
||||||
|
|
||||||
class UserStoryIndex(indexes.SearchIndex, indexes.Indexable):
|
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')
|
title = indexes.CharField(model_attr='subject')
|
||||||
|
|
||||||
def get_model(self):
|
def get_model(self):
|
||||||
|
@ -15,7 +17,8 @@ class UserStoryIndex(indexes.SearchIndex, indexes.Indexable):
|
||||||
|
|
||||||
|
|
||||||
class TaskIndex(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')
|
title = indexes.CharField(model_attr='subject')
|
||||||
|
|
||||||
def get_model(self):
|
def get_model(self):
|
||||||
|
|
|
@ -7,6 +7,7 @@ from picklefield.fields import dbsafe_encode, dbsafe_decode
|
||||||
|
|
||||||
import json, reversion
|
import json, reversion
|
||||||
|
|
||||||
|
|
||||||
class PickleField(serializers.WritableField):
|
class PickleField(serializers.WritableField):
|
||||||
"""
|
"""
|
||||||
Pickle objects serializer.
|
Pickle objects serializer.
|
||||||
|
|
|
@ -5,6 +5,7 @@ from rest_framework.urlpatterns import format_suffix_patterns
|
||||||
|
|
||||||
from greenmine.scrum import api
|
from greenmine.scrum import api
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = format_suffix_patterns(patterns('',
|
urlpatterns = format_suffix_patterns(patterns('',
|
||||||
url(r'^projects/$', api.ProjectList.as_view(), name='project-list'),
|
url(r'^projects/$', api.ProjectList.as_view(), name='project-list'),
|
||||||
url(r'^projects/(?P<pk>[0-9]+)/$', api.ProjectDetail.as_view(), name='project-detail'),
|
url(r'^projects/(?P<pk>[0-9]+)/$', api.ProjectDetail.as_view(), name='project-detail'),
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from greenmine.wiki.models import WikiPage, WikiPageAttachment
|
from greenmine.wiki.models import WikiPage, WikiPageAttachment
|
||||||
|
|
|
@ -37,8 +37,8 @@ class WikiPageDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
# Get the single item from the filtered queryset
|
# Get the single item from the filtered queryset
|
||||||
obj = queryset.get()
|
obj = queryset.get()
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
raise Http404(_("No %(verbose_name)s found matching the query") %
|
raise Http404(_("No {verbose_name} found matching the query").format(
|
||||||
{'verbose_name': queryset.model._meta.verbose_name})
|
verbose_name=queryset.model._meta.verbose_name))
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -59,5 +59,5 @@ class WikiPageAttachment(models.Model):
|
||||||
ordering = ['wikipage', 'created_date']
|
ordering = ['wikipage', 'created_date']
|
||||||
|
|
||||||
def __unicode__(self):
|
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
|
from greenmine.base.permissions import BaseDetailPermission
|
||||||
|
|
||||||
|
|
||||||
class WikiPageDetailPermission(BaseDetailPermission):
|
class WikiPageDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_wikipage"
|
get_permission = "can_view_wikipage"
|
||||||
put_permission = "change_wikipage"
|
put_permission = "change_wikipage"
|
||||||
|
@ -8,6 +11,7 @@ class WikiPageDetailPermission(BaseDetailPermission):
|
||||||
safe_methods = ['HEAD', 'OPTIONS']
|
safe_methods = ['HEAD', 'OPTIONS']
|
||||||
path_to_project = ['project']
|
path_to_project = ['project']
|
||||||
|
|
||||||
|
|
||||||
class WikiPageAttachmentDetailPermission(BaseDetailPermission):
|
class WikiPageAttachmentDetailPermission(BaseDetailPermission):
|
||||||
get_permission = "can_view_wikipageattachment"
|
get_permission = "can_view_wikipageattachment"
|
||||||
put_permission = "change_wikipageattachment"
|
put_permission = "change_wikipageattachment"
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
# -* coding: utf-8 -*-
|
# -* coding: utf-8 -*-
|
||||||
|
|
||||||
from haystack import indexes
|
from haystack import indexes
|
||||||
from .models import WikiPage
|
from .models import WikiPage
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from greenmine.wiki.models import WikiPage, WikiPageAttachment
|
from greenmine.wiki.models import WikiPage, WikiPageAttachment
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.conf.urls import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
from rest_framework.urlpatterns import format_suffix_patterns
|
from rest_framework.urlpatterns import format_suffix_patterns
|
||||||
|
|
||||||
from greenmine.wiki import api
|
from greenmine.wiki import api
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = format_suffix_patterns(patterns('',
|
urlpatterns = format_suffix_patterns(patterns('',
|
||||||
url(r'^pages/$', api.WikiPageList.as_view(), name='wiki-page-list'),
|
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'),
|
url(r'^pages/(?P<projectid>\d+)-(?P<slug>[\w\-\d]+)/$', api.WikiPageDetail.as_view(), name='wiki-page-detail'),
|
||||||
|
|
Loading…
Reference in New Issue