Adding a lot of translateable strings
parent
ab31a5e59b
commit
f09eaad009
|
@ -3,6 +3,7 @@
|
||||||
from django.db.models.loading import get_model
|
from django.db.models.loading import get_model
|
||||||
from django.contrib.auth import logout, login, authenticate
|
from django.contrib.auth import logout, login, authenticate
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.permissions import AllowAny
|
from rest_framework.permissions import AllowAny
|
||||||
|
@ -48,7 +49,7 @@ class AuthViewSet(viewsets.ViewSet):
|
||||||
|
|
||||||
def _public_register(self, request):
|
def _public_register(self, request):
|
||||||
if not request.domain.public_register:
|
if not request.domain.public_register:
|
||||||
raise exc.BadRequest("Public register is disabled for this domain.")
|
raise exc.BadRequest(_("Public register is disabled for this domain."))
|
||||||
|
|
||||||
serializer = PublicRegisterSerializer(data=request.DATA)
|
serializer = PublicRegisterSerializer(data=request.DATA)
|
||||||
if not serializer.is_valid():
|
if not serializer.is_valid():
|
||||||
|
@ -87,7 +88,7 @@ class AuthViewSet(viewsets.ViewSet):
|
||||||
try:
|
try:
|
||||||
membership = membership_model.objects.get(token=base_serializer.data["token"])
|
membership = membership_model.objects.get(token=base_serializer.data["token"])
|
||||||
except membership_model.DoesNotExist as e:
|
except membership_model.DoesNotExist as e:
|
||||||
raise exc.BadRequest("Invalid token") from e
|
raise exc.BadRequest(_("Invalid token")) from e
|
||||||
|
|
||||||
if base_serializer.data["existing"]:
|
if base_serializer.data["existing"]:
|
||||||
serializer = PrivateRegisterExistingSerializer(data=request.DATA)
|
serializer = PrivateRegisterExistingSerializer(data=request.DATA)
|
||||||
|
@ -96,7 +97,7 @@ class AuthViewSet(viewsets.ViewSet):
|
||||||
|
|
||||||
user = get_object_or_404(User, username=serializer.data["username"])
|
user = get_object_or_404(User, username=serializer.data["username"])
|
||||||
if not user.check_password(serializer.data["password"]):
|
if not user.check_password(serializer.data["password"]):
|
||||||
raise exc.BadRequest({"password": "Incorrect password"})
|
raise exc.BadRequest({"password": _("Incorrect password")})
|
||||||
|
|
||||||
else:
|
else:
|
||||||
serializer = PrivateRegisterSerializer(data=request.DATA)
|
serializer = PrivateRegisterSerializer(data=request.DATA)
|
||||||
|
@ -129,7 +130,7 @@ class AuthViewSet(viewsets.ViewSet):
|
||||||
elif type == "private":
|
elif type == "private":
|
||||||
return self._private_register(request)
|
return self._private_register(request)
|
||||||
|
|
||||||
raise exc.BadRequest("invalid register type")
|
raise exc.BadRequest(_("invalid register type"))
|
||||||
|
|
||||||
def create(self, request, **kwargs):
|
def create(self, request, **kwargs):
|
||||||
username = request.DATA.get('username', None)
|
username = request.DATA.get('username', None)
|
||||||
|
@ -138,10 +139,10 @@ class AuthViewSet(viewsets.ViewSet):
|
||||||
try:
|
try:
|
||||||
user = User.objects.get(username=username)
|
user = User.objects.get(username=username)
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
raise exc.BadRequest("Invalid username or password")
|
raise exc.BadRequest(_("Invalid username or password"))
|
||||||
|
|
||||||
if not user.check_password(password):
|
if not user.check_password(password):
|
||||||
raise exc.BadRequest("Invalid username or password")
|
raise exc.BadRequest(_("Invalid username or password"))
|
||||||
|
|
||||||
response_data = self._create_response(user)
|
response_data = self._create_response(user)
|
||||||
return Response(response_data, status=status.HTTP_200_OK)
|
return Response(response_data, status=status.HTTP_200_OK)
|
||||||
|
|
|
@ -5,6 +5,7 @@ from threading import local
|
||||||
|
|
||||||
from django.db.models import get_model
|
from django.db.models import get_model
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from .. import exceptions as exc
|
from .. import exceptions as exc
|
||||||
|
|
||||||
|
@ -50,7 +51,7 @@ def get_domain_for_domain_name(domain):
|
||||||
domain = model_cls.objects.get(domain=domain)
|
domain = model_cls.objects.get(domain=domain)
|
||||||
except model_cls.DoesNotExist:
|
except model_cls.DoesNotExist:
|
||||||
log.warning("Domain does not exist for domain: {}".format(domain))
|
log.warning("Domain does not exist for domain: {}".format(domain))
|
||||||
raise DomainNotFound("domain not found")
|
raise DomainNotFound(_("domain not found"))
|
||||||
else:
|
else:
|
||||||
cache[domain] = domain
|
cache[domain] = domain
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ from rest_framework import status
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from django.core.exceptions import PermissionDenied as DjangoPermissionDenied
|
from django.core.exceptions import PermissionDenied as DjangoPermissionDenied
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
|
|
||||||
from .utils.json import to_json
|
from .utils.json import to_json
|
||||||
|
@ -12,7 +13,7 @@ from .utils.json import to_json
|
||||||
|
|
||||||
class BaseException(exceptions.APIException):
|
class BaseException(exceptions.APIException):
|
||||||
status_code = status.HTTP_400_BAD_REQUEST
|
status_code = status.HTTP_400_BAD_REQUEST
|
||||||
default_detail = 'Unexpected error'
|
default_detail = _('Unexpected error')
|
||||||
|
|
||||||
def __init__(self, detail=None):
|
def __init__(self, detail=None):
|
||||||
self.detail = detail or self.default_detail
|
self.detail = detail or self.default_detail
|
||||||
|
@ -24,7 +25,7 @@ class NotFound(BaseException):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
status_code = status.HTTP_404_NOT_FOUND
|
status_code = status.HTTP_404_NOT_FOUND
|
||||||
default_detail = 'Not found.'
|
default_detail = _('Not found.')
|
||||||
|
|
||||||
|
|
||||||
class BadRequest(BaseException):
|
class BadRequest(BaseException):
|
||||||
|
@ -32,7 +33,7 @@ class BadRequest(BaseException):
|
||||||
Exception used on bad arguments detected
|
Exception used on bad arguments detected
|
||||||
on api view.
|
on api view.
|
||||||
"""
|
"""
|
||||||
default_detail = 'Wrong arguments.'
|
default_detail = _('Wrong arguments.')
|
||||||
|
|
||||||
|
|
||||||
class WrongArguments(BaseException):
|
class WrongArguments(BaseException):
|
||||||
|
@ -40,7 +41,7 @@ class WrongArguments(BaseException):
|
||||||
Exception used on bad arguments detected
|
Exception used on bad arguments detected
|
||||||
on service. This is same as `BadRequest`.
|
on service. This is same as `BadRequest`.
|
||||||
"""
|
"""
|
||||||
default_detail = 'Wrong arguments.'
|
default_detail = _('Wrong arguments.')
|
||||||
|
|
||||||
|
|
||||||
class PermissionDenied(exceptions.PermissionDenied):
|
class PermissionDenied(exceptions.PermissionDenied):
|
||||||
|
@ -55,7 +56,7 @@ class PreconditionError(BaseException):
|
||||||
"""
|
"""
|
||||||
Error raised on precondition method on viewset.
|
Error raised on precondition method on viewset.
|
||||||
"""
|
"""
|
||||||
default_detail = "Precondition error"
|
default_detail = _("Precondition error")
|
||||||
|
|
||||||
|
|
||||||
class InternalError(BaseException):
|
class InternalError(BaseException):
|
||||||
|
@ -63,7 +64,7 @@ class InternalError(BaseException):
|
||||||
Exception for internal errors.
|
Exception for internal errors.
|
||||||
"""
|
"""
|
||||||
status_code = status.HTTP_500_INTERNAL_SERVER_ERROR
|
status_code = status.HTTP_500_INTERNAL_SERVER_ERROR
|
||||||
default_detail = "Internal server error"
|
default_detail = _("Internal server error")
|
||||||
|
|
||||||
|
|
||||||
class NotAuthenticated(exceptions.NotAuthenticated):
|
class NotAuthenticated(exceptions.NotAuthenticated):
|
||||||
|
@ -113,11 +114,11 @@ def exception_handler(exc):
|
||||||
return Response(detail, status=exc.status_code, headers=headers)
|
return Response(detail, status=exc.status_code, headers=headers)
|
||||||
|
|
||||||
elif isinstance(exc, Http404):
|
elif isinstance(exc, Http404):
|
||||||
return Response({'_error_message': 'Not found'},
|
return Response({'_error_message': _('Not found')},
|
||||||
status=status.HTTP_404_NOT_FOUND)
|
status=status.HTTP_404_NOT_FOUND)
|
||||||
|
|
||||||
elif isinstance(exc, DjangoPermissionDenied):
|
elif isinstance(exc, DjangoPermissionDenied):
|
||||||
return Response({'_error_message': 'Permission denied'},
|
return Response({'_error_message': _('Permission denied')},
|
||||||
status=status.HTTP_403_FORBIDDEN)
|
status=status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
# Note: Unhandled exceptions will raise a 500 error.
|
# Note: Unhandled exceptions will raise a 500 error.
|
||||||
|
|
|
@ -5,6 +5,7 @@ import uuid
|
||||||
from django.db.models.loading import get_model
|
from django.db.models.loading import get_model
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.contrib.auth import logout, login, authenticate
|
from django.contrib.auth import logout, login, authenticate
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from rest_framework.decorators import list_route, action
|
from rest_framework.decorators import list_route, action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
@ -41,14 +42,14 @@ class UsersViewSet(ModelCrudViewSet):
|
||||||
username_or_email = request.DATA.get('username', None)
|
username_or_email = request.DATA.get('username', None)
|
||||||
|
|
||||||
if not username_or_email:
|
if not username_or_email:
|
||||||
raise exc.WrongArguments("Invalid username or email")
|
raise exc.WrongArguments(_("Invalid username or email"))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
queryset = User.objects.all()
|
queryset = User.objects.all()
|
||||||
user = queryset.get(Q(username=username_or_email) |
|
user = queryset.get(Q(username=username_or_email) |
|
||||||
Q(email=username_or_email))
|
Q(email=username_or_email))
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
raise exc.WrongArguments("Invalid username or email")
|
raise exc.WrongArguments(_("Invalid username or email"))
|
||||||
|
|
||||||
user.token = str(uuid.uuid1())
|
user.token = str(uuid.uuid1())
|
||||||
user.save(update_fields=["token"])
|
user.save(update_fields=["token"])
|
||||||
|
@ -57,7 +58,7 @@ class UsersViewSet(ModelCrudViewSet):
|
||||||
email = mbuilder.password_recovery(user.email, {"user": user})
|
email = mbuilder.password_recovery(user.email, {"user": user})
|
||||||
email.send()
|
email.send()
|
||||||
|
|
||||||
return Response({"detail": "Mail sended successful!"})
|
return Response({"detail": _("Mail sended successful!")})
|
||||||
|
|
||||||
@list_route(permission_classes=[AllowAny], methods=["POST"])
|
@list_route(permission_classes=[AllowAny], methods=["POST"])
|
||||||
def change_password_from_recovery(self, request, pk=None):
|
def change_password_from_recovery(self, request, pk=None):
|
||||||
|
@ -66,7 +67,7 @@ class UsersViewSet(ModelCrudViewSet):
|
||||||
"""
|
"""
|
||||||
serializer = RecoverySerializer(data=request.DATA, many=False)
|
serializer = RecoverySerializer(data=request.DATA, many=False)
|
||||||
if not serializer.is_valid():
|
if not serializer.is_valid():
|
||||||
raise exc.WrongArguments("Token is invalid")
|
raise exc.WrongArguments(_("Token is invalid"))
|
||||||
|
|
||||||
user = User.objects.get(token=serializer.data["token"])
|
user = User.objects.get(token=serializer.data["token"])
|
||||||
user.set_password(serializer.data["password"])
|
user.set_password(serializer.data["password"])
|
||||||
|
@ -83,10 +84,10 @@ class UsersViewSet(ModelCrudViewSet):
|
||||||
password = request.DATA.get("password")
|
password = request.DATA.get("password")
|
||||||
|
|
||||||
if not password:
|
if not password:
|
||||||
raise exc.WrongArguments("incomplete argiments")
|
raise exc.WrongArguments(_("incomplete argiments"))
|
||||||
|
|
||||||
if len(password) < 6:
|
if len(password) < 6:
|
||||||
raise exc.WrongArguments("invalid password length")
|
raise exc.WrongArguments(_("invalid password length"))
|
||||||
|
|
||||||
request.user.set_password(password)
|
request.user.set_password(password)
|
||||||
request.user.save(update_fields=["password"])
|
request.user.save(update_fields=["password"])
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from .models import User, Role
|
from .models import User, Role
|
||||||
|
|
||||||
|
@ -28,7 +30,7 @@ class RecoverySerializer(serializers.Serializer):
|
||||||
try:
|
try:
|
||||||
user = User.objects.get(token=token)
|
user = User.objects.get(token=token)
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
raise serializers.ValidationError("invalid token")
|
raise serializers.ValidationError(_("invalid token"))
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from rest_framework.permissions import IsAuthenticated, AllowAny
|
from rest_framework.permissions import IsAuthenticated, AllowAny
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
@ -85,7 +86,7 @@ class MembershipViewSet(ModelCrudViewSet):
|
||||||
Q(project_id=serializer.data["project"],
|
Q(project_id=serializer.data["project"],
|
||||||
email=serializer.data["email"]))
|
email=serializer.data["email"]))
|
||||||
if qs.count() > 0:
|
if qs.count() > 0:
|
||||||
raise exc.WrongArguments("Already exist user with specified email address.")
|
raise exc.WrongArguments(_("Already exist user with specified email address."))
|
||||||
|
|
||||||
self.pre_save(serializer.object)
|
self.pre_save(serializer.object)
|
||||||
self.object = serializer.save(force_insert=True)
|
self.object = serializer.save(force_insert=True)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
import reversion
|
import reversion
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from rest_framework.decorators import list_route
|
from rest_framework.decorators import list_route
|
||||||
|
@ -78,22 +79,22 @@ class IssueViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||||
|
|
||||||
if (obj.project.owner != self.request.user and
|
if (obj.project.owner != self.request.user and
|
||||||
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
||||||
raise exc.PreconditionError("You must not add a new issue to this project.")
|
raise exc.PreconditionError(_("You must not add a new issue to this project."))
|
||||||
|
|
||||||
if obj.milestone and obj.milestone.project != obj.project:
|
if obj.milestone and obj.milestone.project != obj.project:
|
||||||
raise exc.PreconditionError("You must not add a new issue to this milestone.")
|
raise exc.PreconditionError(_("You must not add a new issue to this milestone."))
|
||||||
|
|
||||||
if obj.status and obj.status.project != obj.project:
|
if obj.status and obj.status.project != obj.project:
|
||||||
raise exc.PreconditionError("You must not use a status from other project.")
|
raise exc.PreconditionError(_("You must not use a status from other project."))
|
||||||
|
|
||||||
if obj.severity and obj.severity.project != obj.project:
|
if obj.severity and obj.severity.project != obj.project:
|
||||||
raise exc.PreconditionError("You must not use a severity from other project.")
|
raise exc.PreconditionError(_("You must not use a severity from other project."))
|
||||||
|
|
||||||
if obj.priority and obj.priority.project != obj.project:
|
if obj.priority and obj.priority.project != obj.project:
|
||||||
raise exc.PreconditionError("You must not use a priority from other project.")
|
raise exc.PreconditionError(_("You must not use a priority from other project."))
|
||||||
|
|
||||||
if obj.type and obj.type.project != obj.project:
|
if obj.type and obj.type.project != obj.project:
|
||||||
raise exc.PreconditionError("You must not use a type from other project.")
|
raise exc.PreconditionError(_("You must not use a type from other project."))
|
||||||
|
|
||||||
def post_save(self, obj, created=False):
|
def post_save(self, obj, created=False):
|
||||||
with reversion.create_revision():
|
with reversion.create_revision():
|
||||||
|
@ -127,5 +128,4 @@ class IssueAttachmentViewSet(ModelCrudViewSet):
|
||||||
|
|
||||||
if (obj.project.owner != self.request.user and
|
if (obj.project.owner != self.request.user and
|
||||||
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
||||||
raise exc.PreconditionError("You must not add a new issue attachment "
|
raise exc.PreconditionError(_("You must not add a new issue attachment to this project."))
|
||||||
"to this project.")
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ class MilestoneViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||||
|
|
||||||
if (obj.project.owner != self.request.user and
|
if (obj.project.owner != self.request.user and
|
||||||
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
||||||
raise exc.PreconditionError("You must not add a new milestone to this project.")
|
raise exc.PreconditionError(_("You must not add a new milestone to this project."))
|
||||||
|
|
||||||
def pre_save(self, obj):
|
def pre_save(self, obj):
|
||||||
if not obj.id:
|
if not obj.id:
|
||||||
|
|
|
@ -44,8 +44,7 @@ class TaskAttachmentViewSet(ModelCrudViewSet):
|
||||||
|
|
||||||
if (obj.project.owner != self.request.user and
|
if (obj.project.owner != self.request.user and
|
||||||
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
||||||
raise exc.PreconditionError("You must not add a new task attachment "
|
raise exc.PreconditionError(_("You must not add a new task attachment to this project."))
|
||||||
"to this project.")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,16 +71,16 @@ class TaskViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||||
|
|
||||||
if (obj.project.owner != self.request.user and
|
if (obj.project.owner != self.request.user and
|
||||||
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
||||||
raise exc.PreconditionError("You must not add a new task to this project.")
|
raise exc.PreconditionError(_("You must not add a new task to this project."))
|
||||||
|
|
||||||
if obj.milestone and obj.milestone.project != obj.project:
|
if obj.milestone and obj.milestone.project != obj.project:
|
||||||
raise exc.PreconditionError("You must not add a task to this milestone.")
|
raise exc.PreconditionError(_("You must not add a task to this milestone."))
|
||||||
|
|
||||||
if obj.user_story and obj.user_story.project != obj.project:
|
if obj.user_story and obj.user_story.project != obj.project:
|
||||||
raise exc.PreconditionError("You must not add a task to this user story.")
|
raise exc.PreconditionError(_("You must not add a task to this user story."))
|
||||||
|
|
||||||
if obj.status and obj.status.project != obj.project:
|
if obj.status and obj.status.project != obj.project:
|
||||||
raise exc.PreconditionError("You must not use a status from other project.")
|
raise exc.PreconditionError(_("You must not use a status from other project."))
|
||||||
|
|
||||||
def post_save(self, obj, created=False):
|
def post_save(self, obj, created=False):
|
||||||
with reversion.create_revision():
|
with reversion.create_revision():
|
||||||
|
|
|
@ -52,8 +52,7 @@ class UserStoryAttachmentViewSet(ModelCrudViewSet):
|
||||||
|
|
||||||
if (obj.project.owner != self.request.user and
|
if (obj.project.owner != self.request.user and
|
||||||
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
||||||
raise exc.PreconditionError("You must not add a new user story attachment "
|
raise exc.PreconditionError(_("You must not add a new user story attachment to this project."))
|
||||||
"to this project.")
|
|
||||||
|
|
||||||
|
|
||||||
class UserStoryViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
class UserStoryViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||||
|
@ -72,16 +71,16 @@ class UserStoryViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||||
def bulk_create(self, request, **kwargs):
|
def bulk_create(self, request, **kwargs):
|
||||||
bulk_stories = request.DATA.get('bulkStories', None)
|
bulk_stories = request.DATA.get('bulkStories', None)
|
||||||
if bulk_stories is None:
|
if bulk_stories is None:
|
||||||
raise exc.BadRequest(detail='You need bulkStories data')
|
raise exc.BadRequest(detail=_('You need bulkStories data'))
|
||||||
|
|
||||||
project_id = request.DATA.get('projectId', None)
|
project_id = request.DATA.get('projectId', None)
|
||||||
if project_id is None:
|
if project_id is None:
|
||||||
raise exc.BadRequest(detail='You need projectId data')
|
raise exc.BadRequest(detail=_('You need projectId data'))
|
||||||
|
|
||||||
project = get_object_or_404(Project, id=project_id)
|
project = get_object_or_404(Project, id=project_id)
|
||||||
|
|
||||||
if not has_project_perm(request.user, project, 'add_userstory'):
|
if not has_project_perm(request.user, project, 'add_userstory'):
|
||||||
raise exc.PermissionDenied("You don't have permision to create user stories")
|
raise exc.PermissionDenied(_("You don't have permision to create user stories"))
|
||||||
|
|
||||||
service = services.UserStoriesService()
|
service = services.UserStoriesService()
|
||||||
service.bulk_insert(project, request.user, bulk_stories)
|
service.bulk_insert(project, request.user, bulk_stories)
|
||||||
|
@ -123,15 +122,13 @@ class UserStoryViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||||
|
|
||||||
if (obj.project.owner != self.request.user and
|
if (obj.project.owner != self.request.user and
|
||||||
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
||||||
raise exc.PreconditionError("You must not add a new user story to this "
|
raise exc.PreconditionError(_("You must not add a new user story to this project."))
|
||||||
"project.")
|
|
||||||
|
|
||||||
if obj.milestone and obj.milestone.project != obj.project:
|
if obj.milestone and obj.milestone.project != obj.project:
|
||||||
raise exc.PreconditionError("You must not add a new user story to this "
|
raise exc.PreconditionError(_("You must not add a new user story to this milestone."))
|
||||||
"milestone.")
|
|
||||||
|
|
||||||
if obj.status and obj.status.project != obj.project:
|
if obj.status and obj.status.project != obj.project:
|
||||||
raise exc.PreconditionError("You must not use a status from other project.")
|
raise exc.PreconditionError(_("You must not use a status from other project."))
|
||||||
|
|
||||||
def post_save(self, obj, created=False):
|
def post_save(self, obj, created=False):
|
||||||
with reversion.create_revision():
|
with reversion.create_revision():
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
|
||||||
|
@ -35,8 +36,7 @@ class WikiAttachmentViewSet(ModelCrudViewSet):
|
||||||
|
|
||||||
if (obj.project.owner != self.request.user and
|
if (obj.project.owner != self.request.user and
|
||||||
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
||||||
raise exc.PreconditionError("You must not add a new wiki page to this "
|
raise exc.PreconditionError(_("You must not add a new wiki page to this project."))
|
||||||
"project.")
|
|
||||||
|
|
||||||
def pre_save(self, obj):
|
def pre_save(self, obj):
|
||||||
if not obj.id:
|
if not obj.id:
|
||||||
|
@ -61,8 +61,7 @@ class WikiViewSet(ModelCrudViewSet):
|
||||||
|
|
||||||
if (obj.project.owner != self.request.user and
|
if (obj.project.owner != self.request.user and
|
||||||
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
obj.project.memberships.filter(user=self.request.user).count() == 0):
|
||||||
raise exc.PreconditionError("You must not add a new wiki page to this "
|
raise exc.PreconditionError(_("You must not add a new wiki page to this project."))
|
||||||
"project.")
|
|
||||||
|
|
||||||
def pre_save(self, obj):
|
def pre_save(self, obj):
|
||||||
if not obj.owner:
|
if not obj.owner:
|
||||||
|
|
Loading…
Reference in New Issue