Coverage for src/paperap/models/share_links/queryset.py: 60%
25 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-18 12:26 -0400
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-18 12:26 -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 typing import TYPE_CHECKING, Any, Self
28from paperap.models.abstract.queryset import BaseQuerySet, StandardQuerySet
30if TYPE_CHECKING:
31 from paperap.models.share_links.model import ShareLinks
33logger = logging.getLogger(__name__)
36class ShareLinksQuerySet(StandardQuerySet["ShareLinks"]):
37 """
38 A lazy-loaded, chainable query interface for Paperless NGX resources.
40 BaseQuerySet provides pagination, filtering, and caching functionality similar to Django's BaseQuerySet.
41 It's designed to be lazy - only fetching data when it's actually needed.
42 """
44 def expiration_before(self, value: datetime.datetime | str) -> Self:
45 """
46 Filter ShareLinks where expiration is before value
48 Args:
49 value (datetime.datetime | str): The value to compare against
51 Returns:
52 ShareLinksQuerySet: The filtered queryset
54 """
55 return self.filter(expiration__lt=value)
57 def expiration_after(self, value: datetime.datetime | str) -> Self:
58 """
59 Filter ShareLinks where expiration is after value
61 Args:
62 value (datetime.datetime | str): The value to compare against
64 Returns:
65 ShareLinksQuerySet: The filtered queryset
67 """
68 return self.filter(expiration__gt=value)
70 def slug(self, value: str, *, exact: bool = True, case_insensitive: bool = True) -> Self:
71 """
72 Filter ShareLinks where slug is value
74 Args:
75 value (str): The value to compare against
76 exact (bool): Whether the comparison should be exact
77 case_sensitive (bool): Whether the comparison should be case insensitive
79 Returns:
80 ShareLinksQuerySet: The filtered queryset
82 """
83 return self.filter_field_by_str("slug", value, exact=exact, case_insensitive=case_insensitive)
85 def document(self, value: int | list[int]) -> Self:
86 """
87 Filter ShareLinks where document is value
89 Args:
90 value (int | list[int]): The value to compare against
92 Returns:
93 ShareLinksQuerySet: The filtered queryset
95 """
96 if isinstance(value, int):
97 return self.filter(document=value)
98 return self.filter(document__in=value)
100 def file_version(self, value: str) -> Self:
101 """
102 Filter ShareLinks where file_version is value
104 Args:
105 value (str): The value to compare against
107 Returns:
108 ShareLinksQuerySet: The filtered queryset
110 """
111 return self.filter(file_version=value)
113 def created_before(self, date: datetime.datetime) -> Self:
114 """
115 Filter models created before a given date.
117 Args:
118 date: The date to filter by
120 Returns:
121 Filtered QuerySet
123 """
124 return self.filter(created__lt=date)
126 def created_after(self, date: datetime.datetime) -> Self:
127 """
128 Filter models created after a given date.
130 Args:
131 date: The date to filter by
133 Returns:
134 Filtered QuerySet
136 """
137 return self.filter(created__gt=date)
139 def created_between(self, start: datetime.datetime, end: datetime.datetime) -> Self:
140 """
141 Filter models created between two dates.
143 Args:
144 start: The start date to filter by
145 end: The end date to filter by
147 Returns:
148 Filtered QuerySet
150 """
151 return self.filter(created__range=(start, end))