Adding pre_save to the bulk actions
parent
d9246b1ec0
commit
2817b3b120
|
@ -43,7 +43,7 @@ def reload_attribute(model_instance, attr_name):
|
|||
|
||||
|
||||
@transaction.atomic
|
||||
def save_in_bulk(instances, callback=None, **save_options):
|
||||
def save_in_bulk(instances, callback=None, precall=None, **save_options):
|
||||
"""Save a list of model instances.
|
||||
|
||||
:params instances: List of model instances.
|
||||
|
@ -53,16 +53,20 @@ def save_in_bulk(instances, callback=None, **save_options):
|
|||
if callback is None:
|
||||
callback = functions.identity
|
||||
|
||||
if precall is None:
|
||||
precall = functions.identity
|
||||
|
||||
for instance in instances:
|
||||
if instance.pk is None:
|
||||
created = True
|
||||
|
||||
precall(instance)
|
||||
instance.save(**save_options)
|
||||
callback(instance, created=True)
|
||||
|
||||
|
||||
@transaction.atomic
|
||||
def update_in_bulk(instances, list_of_new_values, callback=None):
|
||||
def update_in_bulk(instances, list_of_new_values, callback=None, precall=None):
|
||||
"""Update a list of model instances.
|
||||
|
||||
:params instances: List of model instances.
|
||||
|
@ -71,10 +75,13 @@ def update_in_bulk(instances, list_of_new_values, callback=None):
|
|||
"""
|
||||
if callback is None:
|
||||
callback = functions.identity
|
||||
if precall is None:
|
||||
precall = functions.identity
|
||||
|
||||
for instance, new_values in zip(instances, list_of_new_values):
|
||||
for attribute, value in new_values.items():
|
||||
setattr(instance, attribute, value)
|
||||
precall(instance)
|
||||
instance.save()
|
||||
callback(instance)
|
||||
|
||||
|
|
|
@ -188,7 +188,8 @@ class MembershipViewSet(ModelCrudViewSet):
|
|||
project = models.Project.objects.get(id=data["project_id"])
|
||||
self.check_permissions(request, 'bulk_create', project)
|
||||
members = services.create_members_in_bulk(
|
||||
data["bulk_memberships"], project=project, callback=self.post_save)
|
||||
data["bulk_memberships"], project=project, callback=self.post_save,
|
||||
precall=self.pre_save)
|
||||
members_serialized = self.serializer_class(members, many=True)
|
||||
|
||||
return response.Ok(data=members_serialized.data)
|
||||
|
|
|
@ -165,7 +165,7 @@ class IssueViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin,
|
|||
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)
|
||||
callback=self.post_save, precall=self.pre_save)
|
||||
issues_serialized = self.serializer_class(issues, many=True)
|
||||
|
||||
return response.Ok(data=issues_serialized.data)
|
||||
|
|
|
@ -31,7 +31,7 @@ def get_issues_from_bulk(bulk_data, **additional_fields):
|
|||
for line in text.split_in_lines(bulk_data)]
|
||||
|
||||
|
||||
def create_issues_in_bulk(bulk_data, callback=None, **additional_fields):
|
||||
def create_issues_in_bulk(bulk_data, callback=None, precall=None, **additional_fields):
|
||||
"""Create issues from `bulk_data`.
|
||||
|
||||
:param bulk_data: List of issues in bulk format.
|
||||
|
@ -41,7 +41,7 @@ def create_issues_in_bulk(bulk_data, callback=None, **additional_fields):
|
|||
:return: List of created `Issue` instances.
|
||||
"""
|
||||
issues = get_issues_from_bulk(bulk_data, **additional_fields)
|
||||
db.save_in_bulk(issues, callback)
|
||||
db.save_in_bulk(issues, callback, precall)
|
||||
return issues
|
||||
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ def get_members_from_bulk(bulk_data, **additional_fields):
|
|||
return members
|
||||
|
||||
|
||||
def create_members_in_bulk(bulk_data, callback=None, **additional_fields):
|
||||
def create_members_in_bulk(bulk_data, callback=None, precall=None, **additional_fields):
|
||||
"""Create members from `bulk_data`.
|
||||
|
||||
:param bulk_data: List of dicts `{"project_id": <>, "role_id": <>, "email": <>}`.
|
||||
|
@ -29,5 +29,5 @@ def create_members_in_bulk(bulk_data, callback=None, **additional_fields):
|
|||
:return: List of created `Member` instances.
|
||||
"""
|
||||
members = get_members_from_bulk(bulk_data, **additional_fields)
|
||||
db.save_in_bulk(members, callback)
|
||||
db.save_in_bulk(members, callback, precall)
|
||||
return members
|
||||
|
|
|
@ -70,7 +70,7 @@ class TaskViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin,
|
|||
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") or project.default_task_status_id,
|
||||
project=project, owner=request.user, callback=self.post_save)
|
||||
project=project, owner=request.user, callback=self.post_save, precall=self.pre_save)
|
||||
tasks_serialized = self.serializer_class(tasks, many=True)
|
||||
|
||||
return response.Ok(tasks_serialized.data)
|
||||
|
|
|
@ -31,7 +31,7 @@ def get_tasks_from_bulk(bulk_data, **additional_fields):
|
|||
for line in text.split_in_lines(bulk_data)]
|
||||
|
||||
|
||||
def create_tasks_in_bulk(bulk_data, callback=None, **additional_fields):
|
||||
def create_tasks_in_bulk(bulk_data, callback=None, precall=None, **additional_fields):
|
||||
"""Create tasks from `bulk_data`.
|
||||
|
||||
:param bulk_data: List of tasks in bulk format.
|
||||
|
@ -41,5 +41,5 @@ def create_tasks_in_bulk(bulk_data, callback=None, **additional_fields):
|
|||
:return: List of created `Task` instances.
|
||||
"""
|
||||
tasks = get_tasks_from_bulk(bulk_data, **additional_fields)
|
||||
db.save_in_bulk(tasks, callback)
|
||||
db.save_in_bulk(tasks, callback, precall)
|
||||
return tasks
|
||||
|
|
|
@ -73,7 +73,7 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi
|
|||
user_stories = services.create_userstories_in_bulk(
|
||||
data["bulk_stories"], project=project, owner=request.user,
|
||||
status_id=data.get("status_id") or project.default_us_status_id,
|
||||
callback=self.post_save)
|
||||
callback=self.post_save, precall=self.pre_save)
|
||||
user_stories_serialized = self.serializer_class(user_stories, many=True)
|
||||
return response.Ok(user_stories_serialized.data)
|
||||
return response.BadRequest(serializer.errors)
|
||||
|
|
|
@ -33,7 +33,7 @@ def get_userstories_from_bulk(bulk_data, **additional_fields):
|
|||
for line in text.split_in_lines(bulk_data)]
|
||||
|
||||
|
||||
def create_userstories_in_bulk(bulk_data, callback=None, **additional_fields):
|
||||
def create_userstories_in_bulk(bulk_data, callback=None, precall=None, **additional_fields):
|
||||
"""Create user stories from `bulk_data`.
|
||||
|
||||
:param bulk_data: List of user stories in bulk format.
|
||||
|
@ -43,7 +43,7 @@ def create_userstories_in_bulk(bulk_data, callback=None, **additional_fields):
|
|||
:return: List of created `Task` instances.
|
||||
"""
|
||||
userstories = get_userstories_from_bulk(bulk_data, **additional_fields)
|
||||
db.save_in_bulk(userstories, callback)
|
||||
db.save_in_bulk(userstories, callback, precall)
|
||||
return userstories
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue