Convert bulk update services classes to simple functions.

Because we are using python and not java ;)
remotes/origin/enhancement/email-actions
Andrey Antukh 2014-04-20 01:08:24 +02:00
parent eac6ac05ad
commit 2ad28a56c7
2 changed files with 122 additions and 131 deletions

View File

@ -170,18 +170,17 @@ class RolesViewSet(ModelCrudViewSet):
filter_backends = (filters.IsProjectMemberFilterBackend,) filter_backends = (filters.IsProjectMemberFilterBackend,)
filter_fields = ('project',) filter_fields = ('project',)
# User Stories commin ViewSets # User Stories commin ViewSets
class BulkUpdateOrderMixin: class BulkUpdateOrderMixin(object):
""" """
This mixin need three fields in the child class: This mixin need three fields in the child class:
- bulk_update_param: that the name of the field of the data received from - bulk_update_param: that the name of the field of the data received from
the cliente that contains the pairs (id, order) to sort the objects. the cliente that contains the pairs (id, order) to sort the objects.
- bulk_update_perm: that containts the codename of the permission needed to - bulk_update_perm: that containts the codename of the permission needed to sort.
sort. - bulk_update_order: method with bulk update order logic
- bulk_update_service: that is a object with the bulk_update_order method
for ordering the object.
""" """
@list_route(methods=["POST"]) @list_route(methods=["POST"])
@ -200,10 +199,10 @@ class BulkUpdateOrderMixin:
if request.user != project.owner and not has_project_perm(request.user, project, self.bulk_update_perm): if request.user != project.owner and not has_project_perm(request.user, project, self.bulk_update_perm):
raise exc.PermissionDenied(_("You don't have permisions %s.") % self.bulk_update_perm) raise exc.PermissionDenied(_("You don't have permisions %s.") % self.bulk_update_perm)
self.bulk_update_service.bulk_update_order(project, request.user, bulk_data) self.bulk_update_order(project, request.user, bulk_data)
return Response(data=None, status=status.HTTP_204_NO_CONTENT) return Response(data=None, status=status.HTTP_204_NO_CONTENT)
class PointsViewSet(ModelCrudViewSet, BulkUpdateOrderMixin): class PointsViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
model = models.Points model = models.Points
serializer_class = serializers.PointsSerializer serializer_class = serializers.PointsSerializer
@ -212,7 +211,7 @@ class PointsViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
filter_fields = ('project',) filter_fields = ('project',)
bulk_update_param = "bulk_points" bulk_update_param = "bulk_points"
bulk_update_perm = "change_points" bulk_update_perm = "change_points"
bulk_update_service = services.PointsService() bulk_update_order = services.bulk_update_points_order
class UserStoryStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin): class UserStoryStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
@ -223,7 +222,7 @@ class UserStoryStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
filter_fields = ('project',) filter_fields = ('project',)
bulk_update_param = "bulk_userstory_statuses" bulk_update_param = "bulk_userstory_statuses"
bulk_update_perm = "change_userstorystatus" bulk_update_perm = "change_userstorystatus"
bulk_update_service = services.UserStoryStatusesService() bulk_update_order = services.bulk_update_userstory_status_order
class TaskStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin): class TaskStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
@ -234,7 +233,7 @@ class TaskStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
filter_fields = ("project",) filter_fields = ("project",)
bulk_update_param = "bulk_task_statuses" bulk_update_param = "bulk_task_statuses"
bulk_update_perm = "change_taskstatus" bulk_update_perm = "change_taskstatus"
bulk_update_service = services.TaskStatusesService() bulk_update_order = services.bulk_update_task_status_order
class SeverityViewSet(ModelCrudViewSet, BulkUpdateOrderMixin): class SeverityViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
@ -245,7 +244,7 @@ class SeverityViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
filter_fields = ("project",) filter_fields = ("project",)
bulk_update_param = "bulk_severities" bulk_update_param = "bulk_severities"
bulk_update_perm = "change_severity" bulk_update_perm = "change_severity"
bulk_update_service = services.SeveritiesService() bulk_update_order = services.bulk_update_severity_order
class PriorityViewSet(ModelCrudViewSet, BulkUpdateOrderMixin): class PriorityViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
@ -256,7 +255,7 @@ class PriorityViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
filter_fields = ("project",) filter_fields = ("project",)
bulk_update_param = "bulk_priorities" bulk_update_param = "bulk_priorities"
bulk_update_perm = "change_priority" bulk_update_perm = "change_priority"
bulk_update_service = services.PrioritiesService() bulk_update_order = services.bulk_update_priority_order
class IssueTypeViewSet(ModelCrudViewSet, BulkUpdateOrderMixin): class IssueTypeViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
@ -267,7 +266,7 @@ class IssueTypeViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
filter_fields = ("project",) filter_fields = ("project",)
bulk_update_param = "bulk_issue_types" bulk_update_param = "bulk_issue_types"
bulk_update_perm = "change_issuetype" bulk_update_perm = "change_issuetype"
bulk_update_service = services.IssueTypesService() bulk_update_order = services.bulk_update_issue_type_order
class IssueStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin): class IssueStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
@ -278,7 +277,7 @@ class IssueStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
filter_fields = ("project",) filter_fields = ("project",)
bulk_update_param = "bulk_issue_statuses" bulk_update_param = "bulk_issue_statuses"
bulk_update_perm = "change_issuestatus" bulk_update_perm = "change_issuestatus"
bulk_update_service = services.IssueStatusesService() bulk_update_order = services.bulk_update_issue_status_order
class QuestionStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin): class QuestionStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
@ -289,4 +288,4 @@ class QuestionStatusViewSet(ModelCrudViewSet, BulkUpdateOrderMixin):
filter_fields = ("project",) filter_fields = ("project",)
bulk_update_param = "bulk_question_statuses" bulk_update_param = "bulk_question_statuses"
bulk_update_perm = "change_questionstatus" bulk_update_perm = "change_questionstatus"
bulk_update_service = services.QuestionStatusesService() bulk_update_order = services.bulk_update_question_status_order

