hydroserverpy 1.4.1__tar.gz → 1.5.0__tar.gz

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.

Potentially problematic release.


This version of hydroserverpy might be problematic. Click here for more details.

Files changed (75) hide show
  1. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/PKG-INFO +3 -3
  2. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/setup.cfg +3 -3
  3. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/etl_configuration.py +10 -10
  4. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/schedule.py +1 -1
  5. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/status.py +1 -1
  6. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/sta/datastream.py +4 -0
  7. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/sta/observation.py +3 -1
  8. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/sta/datastream.py +4 -1
  9. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy.egg-info/PKG-INFO +3 -3
  10. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy.egg-info/requires.txt +2 -2
  11. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/LICENSE +0 -0
  12. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/README.md +0 -0
  13. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/pyproject.toml +0 -0
  14. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/setup.py +0 -0
  15. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/__init__.py +0 -0
  16. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/__init__.py +0 -0
  17. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/client.py +0 -0
  18. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/__init__.py +0 -0
  19. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/base.py +0 -0
  20. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/__init__.py +0 -0
  21. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/data_archive.py +0 -0
  22. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/data_source.py +0 -0
  23. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/extractors/__init__.py +0 -0
  24. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/extractors/base.py +0 -0
  25. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/extractors/ftp_extractor.py +0 -0
  26. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/extractors/http_extractor.py +0 -0
  27. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/extractors/local_file_extractor.py +0 -0
  28. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/factories.py +0 -0
  29. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/loaders/__init__.py +0 -0
  30. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/loaders/base.py +0 -0
  31. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/loaders/hydroserver_loader.py +0 -0
  32. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/orchestration_configuration.py +0 -0
  33. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/orchestration_system.py +0 -0
  34. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/timestamp_parser.py +0 -0
  35. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/transformers/__init__.py +0 -0
  36. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/transformers/base.py +0 -0
  37. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/transformers/csv_transformer.py +0 -0
  38. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/transformers/json_transformer.py +0 -0
  39. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/etl/types.py +0 -0
  40. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/iam/__init__.py +0 -0
  41. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/iam/account.py +0 -0
  42. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/iam/apikey.py +0 -0
  43. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/iam/collaborator.py +0 -0
  44. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/iam/role.py +0 -0
  45. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/iam/workspace.py +0 -0
  46. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/sta/__init__.py +0 -0
  47. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/sta/observed_property.py +0 -0
  48. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/sta/processing_level.py +0 -0
  49. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/sta/result_qualifier.py +0 -0
  50. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/sta/sensor.py +0 -0
  51. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/sta/thing.py +0 -0
  52. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/models/sta/unit.py +0 -0
  53. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/__init__.py +0 -0
  54. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/base.py +0 -0
  55. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/etl/__init__.py +0 -0
  56. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/etl/data_archive.py +0 -0
  57. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/etl/data_source.py +0 -0
  58. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/etl/orchestration_system.py +0 -0
  59. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/iam/__init__.py +0 -0
  60. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/iam/role.py +0 -0
  61. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/iam/workspace.py +0 -0
  62. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/sta/__init__.py +0 -0
  63. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/sta/observed_property.py +0 -0
  64. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/sta/processing_level.py +0 -0
  65. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/sta/result_qualifier.py +0 -0
  66. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/sta/sensor.py +0 -0
  67. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/sta/thing.py +0 -0
  68. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/services/sta/unit.py +0 -0
  69. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/api/utils.py +0 -0
  70. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/quality/__init__.py +0 -0
  71. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy/quality/service.py +0 -0
  72. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy.egg-info/SOURCES.txt +0 -0
  73. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy.egg-info/dependency_links.txt +0 -0
  74. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy.egg-info/top_level.txt +0 -0
  75. {hydroserverpy-1.4.1 → hydroserverpy-1.5.0}/src/hydroserverpy.egg-info/zip-safe +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hydroserverpy
3
- Version: 1.4.1
3
+ Version: 1.5.0
4
4
  Summary: A Python client for managing HydroServer data
5
5
  Requires-Python: <4,>=3.9
6
6
  Description-Content-Type: text/markdown
@@ -8,8 +8,8 @@ License-File: LICENSE
8
8
  Requires-Dist: requests>=2
9
9
  Requires-Dist: pydantic>=2.6
10
10
  Requires-Dist: pydantic[email]>=2.6
11
- Requires-Dist: pandas>=2.2
12
- Requires-Dist: numpy>=2.0
11
+ Requires-Dist: pandas>=2.1
12
+ Requires-Dist: numpy>=1.22.4
13
13
  Requires-Dist: pyyaml>=5
14
14
  Requires-Dist: simplejson>=3
