Refactoring issues bulk creation

remotes/origin/enhancement/email-actions
Anler Hp 2014-08-01 14:39:27 +02:00
parent ed603de65f
commit 68a579338f
6 changed files with 28 additions and 26 deletions

View File

@ -22,7 +22,7 @@ from django.http import Http404
from rest_framework.response import Response
from rest_framework import status
from taiga.base import filters
from taiga.base import filters, response
from taiga.base import exceptions as exc
from taiga.base.decorators import detail_route, list_route
from taiga.base.api import ModelCrudViewSet, ModelListViewSet
@ -155,25 +155,21 @@ class IssueViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin,
@list_route(methods=["POST"])
def bulk_create(self, request, **kwargs):
bulk_issues = request.DATA.get('bulkIssues', None)
if bulk_issues is None:
raise exc.BadRequest(_('bulkIssues parameter is mandatory'))
serializer = serializers.IssuesBulkSerializer(data=request.DATA)
if serializer.is_valid():
data = serializer.data
project = Project.objects.get(pk=data["project_id"])
self.check_permissions(request, 'bulk_create', project)
issues = services.create_issues_in_bulk(
data["bulk_issues"], project=project, owner=request.user,
status=project.default_issue_status, severity=project.default_severity,
priority=project.default_priority, type=project.default_issue_type,
callback=self.post_save)
issues_serialized = self.serializer_class(issues, many=True)
project_id = request.DATA.get('projectId', None)
if project_id is None:
raise exc.BadRequest(_('projectId parameter is mandatory'))
return response.Ok(data=issues_serialized.data)
project = get_object_or_404(Project, id=project_id)
self.check_permissions(request, 'bulk_create', project)
issues = services.create_issues_in_bulk(
bulk_issues, callback=self.post_save, project=project, owner=request.user,
status=project.default_issue_status, severity=project.default_severity,
priority=project.default_priority, type=project.default_issue_type)
issues_serialized = self.serializer_class(issues, many=True)
return Response(data=issues_serialized.data)
return response.BadRequest(serializer.errors)
@detail_route(methods=['post'])
def upvote(self, request, pk=None):

View File

@ -16,8 +16,9 @@
from rest_framework import serializers
from taiga.base.serializers import PickleField, NeighborsSerializerMixin
from taiga.base.serializers import Serializer, PickleField, NeighborsSerializerMixin
from taiga.mdrender.service import render as mdrender
from taiga.projects.validators import ProjectExistsValidator
from . import models
@ -62,3 +63,8 @@ class NeighborIssueSerializer(serializers.ModelSerializer):
model = models.Issue
fields = ("id", "ref", "subject")
depth = 0
class IssuesBulkSerializer(ProjectExistsValidator, Serializer):
project_id = serializers.IntegerField()
bulk_issues = serializers.CharField()

View File

@ -69,7 +69,7 @@ class TaskViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin,
self.check_permissions(request, 'bulk_create', project)
tasks = services.create_tasks_in_bulk(
data["bulk_tasks"], milestone_id=data["sprint_id"], user_story_id=data["us_id"],
status_id=data.get("status_id", project.default_task_status_id),
status_id=data.get("status_id") or project.default_task_status_id,
project=project, owner=request.user, callback=self.post_save)
tasks_serialized = self.serializer_class(tasks, many=True)

View File

@ -72,7 +72,7 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi
self.check_permissions(request, 'bulk_create', project)
user_stories = services.create_userstories_in_bulk(
data["bulk_stories"], project=project, owner=request.user,
status_id=data.get("status_id", project.default_us_status_id),
status_id=data.get("status_id") or project.default_us_status_id,
callback=self.post_save)
user_stories_serialized = self.serializer_class(user_stories, many=True)
return response.Ok(user_stories_serialized.data)

View File

@ -295,15 +295,15 @@ def test_issue_bulk_create(client, data):
]
bulk_data = json.dumps({"bulkIssues": "test1\ntest2", "projectId": data.public_issue.project.pk})
bulk_data = json.dumps({"bulk_issues": "test1\ntest2", "project_id": data.public_issue.project.pk})
results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 200, 200, 200, 200]
bulk_data = json.dumps({"bulkIssues": "test1\ntest2", "projectId": data.private_issue1.project.pk})
bulk_data = json.dumps({"bulk_issues": "test1\ntest2", "project_id": data.private_issue1.project.pk})
results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 200, 200, 200, 200]
bulk_data = json.dumps({"bulkIssues": "test1\ntest2", "projectId": data.private_issue2.project.pk})
bulk_data = json.dumps({"bulk_issues": "test1\ntest2", "project_id": data.private_issue2.project.pk})
results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 403, 403, 200, 200]

View File

@ -47,8 +47,8 @@ def test_api_create_issues_in_bulk(client):
project = f.create_project()
url = reverse("issues-bulk-create")
data = {"bulkIssues": "Issue #1\nIssue #2",
"projectId": project.id}
data = {"bulk_issues": "Issue #1\nIssue #2",
"project_id": project.id}
client.login(project.owner)
response = client.json.post(url, data)