View File

@ -3,145 +3,137 @@
from django.db import transaction from django.db import transaction
from django.db import connection from django.db import connection
from . import models
class UserStoryStatusesService(object):
@transaction.atomic
def bulk_update_order(self, project, user, data):
cursor = connection.cursor()
sql = """ @transaction.atomic
prepare bulk_update_order as update projects_userstorystatus set "order" = $1 def bulk_update_userstory_status_order(project, user, data):
where projects_userstorystatus.id = $2 and cursor = connection.cursor()
projects_userstorystatus.project_id = $3;
"""
cursor.execute(sql) sql = """
for id, order in data: prepare bulk_update_order as update projects_userstorystatus set "order" = $1
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);", where projects_userstorystatus.id = $2 and
(order, id, project.id)) projects_userstorystatus.project_id = $3;
cursor.close() """
cursor.execute(sql)
for id, order in data:
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
(order, id, project.id))
cursor.close()
class PointsService(object): @transaction.atomic
@transaction.atomic def bulk_update_points_order(project, user, data):
def bulk_update_order(self, project, user, data): cursor = connection.cursor()
cursor = connection.cursor()
sql = """ sql = """
prepare bulk_update_order as update projects_points set "order" = $1 prepare bulk_update_order as update projects_points set "order" = $1
where projects_points.id = $2 and where projects_points.id = $2 and
projects_points.project_id = $3; projects_points.project_id = $3;
""" """
cursor.execute(sql) cursor.execute(sql)
for id, order in data: for id, order in data:
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);", cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
(order, id, project.id)) (order, id, project.id))
cursor.close() cursor.close()
class TaskStatusesService(object):
@transaction.atomic
def bulk_update_order(self, project, user, data):
cursor = connection.cursor()
sql = """
prepare bulk_update_order as update projects_taskstatus set "order" = $1
where projects_taskstatus.id = $2 and
projects_taskstatus.project_id = $3;
"""
cursor.execute(sql)
for id, order in data:
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
(order, id, project.id))
cursor.close()
class IssueStatusesService(object): @transaction.atomic
@transaction.atomic def bulk_update_task_status_order(project, user, data):
def bulk_update_order(self, project, user, data): cursor = connection.cursor()
cursor = connection.cursor()
sql = """ sql = """
prepare bulk_update_order as update projects_issuestatus set "order" = $1 prepare bulk_update_order as update projects_taskstatus set "order" = $1
where projects_issuestatus.id = $2 and where projects_taskstatus.id = $2 and
projects_issuestatus.project_id = $3; projects_taskstatus.project_id = $3;
""" """
cursor.execute(sql) cursor.execute(sql)
for id, order in data: for id, order in data:
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);", cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
(order, id, project.id)) (order, id, project.id))
cursor.close() cursor.close()
class IssueTypesService(object): @transaction.atomic
@transaction.atomic def bulk_update_issue_status_order(project, user, data):
def bulk_update_order(self, project, user, data): cursor = connection.cursor()
cursor = connection.cursor()
sql = """ sql = """
prepare bulk_update_order as update projects_issuetype set "order" = $1 prepare bulk_update_order as update projects_issuestatus set "order" = $1
where projects_issuetype.id = $2 and where projects_issuestatus.id = $2 and
projects_issuetype.project_id = $3; projects_issuestatus.project_id = $3;
""" """
cursor.execute(sql) cursor.execute(sql)
for id, order in data: for id, order in data:
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);", cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
(order, id, project.id)) (order, id, project.id))
cursor.close() cursor.close()
class PrioritiesService(object): @transaction.atomic
@transaction.atomic def bulk_update_issue_type_order(project, user, data):
def bulk_update_order(self, project, user, data): cursor = connection.cursor()
cursor = connection.cursor()
sql = """ sql = """
prepare bulk_update_order as update projects_priority set "order" = $1 prepare bulk_update_order as update projects_issuetype set "order" = $1
where projects_priority.id = $2 and where projects_issuetype.id = $2 and
projects_priority.project_id = $3; projects_issuetype.project_id = $3;
""" """
cursor.execute(sql) cursor.execute(sql)
for id, order in data: for id, order in data:
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);", cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
(order, id, project.id)) (order, id, project.id))
cursor.close() cursor.close()
class SeveritiesService(object): @transaction.atomic
@transaction.atomic def bulk_update_priority_order(project, user, data):
def bulk_update_order(self, project, user, data): cursor = connection.cursor()
cursor = connection.cursor()
sql = """ sql = """
prepare bulk_update_order as update projects_severity set "order" = $1 prepare bulk_update_order as update projects_priority set "order" = $1
where projects_severity.id = $2 and where projects_priority.id = $2 and
projects_severity.project_id = $3; projects_priority.project_id = $3;
""" """
cursor.execute(sql) cursor.execute(sql)
for id, order in data: for id, order in data:
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);", cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
(order, id, project.id)) (order, id, project.id))
cursor.close() cursor.close()
class QuestionStatusesService(object): @transaction.atomic
@transaction.atomic def bulk_update_severity_order(project, user, data):
def bulk_update_order(self, project, user, data): cursor = connection.cursor()
cursor = connection.cursor()
sql = """ sql = """
prepare bulk_update_order as update projects_questionstatus set "order" = $1 prepare bulk_update_order as update projects_severity set "order" = $1
where projects_questionstatus.id = $2 and where projects_severity.id = $2 and
projects_questionstatus.project_id = $3; projects_severity.project_id = $3;
""" """
cursor.execute(sql) cursor.execute(sql)
for id, order in data: for id, order in data:
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);", cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
(order, id, project.id)) (order, id, project.id))
cursor.close() cursor.close()
@transaction.atomic
def bulk_update_question_status_order(project, user, data):
cursor = connection.cursor()
sql = """
prepare bulk_update_order as update projects_questionstatus set "order" = $1
where projects_questionstatus.id = $2 and
projects_questionstatus.project_id = $3;
"""
cursor.execute(sql)
for id, order in data:
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
(order, id, project.id))
cursor.close()