Coverage for object_streams/visibility.py: 92%

13 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-02 17:07 +0000

1"""Visibility policies define the permission-scoped queryset for a user.""" 

2 

3from __future__ import annotations 

4 

5from typing import Any 

6from typing import Protocol 

7 

8from django.db import models 

9 

10 

11__all__ = ( 

12 "AllowAllVisibilityPolicy", 

13 "DenyAllVisibilityPolicy", 

14 "VisibilityPolicy", 

15) 

16 

17 

18class VisibilityPolicy(Protocol): 

19 def get_queryset(self, user: Any, model: type[models.Model], action: str = "read") -> models.QuerySet: 

20 """Return the queryset this user can see for the model and action.""" 

21 

22 

23class AllowAllVisibilityPolicy: 

24 """Default visibility policy that exposes the model's default queryset.""" 

25 

26 def get_queryset(self, user: Any, model: type[models.Model], action: str = "read") -> models.QuerySet: 

27 return model._default_manager.all() 

28 

29 

30class DenyAllVisibilityPolicy: 

31 """Visibility policy that exposes no rows.""" 

32 

33 def get_queryset(self, user: Any, model: type[models.Model], action: str = "read") -> models.QuerySet: 

34 return model._default_manager.none()