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

1""" 

2---------------------------------------------------------------------------- 

3 

4 METADATA: 

5 

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 

13 

14---------------------------------------------------------------------------- 

15 

16 LAST MODIFIED: 

17 

18 2025-03-04 By Jess Mann 

19 

20""" 

21 

22from __future__ import annotations 

23 

24from datetime import datetime 

25from typing import TYPE_CHECKING, Any 

26 

27from pydantic import Field, field_serializer 

28 

29from paperap.const import ShareLinkFileVersionType 

30from paperap.models.abstract.model import StandardModel 

31from paperap.models.share_links.queryset import ShareLinksQuerySet 

32 

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 

39 

40 

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 

48 

49 class Meta(StandardModel.Meta): 

50 queryset = ShareLinksQuerySet 

51 

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 

56 

57 Args: 

58 value (datetime): The datetime object to serialize 

59 

60 Returns: 

61 str: The serialized datetime 

62 

63 """ 

64 return value.isoformat() if value else None 

65 

66 def get_document(self) -> "Document": 

67 """ 

68 Get the document associated with this share link 

69 

70 Returns: 

71 Document: The document object 

72 

73 """ 

74 if not self.document: 

75 raise ValueError("Document ID not set") 

76 return self._client.documents().get(pk=self.document)