Skip to content

Commit e23b40a

Browse files
committed
data client to pydantic
1 parent f0d8ec6 commit e23b40a

4 files changed

Lines changed: 27 additions & 48 deletions

File tree

examples/pgc_info.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
client = data.HyperLedaDataClient()
44

55
resp = client.query_simple(data.QuerySimpleRequestSchema(pgcs=[123], page_size=25))
6-
print(resp)
6+
print(resp.model_dump_json())

hyperleda/data/client.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import dataclasses
22
from typing import Any
33

4-
import dacite
5-
64
from hyperleda import common, config
75
from hyperleda.data import model
86

@@ -25,11 +23,11 @@ def query_simple(self, req: model.QuerySimpleRequestSchema) -> model.QuerySimple
2523
response = self._request(
2624
"GET",
2725
"/api/v1/query/simple",
28-
query=dataclasses.asdict(req),
26+
query=req.model_dump(),
2927
)
3028
data = response.json()
3129

32-
return dacite.from_dict(model.QuerySimpleResponseSchema, data["data"])
30+
return model.QuerySimpleResponseSchema.model_validate(data["data"])
3331

3432
def query(self, req: model.QueryRequestSchema) -> model.QueryResponseSchema:
3533
"""

hyperleda/data/model.py

Lines changed: 23 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44

55
from __future__ import annotations
66

7-
from dataclasses import dataclass
87
from enum import Enum
98

9+
from pydantic import BaseModel
1010

11-
@dataclass
12-
class QuerySimpleRequestSchema:
11+
12+
class QuerySimpleRequestSchema(BaseModel):
1313
pgcs: list[int] | None = None
1414
ra: float | None = None
1515
dec: float | None = None
@@ -21,123 +21,104 @@ class QuerySimpleRequestSchema:
2121
page: int | None = 0
2222

2323

24-
@dataclass
25-
class Designation:
24+
class Designation(BaseModel):
2625
name: str
2726

2827

29-
@dataclass
30-
class EquatorialCoordinates:
28+
class EquatorialCoordinates(BaseModel):
3129
ra: float
3230
dec: float
3331
e_ra: float
3432
e_dec: float
3533

3634

37-
@dataclass
38-
class GalacticCoordinates:
35+
class GalacticCoordinates(BaseModel):
3936
lon: float
4037
lat: float
4138
e_lon: float
4239
e_lat: float
4340

4441

45-
@dataclass
46-
class Coordinates:
42+
class Coordinates(BaseModel):
4743
equatorial: EquatorialCoordinates
4844
galactic: GalacticCoordinates
4945

5046

51-
@dataclass
52-
class HeliocentricVelocity:
47+
class HeliocentricVelocity(BaseModel):
5348
v: float
5449
e_v: float
5550

5651

57-
@dataclass
58-
class Redshift:
52+
class Redshift(BaseModel):
5953
z: float
6054
e_z: float
6155

6256

63-
@dataclass
64-
class Velocity:
57+
class Velocity(BaseModel):
6558
heliocentric: HeliocentricVelocity
6659
redshift: Redshift
6760

6861

69-
@dataclass
70-
class Catalogs:
62+
class Catalogs(BaseModel):
7163
designation: Designation | None = None
7264
coordinates: Coordinates | None = None
7365
velocity: Velocity | None = None
7466

7567

76-
@dataclass
77-
class PGCObject:
68+
class PGCObject(BaseModel):
7869
pgc: int
7970
catalogs: Catalogs
8071

8172

82-
@dataclass
83-
class EquatorialUnits:
73+
class EquatorialUnits(BaseModel):
8474
ra: str
8575
dec: str
8676
e_ra: str
8777
e_dec: str
8878

8979

90-
@dataclass
91-
class GalacticUnits:
80+
class GalacticUnits(BaseModel):
9281
lon: str
9382
lat: str
9483
e_lon: str
9584
e_lat: str
9685

9786

98-
@dataclass
99-
class CoordinateUnits:
87+
class CoordinateUnits(BaseModel):
10088
equatorial: EquatorialUnits
10189
galactic: GalacticUnits
10290

10391

104-
@dataclass
105-
class HeliocentricVelocityUnits:
92+
class HeliocentricVelocityUnits(BaseModel):
10693
v: str
10794
e_v: str
10895

10996

110-
@dataclass
111-
class VelocityUnits:
97+
class VelocityUnits(BaseModel):
11298
heliocentric: HeliocentricVelocityUnits
11399

114100

115-
@dataclass
116-
class Units:
101+
class Units(BaseModel):
117102
coordinates: CoordinateUnits
118103
velocity: VelocityUnits
119104

120105

121-
@dataclass
122-
class Schema:
106+
class Schema(BaseModel):
123107
units: Units
124108

125109

126-
@dataclass
127-
class QuerySimpleResponseSchema:
110+
class QuerySimpleResponseSchema(BaseModel):
128111
objects: list[PGCObject] | None = None
129112
schema: Schema | None = None
130113

131114

132-
@dataclass
133-
class QueryRequestSchema:
115+
class QueryRequestSchema(BaseModel):
134116
q: str | None = None
135117
page_size: int | None = 25
136118
page: int | None = 0
137119

138120

139-
@dataclass
140-
class QueryResponseSchema:
121+
class QueryResponseSchema(BaseModel):
141122
objects: list[PGCObject] | None = None
142123

143124

@@ -151,8 +132,7 @@ class PageSize2(Enum):
151132
integer_100000 = 100000
152133

153134

154-
@dataclass
155-
class FITSRequestSchema:
135+
class FITSRequestSchema(BaseModel):
156136
pgcs: list[int] | None = None
157137
ra: float | None = None
158138
dec: float | None = None

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ dependencies = [
2222
"datamodel-code-generator>=0.26.5",
2323
"pandas>=2.2.3",
2424
"parameterized>=0.9.0",
25+
"pydantic>=2.11.4",
2526
"requests>=2.32.3",
2627
"ruff>=0.9.4",
2728
"setuptools>=75.8.0",

0 commit comments

Comments
 (0)