Coverage for src/paperap/resources/documents.py: 58%
26 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: documents.py
7 Project: paperap
8 Created: 2025-03-04
9 Version: 0.0.7
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 Any, Iterator, Optional, override
27from typing_extensions import TypeVar
29from paperap.exceptions import APIError, BadResponseError, ResourceNotFoundError
30from paperap.models.document import Document, DocumentNote, DocumentQuerySet
31from paperap.resources.base import BaseResource, StandardResource
34class DocumentResource(StandardResource[Document, DocumentQuerySet]):
35 """Resource for managing documents."""
37 model_class = Document
38 name = "documents"
40 def download(self, document_id: int, *, original: bool = False) -> bytes | None:
41 url = f"documents/{document_id}/download"
42 params = {"original": str(original).lower()}
43 response = self.client.request("GET", url, params=params)
44 if not response:
45 raise ResourceNotFoundError(f"Document {document_id} download failed", self.name)
46 return response.get("content")
48 def upload(self, file_content: bytes, filename: str, **metadata) -> Document:
49 """Upload a document with optional metadata."""
50 data = {"document": (filename, file_content), **metadata}
51 response = self.client.request("POST", "documents/post_document/", data=data)
52 if not response:
53 raise ResourceNotFoundError("Document upload failed")
54 return self.parse_to_model(response)
57class DocumentNoteResource(StandardResource[DocumentNote]):
58 """Resource for managing document notes."""
60 model_class = DocumentNote
61 name = "document_notes"