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.response import Response
from rest_framework import status 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 import exceptions as exc
from taiga.base.decorators import detail_route, list_route from taiga.base.decorators import detail_route, list_route
from taiga.base.api import ModelCrudViewSet, ModelListViewSet from taiga.base.api import ModelCrudViewSet, ModelListViewSet
@ -155,25 +155,21 @@ class IssueViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin,
@list_route(methods=["POST"]) @list_route(methods=["POST"])
def bulk_create(self, request, **kwargs): def bulk_create(self, request, **kwargs):
bulk_issues = request.DATA.get('bulkIssues', None) serializer = serializers.IssuesBulkSerializer(data=request.DATA)
if bulk_issues is None: if serializer.is_valid():
raise exc.BadRequest(_('bulkIssues parameter is mandatory')) 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) return response.Ok(data=issues_serialized.data)
if project_id is None:
raise exc.BadRequest(_('projectId parameter is mandatory'))
project = get_object_or_404(Project, id=project_id) return response.BadRequest(serializer.errors)
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)
@detail_route(methods=['post']) @detail_route(methods=['post'])
def upvote(self, request, pk=None): def upvote(self, request, pk=None):

View File

@ -16,8 +16,9 @@
from rest_framework import serializers 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.mdrender.service import render as mdrender
from taiga.projects.validators import ProjectExistsValidator
from . import models from . import models
@ -62,3 +63,8 @@ class NeighborIssueSerializer(serializers.ModelSerializer):
model = models.Issue model = models.Issue
fields = ("id", "ref", "subject") fields = ("id", "ref", "subject")
depth = 0 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) self.check_permissions(request, 'bulk_create', project)
tasks = services.create_tasks_in_bulk( tasks = services.create_tasks_in_bulk(
data["bulk_tasks"], milestone_id=data["sprint_id"], user_story_id=data["us_id"], 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) project=project, owner=request.user, callback=self.post_save)
tasks_serialized = self.serializer_class(tasks, many=True) 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) self.check_permissions(request, 'bulk_create', project)
user_stories = services.create_userstories_in_bulk( user_stories = services.create_userstories_in_bulk(
data["bulk_stories"], project=project, owner=request.user, 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) callback=self.post_save)
user_stories_serialized = self.serializer_class(user_stories, many=True) user_stories_serialized = self.serializer_class(user_stories, many=True)
return response.Ok(user_stories_serialized.data) 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) results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 200, 200, 200, 200] 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) results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 200, 200, 200, 200] 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) results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 403, 403, 200, 200] 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() project = f.create_project()
url = reverse("issues-bulk-create") url = reverse("issues-bulk-create")
data = {"bulkIssues": "Issue #1\nIssue #2", data = {"bulk_issues": "Issue #1\nIssue #2",
"projectId": project.id} "project_id": project.id}
client.login(project.owner) client.login(project.owner)
response = client.json.post(url, data) response = client.json.post(url, data)