-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpdf.py
More file actions
58 lines (49 loc) · 2.1 KB
/
pdf.py
File metadata and controls
58 lines (49 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
"""PDF category client for PDF report generation."""
from __future__ import annotations
from astroapi.categories.base import BaseCategoryClient
from astroapi.types.requests import (
PdfDailyHoroscopeRequest,
PdfNatalReportRequest,
PdfWeeklyHoroscopeRequest,
)
from astroapi.types.responses import GenericResponse
from astroapi.utils.validators import validate_subject
class PdfClient(BaseCategoryClient):
"""Client for PDF generation endpoints."""
API_PREFIX = "/api/v3/pdf"
def get_natal_report(self, request: PdfNatalReportRequest) -> GenericResponse:
"""Generate natal report PDF."""
validate_subject(request.subject)
url = self._build_url("natal-report")
data = self._http.post(url, json=request.model_dump(exclude_none=True))
return GenericResponse(**data)
def get_daily_horoscope(self, request: PdfDailyHoroscopeRequest) -> GenericResponse:
"""Generate daily horoscope PDF."""
if request.subject:
validate_subject(request.subject)
url = self._build_url("horoscope", "daily")
data = self._http.post(url, json=request.model_dump(exclude_none=True))
return GenericResponse(**data)
def get_weekly_horoscope(self, request: PdfWeeklyHoroscopeRequest) -> GenericResponse:
"""Generate weekly horoscope PDF."""
if request.subject:
validate_subject(request.subject)
url = self._build_url("horoscope", "weekly")
data = self._http.post(url, json=request.model_dump(exclude_none=True))
return GenericResponse(**data)
def get_horoscope_data(
self,
sign: str,
target_date: str,
language: str | None = None,
tradition: str | None = None,
) -> GenericResponse:
"""Get daily horoscope data."""
url = self._build_url("horoscope", "data", sign, target_date)
params: dict[str, str] = {}
if language:
params["language"] = language
if tradition:
params["tradition"] = tradition
data = self._http.get(url, params=params or None)
return GenericResponse(**data)