15
15
  Requires-Dist: crontab>=1
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = hydroserverpy
3
- version = 1.4.1
3
+ version = 1.5.0
4
4
  description = A Python client for managing HydroServer data
5
5
  long_description_content_type = text/markdown
6
6
  long_description = file: README.md
@@ -15,8 +15,8 @@ install_requires =
15
15
  requests >= 2
16
16
  pydantic >= 2.6
17
17
  pydantic[email] >= 2.6
18
- pandas >= 2.2
19
- numpy >= 2.0
18
+ pandas >= 2.1
19
+ numpy >= 1.22.4
20
20
  pyyaml >= 5
21
21
  simplejson >= 3
22
22
  crontab >= 1
@@ -74,7 +74,7 @@ class Timestamp(BaseModel):
74
74
  timezone: Optional[Union[FixedOffsetTimezone, str]] = Field(None, alias="timezone")
75
75
 
76
76
  class Config:
77
- allow_population_by_field_name = True
77
+ populate_by_name = True
78
78
 
79
79
  @field_validator("timezone")
80
80
  def check_timezone(cls, timezone_value, info):
@@ -96,7 +96,7 @@ class RunTimePlaceholder(BaseModel):
96
96
  timestamp: Timestamp
97
97
 
98
98
  class Config:
99
- allow_population_by_field_name = True
99
+ populate_by_name = True
100
100
 
101
101
 
102
102
  PlaceholderVariable = Annotated[
@@ -114,7 +114,7 @@ class BaseExtractor(BaseModel):
114
114
  )
115
115
 
116
116
  class Config:
117
- allow_population_by_field_name = True
117
+ populate_by_name = True
118
118
 
119
119
 
120
120
  class HTTPExtractor(BaseExtractor):
@@ -140,7 +140,7 @@ class JSONTransformer(BaseTransformer):
140
140
  jmespath: str = Field(..., alias="JMESPath")
141
141
 
142
142
  class Config:
143
- allow_population_by_field_name = True
143
+ populate_by_name = True
144
144
 
145
145
 
146
146
  class CSVTransformer(BaseTransformer):
@@ -151,7 +151,7 @@ class CSVTransformer(BaseTransformer):
151
151
  identifier_type: IdentifierType = Field(..., alias="identifierType")
152
152
 
153
153
  class Config:
154
- allow_population_by_field_name = True
154
+ populate_by_name = True
155
155
 
156
156
 
157
157
  TransformerConfig = Union[JSONTransformer, CSVTransformer]
@@ -173,7 +173,7 @@ class ExpressionDataTransformation(BaseModel):
173
173
  expression: str
174
174
 
175
175
  class Config:
176
- allow_population_by_field_name = True
176
+ populate_by_name = True
177
177
 
178
178
 
179
179
  class LookupTableDataTransformation(BaseModel):
@@ -181,7 +181,7 @@ class LookupTableDataTransformation(BaseModel):
181
181
  lookup_table_id: str = Field(..., alias="lookupTableId")
182
182
 
183
183
  class Config:
184
- allow_population_by_field_name = True
184
+ populate_by_name = True
185
185
 
186
186
 
187
187
  DataTransformation = Union[ExpressionDataTransformation, LookupTableDataTransformation]
@@ -194,7 +194,7 @@ class MappingPath(BaseModel):
194
194
  )
195
195
 
196
196
  class Config:
197
- allow_population_by_field_name = True
197
+ populate_by_name = True
198
198
 
199
199
 
200
200
  class SourceTargetMapping(BaseModel):
@@ -202,7 +202,7 @@ class SourceTargetMapping(BaseModel):
202
202
  paths: List[MappingPath] = Field(default_factory=list)
203
203
 
204
204
  class Config:
205
- allow_population_by_field_name = True
205
+ populate_by_name = True
206
206
 
207
207
 
208
208
  class Payload(BaseModel):
@@ -213,7 +213,7 @@ class Payload(BaseModel):
213
213
  )
214
214
 
215
215
  class Config:
216
- allow_population_by_field_name = True
216
+ populate_by_name = True
217
217
 
218
218
 
219
219
  class EtlConfiguration(BaseModel):
@@ -13,4 +13,4 @@ class Schedule(BaseModel):
13
13
  end_time: Optional[datetime] = Field(None, alias="endTime")
14
14
 
15
15
  class Config:
16
- allow_population_by_field_name = True
16
+ populate_by_name = True
@@ -11,4 +11,4 @@ class Status(BaseModel):
11
11
  next_run: Optional[datetime] = Field(None, alias="nextRun")
12
12
 
13
13
  class Config:
14
- allow_population_by_field_name = True
14
+ populate_by_name = True
@@ -194,6 +194,7 @@ class Datastream(HydroServerBaseModel):
194
194
  order_by: List[str] = ...,
