Projet

Général

Profil

0002-rbac-add-soft-created-deleted-manager-methods-57500.patch

Paul Marillonnet, 15 octobre 2021 10:42

Télécharger (1,78 ko)

Voir les différences:

Subject: [PATCH 2/8] rbac: add soft-created & -deleted manager methods
 (#57500)

 src/django_rbac/managers.py | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
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
-