freeastroapi 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,190 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any
4
+
5
+ from pydantic import BaseModel
6
+
7
+ from ._generated import (
8
+ AsyncGeoResourceBase,
9
+ AsyncMoonResourceBase,
10
+ AsyncSkyEventsResourceBase,
11
+ AsyncWesternResourceBase,
12
+ GeoResourceBase,
13
+ MoonResourceBase,
14
+ SkyEventsResourceBase,
15
+ WesternResourceBase,
16
+ )
17
+ from .models import (
18
+ CitySearchResponse,
19
+ GeoSearchParams,
20
+ MoonMonthParams,
21
+ MoonMonthResponse,
22
+ MoonPhaseParams,
23
+ MoonPhaseResponse,
24
+ SkyEventsParams,
25
+ SkyEventsResponse,
26
+ WesternSignRequest,
27
+ WesternSignResponse,
28
+ )
29
+
30
+ if TYPE_CHECKING:
31
+ from .client import AsyncFreeAstro, FreeAstro, RequestOptions
32
+
33
+
34
+ def _params(model: BaseModel) -> dict[str, Any]:
35
+ return model.model_dump(mode="json", exclude_none=True)
36
+
37
+
38
+ class GeoResource(GeoResourceBase):
39
+
40
+ def search(
41
+ self,
42
+ q: str,
43
+ *,
44
+ limit: int = 10,
45
+ country: str | None = None,
46
+ options: RequestOptions | None = None,
47
+ ) -> CitySearchResponse:
48
+ params = GeoSearchParams(q=q, limit=limit, country=country)
49
+ return CitySearchResponse.model_validate(
50
+ self._client.request("GET", "/api/v2/geo/search", params=_params(params), options=options)
51
+ )
52
+
53
+
54
+ class MoonResource(MoonResourceBase):
55
+
56
+ def phase(
57
+ self, params: MoonPhaseParams | None = None, *, options: RequestOptions | None = None
58
+ ) -> MoonPhaseResponse:
59
+ query = params or MoonPhaseParams()
60
+ return MoonPhaseResponse.model_validate(
61
+ self._client.request("GET", "/api/v1/moon/phase", params=_params(query), options=options)
62
+ )
63
+
64
+ def month(self, params: MoonMonthParams, *, options: RequestOptions | None = None) -> MoonMonthResponse:
65
+ return MoonMonthResponse.model_validate(
66
+ self._client.request("GET", "/api/v1/moon/month", params=_params(params), options=options)
67
+ )
68
+
69
+
70
+ class SkyEventsResource(SkyEventsResourceBase):
71
+
72
+ def list(self, params: SkyEventsParams, *, options: RequestOptions | None = None) -> SkyEventsResponse:
73
+ return SkyEventsResponse.model_validate(
74
+ self._client.request("GET", "/api/v1/sky-events", params=_params(params), options=options)
75
+ )
76
+
77
+
78
+ class WesternSignsResource:
79
+ def __init__(self, client: FreeAstro) -> None:
80
+ self._client = client
81
+
82
+ def sun(self, request: WesternSignRequest, *, options: RequestOptions | None = None) -> WesternSignResponse:
83
+ return self._calculate("sun", request, options)
84
+
85
+ def moon(self, request: WesternSignRequest, *, options: RequestOptions | None = None) -> WesternSignResponse:
86
+ return self._calculate("moon", request, options)
87
+
88
+ def rising(self, request: WesternSignRequest, *, options: RequestOptions | None = None) -> WesternSignResponse:
89
+ return self._calculate("rising", request, options)
90
+
91
+ def midheaven(self, request: WesternSignRequest, *, options: RequestOptions | None = None) -> WesternSignResponse:
92
+ return self._calculate("midheaven", request, options)
93
+
94
+ def _calculate(
95
+ self,
96
+ point: str,
97
+ request: WesternSignRequest,
98
+ options: RequestOptions | None,
99
+ ) -> WesternSignResponse:
100
+ return WesternSignResponse.model_validate(
101
+ self._client.request(
102
+ "POST",
103
+ f"/api/v1/western/signs/{point}",
104
+ json=_params(request),
105
+ options=options,
106
+ )
107
+ )
108
+
109
+
110
+ class WesternResource(WesternResourceBase):
111
+ def __init__(self, client: FreeAstro) -> None:
112
+ super().__init__(client)
113
+ self.signs = WesternSignsResource(client)
114
+
115
+
116
+ class AsyncGeoResource(AsyncGeoResourceBase):
117
+
118
+ async def search(
119
+ self,
120
+ q: str,
121
+ *,
122
+ limit: int = 10,
123
+ country: str | None = None,
124
+ options: RequestOptions | None = None,
125
+ ) -> CitySearchResponse:
126
+ params = GeoSearchParams(q=q, limit=limit, country=country)
127
+ data = await self._client.request("GET", "/api/v2/geo/search", params=_params(params), options=options)
128
+ return CitySearchResponse.model_validate(data)
129
+
130
+
131
+ class AsyncMoonResource(AsyncMoonResourceBase):
132
+
133
+ async def phase(
134
+ self, params: MoonPhaseParams | None = None, *, options: RequestOptions | None = None
135
+ ) -> MoonPhaseResponse:
136
+ query = params or MoonPhaseParams()
137
+ data = await self._client.request("GET", "/api/v1/moon/phase", params=_params(query), options=options)
138
+ return MoonPhaseResponse.model_validate(data)
139
+
140
+ async def month(self, params: MoonMonthParams, *, options: RequestOptions | None = None) -> MoonMonthResponse:
141
+ data = await self._client.request("GET", "/api/v1/moon/month", params=_params(params), options=options)
142
+ return MoonMonthResponse.model_validate(data)
143
+
144
+
145
+ class AsyncSkyEventsResource(AsyncSkyEventsResourceBase):
146
+
147
+ async def list(self, params: SkyEventsParams, *, options: RequestOptions | None = None) -> SkyEventsResponse:
148
+ data = await self._client.request("GET", "/api/v1/sky-events", params=_params(params), options=options)
149
+ return SkyEventsResponse.model_validate(data)
150
+
151
+
152
+ class AsyncWesternSignsResource:
153
+ def __init__(self, client: AsyncFreeAstro) -> None:
154
+ self._client = client
155
+
156
+ async def sun(self, request: WesternSignRequest, *, options: RequestOptions | None = None) -> WesternSignResponse:
157
+ return await self._calculate("sun", request, options)
158
+
159
+ async def moon(self, request: WesternSignRequest, *, options: RequestOptions | None = None) -> WesternSignResponse:
160
+ return await self._calculate("moon", request, options)
161
+
162
+ async def rising(
163
+ self, request: WesternSignRequest, *, options: RequestOptions | None = None
164
+ ) -> WesternSignResponse:
165
+ return await self._calculate("rising", request, options)
166
+
167
+ async def midheaven(
168
+ self, request: WesternSignRequest, *, options: RequestOptions | None = None
169
+ ) -> WesternSignResponse:
170
+ return await self._calculate("midheaven", request, options)
171
+
172
+ async def _calculate(
173
+ self,
174
+ point: str,
175
+ request: WesternSignRequest,
176
+ options: RequestOptions | None,
177
+ ) -> WesternSignResponse:
178
+ data = await self._client.request(
179
+ "POST",
180
+ f"/api/v1/western/signs/{point}",
181
+ json=_params(request),
182
+ options=options,
183
+ )
184
+ return WesternSignResponse.model_validate(data)
185
+
186
+
187
+ class AsyncWesternResource(AsyncWesternResourceBase):
188
+ def __init__(self, client: AsyncFreeAstro) -> None:
189
+ super().__init__(client)
190
+ self.signs = AsyncWesternSignsResource(client)