agent/authentic2: mark object for provisionning if transaction commit (#52355)
This commit is contained in:
parent
75ec113ec4
commit
1a02b24d14
|
@ -10,7 +10,7 @@ from authentic2.models import AttributeValue
|
|||
from authentic2.saml.models import LibertyProvider
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.db import connection
|
||||
from django.db import connection, transaction
|
||||
from django.urls import reverse
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.six.moves.urllib.parse import urljoin
|
||||
|
@ -48,6 +48,7 @@ class Provisionning(threading.local):
|
|||
{
|
||||
'saved': {},
|
||||
'deleted': {},
|
||||
'in_atomic_block': connection.in_atomic_block,
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -59,11 +60,16 @@ class Provisionning(threading.local):
|
|||
return
|
||||
|
||||
context = self.stack.pop()
|
||||
context.pop('in_atomic_block')
|
||||
|
||||
if provision:
|
||||
self.provision(**context)
|
||||
if wait:
|
||||
self.wait()
|
||||
|
||||
def callback():
|
||||
self.provision(**context)
|
||||
if wait:
|
||||
self.wait()
|
||||
|
||||
transaction.on_commit(callback)
|
||||
|
||||
@property
|
||||
def saved(self):
|
||||
|
@ -81,18 +87,34 @@ class Provisionning(threading.local):
|
|||
if not self.stack:
|
||||
return
|
||||
|
||||
for instance in args:
|
||||
klass = User if isinstance(instance, User) else Role
|
||||
self.saved.setdefault(klass, set()).add(instance)
|
||||
in_atomic_block = self.stack[-1]['in_atomic_block']
|
||||
|
||||
def callback():
|
||||
for instance in args:
|
||||
klass = User if isinstance(instance, User) else Role
|
||||
self.saved.setdefault(klass, set()).add(instance)
|
||||
|
||||
if in_atomic_block:
|
||||
callback()
|
||||
else:
|
||||
transaction.on_commit(callback)
|
||||
|
||||
def add_deleted(self, *args):
|
||||
if not self.stack:
|
||||
return
|
||||
|
||||
for instance in args:
|
||||
klass = User if isinstance(instance, User) else Role
|
||||
self.deleted.setdefault(klass, set()).add(instance)
|
||||
self.saved.get(klass, set()).discard(instance)
|
||||
in_atomic_block = self.stack[-1]['in_atomic_block']
|
||||
|
||||
def callback():
|
||||
for instance in args:
|
||||
klass = User if isinstance(instance, User) else Role
|
||||
self.deleted.setdefault(klass, set()).add(instance)
|
||||
self.saved.get(klass, set()).discard(instance)
|
||||
|
||||
if in_atomic_block:
|
||||
callback()
|
||||
else:
|
||||
transaction.on_commit(callback)
|
||||
|
||||
def resolve_ou(self, instances, ous):
|
||||
for instance in instances:
|
||||
|
|
Loading…
Reference in New Issue