0007-rbac-update_or_create-roleparenting-for-update_trans.patch
src/django_rbac/managers.py | ||
---|---|---|
198 | 198 |
self.tls.CLOSURE_UPDATED = True |
199 | 199 |
return |
200 | 200 | |
201 |
old = ris = self.filter(deleted__isnull=True) |
|
201 | 202 |
# existing indirect paths |
202 |
old = set(self.filter(direct=False).values_list('parent_id', 'child_id'))
|
|
203 |
old = old.filter(direct=False)
|
|
203 | 204 |
# existing direct paths |
204 |
ris = set(self.filter(direct=True).values_list('parent_id', 'child_id')) |
|
205 |
ris = ris.filter(direct=True) |
|
206 |
old = set(old.values_list('parent_id', 'child_id')) |
|
207 |
ris = set(ris.values_list('parent_id', 'child_id')) |
|
208 | ||
205 | 209 |
add = set() |
206 | 210 |
new = set() |
207 | 211 |
old_new = ris |
... | ... | |
224 | 228 |
old_new = new |
225 | 229 |
new = set() |
226 | 230 |
# Create new relations |
227 |
self.model.objects.bulk_create( |
|
228 |
self.model(parent_id=a, child_id=b, direct=False) for a, b in add - old |
|
229 |
) |
|
231 |
for a, b in add - old: |
|
232 |
rp, created = self.model.objects.get_or_create(parent_id=a, child_id=b, direct=False) |
|
233 |
if not created: |
|
234 |
rp.created = datetime.datetime.now() |
|
235 |
rp.deleted = None |
|
236 |
rp.save(update_fields=['created', 'deleted']) |
|
230 | 237 |
# Delete old ones |
231 | 238 |
obsolete = old - add |
232 | 239 |
if obsolete: |
233 |
- |