mirror of https://github.com/zulip/zulip.git
add_subscriptions_backend: Add 'transaction.atomic' decorator.
This commit adds an 'transaction.atomic' decorator to the 'add_subscriptions_backend' view thus making the db operations within the view atomic and helps to avoid race between events sent. In tests where we make POST requests to this view, we have wrapped the API calls with a transaction.atomic() context manager. It helps us with NOT rolling back the entire test transaction due to error responses.
This commit is contained in:
parent
9c614531fb
commit
d92eb77c98
|
@ -32,7 +32,7 @@ from django.apps import apps
|
|||
from django.conf import settings
|
||||
from django.core.mail import EmailMessage
|
||||
from django.core.signals import got_request_exception
|
||||
from django.db import connection
|
||||
from django.db import connection, transaction
|
||||
from django.db.migrations.executor import MigrationExecutor
|
||||
from django.db.migrations.state import StateApps
|
||||
from django.db.utils import IntegrityError
|
||||
|
@ -1458,13 +1458,17 @@ Output:
|
|||
"invite_only": orjson.dumps(invite_only).decode(),
|
||||
}
|
||||
post_data.update(extra_post_data)
|
||||
result = self.api_post(
|
||||
user,
|
||||
"/api/v1/users/me/subscriptions",
|
||||
post_data,
|
||||
intentionally_undocumented=False,
|
||||
**extra,
|
||||
)
|
||||
# We wrap the API call with a 'transaction.atomic()' context
|
||||
# manager as it helps us with NOT rolling back the entire
|
||||
# test transaction due to error responses.
|
||||
with transaction.atomic():
|
||||
result = self.api_post(
|
||||
user,
|
||||
"/api/v1/users/me/subscriptions",
|
||||
post_data,
|
||||
intentionally_undocumented=False,
|
||||
**extra,
|
||||
)
|
||||
if not allow_fail:
|
||||
self.assert_json_success(result)
|
||||
return result
|
||||
|
|
|
@ -533,6 +533,7 @@ RETENTION_DEFAULT: Union[str, int] = "realm_default"
|
|||
EMPTY_PRINCIPALS: Union[Sequence[str], Sequence[int]] = []
|
||||
|
||||
|
||||
@transaction.atomic(savepoint=False)
|
||||
@require_non_guest_user
|
||||
@has_request_variables
|
||||
def add_subscriptions_backend(
|
||||
|
|
Loading…
Reference in New Issue