Coverage for src/paperap/models/saved_view/queryset.py: 65%
31 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-20 13:17 -0400
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-20 13:17 -0400
1"""
2----------------------------------------------------------------------------
4 METADATA:
6 File: queryset.py
7 Project: paperap
8 Created: 2025-03-04
9 Version: 0.0.5
10 Author: Jess Mann
11 Email: jess@jmann.me
12 Copyright (c) 2025 Jess Mann
14----------------------------------------------------------------------------
16 LAST MODIFIED:
18 2025-03-04 By Jess Mann
20"""
22from __future__ import annotations
24import datetime
25import logging
26from enum import Enum
27from typing import TYPE_CHECKING, Any, Self
29from paperap.models.abstract.queryset import BaseQuerySet, StandardQuerySet
30from paperap.models.mixins.queryset import HasOwner
32if TYPE_CHECKING:
33 from paperap.models.saved_view.model import SavedView
35logger = logging.getLogger(__name__)
38class SavedViewQuerySet(StandardQuerySet["SavedView"], HasOwner):
39 """
40 QuerySet for Paperless-ngx saved views with specialized filtering methods.
41 """
43 def name(self, value: str, *, exact: bool = True, case_insensitive: bool = True) -> Self:
44 """
45 Filter saved views by name.
47 Args:
48 name: The saved view name to filter by
49 exact: If True, match the exact name, otherwise use contains
51 Returns:
52 Filtered SavedViewQuerySet
54 """
55 return self.filter_field_by_str("name", value, exact=exact, case_insensitive=case_insensitive)
57 def show_in_sidebar(self, show: bool = True) -> Self:
58 """
59 Filter saved views by sidebar visibility.
61 Args:
62 show: If True, get views shown in sidebar, otherwise those hidden
64 Returns:
65 Filtered SavedViewQuerySet
67 """
68 return self.filter(show_in_sidebar=show)
70 def show_on_dashboard(self, show: bool = True) -> Self:
71 """
72 Filter saved views by dashboard visibility.
74 Args:
75 show: If True, get views shown on dashboard, otherwise those hidden
77 Returns:
78 Filtered SavedViewQuerySet
80 """
81 return self.filter(show_on_dashboard=show)
83 def sort_field(self, field: str, *, exact: bool = True, case_insensitive: bool = True) -> Self:
84 """
85 Filter saved views by sort field.
87 Args:
88 field: The field to sort by
89 exact: If True, match the exact field, otherwise use contains
91 Returns:
92 Filtered SavedViewQuerySet
94 """
95 return self.filter_field_by_str("sort_field", field, exact=exact, case_insensitive=case_insensitive)
97 def sort_reverse(self, reverse: bool = True) -> Self:
98 """
99 Filter saved views by sort direction.
101 Args:
102 reverse: If True, get views sorted in reverse order
104 Returns:
105 Filtered SavedViewQuerySet
107 """
108 return self.filter(sort_reverse=reverse)
110 def page_size(self, size: int) -> Self:
111 """
112 Filter saved views by page size.
114 Args:
115 size: The number of items per page
117 Returns:
118 Filtered SavedViewQuerySet
120 """
121 return self.filter(page_size=size)
123 def page_size_under(self, size: int) -> Self:
124 """
125 Filter saved views by page size under a limit.
127 Args:
128 size: The maximum number of items per page
130 Returns:
131 Filtered SavedViewQuerySet
133 """
134 return self.filter(page_size__lt=size)
136 def page_size_over(self, size: int) -> Self:
137 """
138 Filter saved views by page size over a limit.
140 Args:
141 size: The minimum number of items per page
143 Returns:
144 Filtered SavedViewQuerySet
146 """
147 return self.filter(page_size__gt=size)
149 def page_size_between(self, min_size: int, max_size: int) -> Self:
150 """
151 Filter saved views by page size within a range.
153 Args:
154 min_size: The minimum number of items per page
155 max_size: The maximum number of items per page
157 Returns:
158 Filtered SavedViewQuerySet
160 """
161 return self.filter(page_size__gte=min_size, page_size__lte=max_size)
163 def display_mode(self, mode: str) -> Self:
164 """
165 Filter saved views by display mode.
167 Args:
168 mode: The display mode to filter by
170 Returns:
171 Filtered SavedViewQuerySet
173 """
174 return self.filter(display_mode=mode)
176 def user_can_change(self, can_change: bool = True) -> Self:
177 """
178 Filter saved views by user change permissions.
180 Args:
181 can_change: If True, get views that can be changed by the user
183 Returns:
184 Filtered SavedViewQuerySet
186 """
187 return self.filter(user_can_change=can_change)