Skip to content

Commit ec5dbb4

Browse files
committed
added classes for station Percentiles and Statistics
1 parent 1383857 commit ec5dbb4

2 files changed

Lines changed: 91 additions & 0 deletions

File tree

src/synoptic/params.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,45 @@
9999
}
100100
)
101101

102+
params_percentiles = (
103+
station_selectors
104+
| {"token"}
105+
| {
106+
"vars",
107+
"data",
108+
"complete",
109+
"daily_min",
110+
"daily_max",
111+
"obtimezone", # IGNORED
112+
"hourly",
113+
"start",
114+
"end",
115+
"percentiles",
116+
"complete",
117+
"fields",
118+
"showemptystations",
119+
"showemptyvars",
120+
"units",
121+
"sitinghistory",
122+
}
123+
)
124+
params_statistics = (
125+
station_selectors
126+
| {"token", "start", "end", "recent"}
127+
| {
128+
"vars",
129+
"period",
130+
"statistic",
131+
"complete",
132+
"fields",
133+
"obtimezone", # IGNORED
134+
"showemptystations",
135+
"showemptyvars",
136+
"units",
137+
"sitinghistory",
138+
}
139+
)
140+
102141
params_qcsegments = (
103142
station_selectors
104143
| {"token", "start", "end", "recent"}
@@ -148,6 +187,8 @@ def validate_params(service, **params):
148187
"latest": params_latest,
149188
"nearesttime": params_nearesttime,
150189
"precipitation": params_precipitation,
190+
"percentiles": params_percentiles,
191+
"statistics": params_statistics,
151192
"qcsegments": params_qcsegments,
152193
"latency": params_latency,
153194
"metadata": params_metadata,

src/synoptic/services.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
"latest",
3535
"nearesttime",
3636
"precipitation",
37+
"statistics",
38+
"percentiles",
3739
"qcsegments",
3840
"latency",
3941
"metadata",
@@ -52,6 +54,8 @@
5254
"latest",
5355
"nearesttime",
5456
"precipitation",
57+
"statistics",
58+
"percentiles",
5559
"qcsegments",
5660
"latency",
5761
"metadata",
@@ -488,6 +492,52 @@ def df(self) -> pl.DataFrame:
488492
return df
489493

490494

495+
class Percentiles(SynopticAPI):
496+
"""
497+
Request station percentiles.
498+
499+
Refer to the official documentation: https://docs.synopticdata.com/services/percentiles
500+
501+
502+
Parameters
503+
----------
504+
# TODO: I can't develop this capability because
505+
# TODO: "Account associated with this token does not have access to the statistics service."
506+
"""
507+
508+
def __init__(self, **params):
509+
super().__init__("percentiles", **params)
510+
511+
@lru_cache
512+
def df(self) -> pl.DataFrame:
513+
"""Stations percentile DataFrame."""
514+
timer = datetime.now()
515+
self.timers["parse_to_polars_dataframe"] = datetime.now() - timer
516+
517+
518+
class Statistics(SynopticAPI):
519+
"""
520+
Request station statistics.
521+
522+
Refer to the official documentation: https://docs.synopticdata.com/services/statistics
523+
524+
525+
Parameters
526+
----------
527+
# TODO: I can't develop this capability because
528+
# TODO: "Account associated with this token does not have access to the statistics service."
529+
"""
530+
531+
def __init__(self, **params):
532+
super().__init__("statistics", **params)
533+
534+
@lru_cache
535+
def df(self) -> pl.DataFrame:
536+
"""Stations statistics DataFrame."""
537+
timer = datetime.now()
538+
self.timers["parse_to_polars_dataframe"] = datetime.now() - timer
539+
540+
491541
class QCSegments(SynopticAPI):
492542
"""Get quality control segments. NOT IMPLEMENTED.
493543

0 commit comments

Comments
 (0)