Coverage for src/paperap/models/share_links/model.py: 87%
23 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-22 16:02 -0400
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-22 16:02 -0400
1"""
2----------------------------------------------------------------------------
4 METADATA:
6 File: share_links.py
7 Project: paperap
8 Created: 2025-03-04
9 Version: 0.0.8
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
24from datetime import datetime
25from typing import TYPE_CHECKING, Any
27from pydantic import Field, field_serializer
29from paperap.const import ShareLinkFileVersionType
30from paperap.models.abstract.model import StandardModel
31from paperap.models.share_links.queryset import ShareLinksQuerySet
33if TYPE_CHECKING:
34 from paperap.models.correspondent import Correspondent
35 from paperap.models.document import Document
36 from paperap.models.document_type import DocumentType
37 from paperap.models.storage_path import StoragePath
38 from paperap.models.tag import Tag
41class ShareLinks(StandardModel):
42 expiration: datetime | None = None
43 slug: str | None = None
44 document: int | None = None
45 created: datetime | None = Field(description="Creation timestamp", default=None, alias="created_on")
46 file_version: ShareLinkFileVersionType | None = None
47 owner: int | None = None
49 class Meta(StandardModel.Meta):
50 queryset = ShareLinksQuerySet
52 @field_serializer("expiration", "created")
53 def serialize_datetime(self, value: datetime | None) -> str | None:
54 """
55 Serialize a datetime object to an ISO 8601 formatted string
57 Args:
58 value (datetime): The datetime object to serialize
60 Returns:
61 str: The serialized datetime
63 """
64 return value.isoformat() if value else None
66 def get_document(self) -> "Document":
67 """
68 Get the document associated with this share link
70 Returns:
71 Document: The document object
73 """
74 if not self.document:
75 raise ValueError("Document ID not set")
76 return self._client.documents().get(pk=self.document)