Projet

Général

Profil

0005-rbac-update_or_create-roleparenting-for-update_trans.patch

Paul Marillonnet, 12 octobre 2021 10:52

Télécharger (1,75 ko)

Voir les différences:

Subject: [PATCH 5/6] rbac: update_or_create roleparenting for
 update_transitive_closure (#57500)

 src/django_rbac/managers.py | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)
src/django_rbac/managers.py
183 183
            self.tls.CLOSURE_UPDATED = True
184 184
            return
185 185

  
186
        old = ris = self.filter_out_soft_deleted()
186 187
        # existing indirect paths
187
        old = set(self.filter(direct=False).values_list('parent_id', 'child_id'))
188
        old = old.filter(direct=False)
188 189
        # existing direct paths
189
        ris = set(self.filter(direct=True).values_list('parent_id', 'child_id'))
190
        ris = ris.filter(direct=True)
191
        old = set(old.values_list('parent_id', 'child_id'))
192
        ris = set(ris.values_list('parent_id', 'child_id'))
193

  
190 194
        add = set()
191 195
        new = set()
192 196
        old_new = ris
......
209 213
            old_new = new
210 214
            new = set()
211 215
        # Create new relations
212
        self.model.objects.bulk_create(
213
            self.model(parent_id=a, child_id=b, direct=False) for a, b in add - old
214
        )
216
        for a, b in add - old:
217
            rp, created = self.model.objects.update_or_create(parent_id=a, child_id=b, direct=False)
218
            if not created:
219
                rp.soft_create()
215 220
        # Delete old ones
216 221
        obsolete = old - add
217 222
        if obsolete:
218
-