0002-rbac-add-soft-created-deleted-manager-methods-57500.patch
src/django_rbac/managers.py | ||
---|---|---|
1 | 1 |
import contextlib |
2 |
import datetime |
|
2 | 3 |
import functools |
3 | 4 |
import threading |
4 | 5 | |
... | ... | |
7 | 8 |
from django.db import models |
8 | 9 |
from django.db.models import query |
9 | 10 |
from django.db.models.query import Prefetch, Q |
11 |
from django.db.transaction import atomic |
|
10 | 12 | |
11 | 13 |
from . import utils |
12 | 14 | |
... | ... | |
168 | 170 |
raise self.model.DoesNotExist |
169 | 171 |
return self.get(parent=parent, child=child, direct=direct) |
170 | 172 | |
173 |
def soft_create(self, parent, child): |
|
174 |
with atomic(savepoint=False): |
|
175 |
rp, created = self.get_or_create(parent=parent, child=child) |
|
176 |
if not created: |
|
177 |
rp.created = datetime.datetime.now() |
|
178 |
rp.deleted = None |
|
179 |
rp.save(update_fields=['created', 'deleted']) |
|
180 | ||
181 |
def soft_delete(self, parent, child, direct=None): |
|
182 |
qs = self.filter(parent=parent, child=child, deleted__isnull=True) |
|
183 |
if direct is not None: |
|
184 |
qs = qs.filter(direct=direct) |
|
185 |
qs.update(deleted=datetime.datetime.now()) |
|
186 | ||
171 | 187 |
def update_transitive_closure(self): |
172 | 188 |
"""Recompute the transitive closure of the inheritance relation |
173 | 189 |
from scratch. Add missing indirect relations and delete |
174 |
- |