195
195
  phenomenon_time_max: datetime = ...,
196
196
  phenomenon_time_min: datetime = ...,
197
+ result_qualifier_code: str = ...,
197
198
  fetch_all: bool = False,
198
199
  ) -> pd.DataFrame:
199
200
  """Retrieve the observations for this datastream."""
@@ -205,18 +206,21 @@ class Datastream(HydroServerBaseModel):
205
206
  order_by=order_by,
206
207
  phenomenon_time_max=phenomenon_time_max,
207
208
  phenomenon_time_min=phenomenon_time_min,
209
+ result_qualifier_code=result_qualifier_code,
208
210
  fetch_all=fetch_all
209
211
  )
210
212
 
211
213
  def load_observations(
212
214
  self,
213
215
  observations: pd.DataFrame,
216
+ mode: str = "insert"
214
217
  ) -> None:
215
218
  """Load a DataFrame of observations to the datastream."""
216
219
 
217
220
  return self.client.datastreams.load_observations(
218
221
  uid=self.uid,
219
222
  observations=observations,
223
+ mode=mode
220
224
  )
221
225
 
222
226
  def delete_observations(
@@ -38,7 +38,9 @@ class ObservationCollection:
38
38
  data = response.json()
39
39
  self.dataframe = pd.DataFrame({to_snake(k): v for k, v in data.items()})
40
40
  if "phenomenon_time" in self.dataframe.columns:
41
- self.dataframe["phenomenon_time"] = pd.to_datetime(self.dataframe["phenomenon_time"], utc=True)
41
+ self.dataframe["phenomenon_time"] = pd.to_datetime(
42
+ self.dataframe["phenomenon_time"], utc=True, format="ISO8601"
43
+ )
42
44
  else:
43
45
  self.dataframe = pd.DataFrame()
44
46
 
@@ -220,6 +220,7 @@ class DatastreamService(HydroServerBaseService):
220
220
  order_by: List[str] = ...,
221
221
  phenomenon_time_max: datetime = ...,
222
222
  phenomenon_time_min: datetime = ...,
223
+ result_qualifier_code: str = ...,
223
224
  fetch_all: bool = False,
224
225
  ) -> ObservationCollection:
225
226
  """Retrieve observations of a datastream."""
@@ -230,6 +231,7 @@ class DatastreamService(HydroServerBaseService):
230
231
  "order_by": ",".join(order_by) if order_by is not ... else order_by,
231
232
  "phenomenon_time_max": phenomenon_time_max,
232
233
  "phenomenon_time_min": phenomenon_time_min,
234
+ "result_qualifier_code": result_qualifier_code,
233
235
  "format": "column"
234
236
  }
235
237
  params = {
@@ -256,12 +258,13 @@ class DatastreamService(HydroServerBaseService):
256
258
  self,
257
259
  uid: Union[UUID, str],
258
260
  observations: pd.DataFrame,
261
+ mode: str = "insert"
259
262
  ) -> None:
260
263
  """Load observations to a datastream."""
261
264
 
262
265
  path = f"/{self.client.base_route}/{self.model.get_route()}/{str(uid)}/observations/bulk-create"
263
266
  headers = {"Content-type": "application/json"}
264
- params = {"mode": "insert"}
267
+ params = {"mode": mode}
265
268
  body = {
266
269
  "fields": [to_camel(col) for col in observations.columns.tolist()],
267
270
  "data": observations.values.tolist()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hydroserverpy
3
- Version: 1.4.1
3
+ Version: 1.5.0
4
4
  Summary: A Python client for managing HydroServer data
5
5
  Requires-Python: <4,>=3.9
6
6
  Description-Content-Type: text/markdown
@@ -8,8 +8,8 @@ License-File: LICENSE
8
8
  Requires-Dist: requests>=2
9
9
  Requires-Dist: pydantic>=2.6
10
10
  Requires-Dist: pydantic[email]>=2.6
11
- Requires-Dist: pandas>=2.2
12
- Requires-Dist: numpy>=2.0
11
+ Requires-Dist: pandas>=2.1
12
+ Requires-Dist: numpy>=1.22.4
13
13
  Requires-Dist: pyyaml>=5
14
14
  Requires-Dist: simplejson>=3
15
15
  Requires-Dist: crontab>=1
@@ -1,8 +1,8 @@
1
1
  requests>=2
2
2
  pydantic>=2.6
3
3
  pydantic[email]>=2.6
4
- pandas>=2.2
5
- numpy>=2.0
4
+ pandas>=2.1
5
+ numpy>=1.22.4
6
6
  pyyaml>=5
7
7
  simplejson>=3
8
8
  crontab>=1
File without changes
File without changes
File without changes