0005-rbac-update_or_create-roleparenting-for-update_trans.patch
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 |
- |