"""
Saved View Model Module.
This module defines the SavedView model class, which represents saved views in Paperless-NgX.
Saved views store filter configurations, display settings, and other view preferences
that users can save and reuse.
"""
from __future__ import annotations
from typing import Any
from pydantic import Field
from paperap.const import SavedViewDisplayFieldType, SavedViewDisplayModeType, SavedViewFilterRuleType
from paperap.models.abstract.model import StandardModel
from paperap.models.saved_view.queryset import SavedViewQuerySet
# Default display fields for saved views if none are specified
DEFAULT_DISPLAY_FIELDS = [
SavedViewDisplayFieldType.TITLE,
SavedViewDisplayFieldType.CREATED,
SavedViewDisplayFieldType.TAGS,
SavedViewDisplayFieldType.CORRESPONDENT,
SavedViewDisplayFieldType.DOCUMENT_TYPE,
SavedViewDisplayFieldType.STORAGE_PATH,
SavedViewDisplayFieldType.NOTES,
SavedViewDisplayFieldType.OWNER,
SavedViewDisplayFieldType.SHARED,
SavedViewDisplayFieldType.PAGE_COUNT,
]
[docs]
class SavedView(StandardModel):
"""
Represents a saved view configuration in Paperless-NgX.
A saved view stores filter rules, sorting preferences, display settings, and other
view configuration that can be saved and reused. Saved views can appear on the
dashboard and/or sidebar for quick access.
Attributes:
name: The display name of the saved view.
show_on_dashboard: Whether this view should be shown on the dashboard.
show_in_sidebar: Whether this view should be shown in the sidebar.
sort_field: The field to sort results by (e.g., "created", "title").
sort_reverse: Whether to sort in reverse/descending order.
filter_rules: List of filter rules to apply to documents.
page_size: Number of documents to show per page.
display_mode: How to display documents (e.g., list, grid).
display_fields: Which fields to display in the view.
owner: ID of the user who owns this saved view.
user_can_change: Whether the current user can modify this saved view.
Examples:
>>> # Create a new saved view for tax documents
>>> tax_view = client.saved_views.create(
... name="Tax Documents",
... show_on_dashboard=True,
... show_in_sidebar=True,
... filter_rules=[
... {"rule_type": "document_type", "value": "5"}
... ]
... )
>>>
>>> # Update an existing saved view
>>> view = client.saved_views.get(3)
>>> view.filter_rules.append({"rule_type": "correspondent", "value": "7"})
>>> view.save()
"""
name: str
show_on_dashboard: bool | None = None
show_in_sidebar: bool | None = None
sort_field: str | None = None
sort_reverse: bool | None = None
filter_rules: list[SavedViewFilterRuleType] = Field(default_factory=list)
page_size: int | None = None
display_mode: SavedViewDisplayModeType | None = None
display_fields: list[SavedViewDisplayFieldType] = Field(default_factory=list)
owner: int | None = None
user_can_change: bool | None = None