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.
- freeastroapi/__init__.py +38 -0
- freeastroapi/_generated.py +4455 -0
- freeastroapi/client.py +309 -0
- freeastroapi/errors.py +123 -0
- freeastroapi/models.py +221 -0
- freeastroapi/py.typed +1 -0
- freeastroapi/resources.py +190 -0
- freeastroapi/schemas.py +7664 -0
- freeastroapi-0.2.0.dist-info/METADATA +158 -0
- freeastroapi-0.2.0.dist-info/RECORD +12 -0
- freeastroapi-0.2.0.dist-info/WHEEL +4 -0
- freeastroapi-0.2.0.dist-info/licenses/LICENSE +201 -0
|
@@ -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)
|