From 7971b081a957f4e37d3a8f341f948081e6271ee5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 15 May 2019 01:35:50 -0400 Subject: [PATCH] Add transaction handling Signed-off-by: Roberto Rosario --- mayan/apps/cabinets/models.py | 32 +++++++++++++----------- mayan/apps/cabinets/tests/test_events.py | 6 ++--- mayan/apps/cabinets/views.py | 8 +++--- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/mayan/apps/cabinets/models.py b/mayan/apps/cabinets/models.py index 8db6f827b6..b59e637157 100644 --- a/mayan/apps/cabinets/models.py +++ b/mayan/apps/cabinets/models.py @@ -49,15 +49,27 @@ class Cabinet(MPTTModel): def __str__(self): return self.get_full_path() - def add_document(self, document, user=None): + def document_add(self, document, _user=None): """ Add a document to a container. This can be done without using this method but this method provides the event commit already coded. """ - self.documents.add(document) - event_cabinet_add_document.commit( - action_object=self, actor=user, target=document - ) + with transaction.atomic(): + self.documents.add(document) + event_cabinet_add_document.commit( + action_object=self, actor=_user, target=document + ) + + def document_remove(self, document, _user=None): + """ + Remove a document from a cabinet. This method provides the + corresponding event commit. + """ + with transaction.atomic(): + self.documents.remove(document) + event_cabinet_remove_document.commit( + action_object=self, actor=_user, target=document + ) def get_absolute_url(self): return reverse(viewname='cabinets:cabinet_view', kwargs={'pk': self.pk}) @@ -90,16 +102,6 @@ class Cabinet(MPTTModel): return ' / '.join(result) - def remove_document(self, document, user=None): - """ - Remove a document from a cabinet. This method provides the - corresponding event commit. - """ - self.documents.remove(document) - event_cabinet_remove_document.commit( - action_object=self, actor=user, target=document - ) - def save(self, *args, **kwargs): _user = kwargs.pop('_user', None) diff --git a/mayan/apps/cabinets/tests/test_events.py b/mayan/apps/cabinets/tests/test_events.py index d131291abd..a0a7961deb 100644 --- a/mayan/apps/cabinets/tests/test_events.py +++ b/mayan/apps/cabinets/tests/test_events.py @@ -82,7 +82,7 @@ class CabinetDocumentsEventsTestCase( self._create_test_cabinet() Action.objects.all().delete() - self.test_cabinet.add_document(document=self.test_document) + self.test_cabinet.document_add(document=self.test_document) self.assertEqual(Action.objects.last().target, self.test_document) self.assertEqual( @@ -93,9 +93,9 @@ class CabinetDocumentsEventsTestCase( def test_document_cabinet_remove_event(self): self._create_test_cabinet() - self.test_cabinet.add_document(document=self.test_document) + self.test_cabinet.document_add(document=self.test_document) Action.objects.all().delete() - self.test_cabinet.remove_document(document=self.test_document) + self.test_cabinet.document_remove(document=self.test_document) self.assertEqual(Action.objects.first().target, self.test_document) self.assertEqual( diff --git a/mayan/apps/cabinets/views.py b/mayan/apps/cabinets/views.py index 7d095ba795..364e65f740 100644 --- a/mayan/apps/cabinets/views.py +++ b/mayan/apps/cabinets/views.py @@ -288,8 +288,8 @@ class DocumentAddToCabinetView(MultipleObjectFormActionView): }, request=self.request ) else: - cabinet.add_document( - document=instance, user=self.request.user + cabinet.document_add( + document=instance, _user=self.request.user ) messages.success( message=_( @@ -377,8 +377,8 @@ class DocumentRemoveFromCabinetView(MultipleObjectFormActionView): }, request=self.request ) else: - cabinet.remove_document( - document=instance, user=self.request.user + cabinet.document_remove( + document=instance, _user=self.request.user ) messages.success( message=_(