hydroserverpy 1.4.0b3__tar.gz → 1.4.0b4__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.0b3/src/hydroserverpy.egg-info → hydroserverpy-1.4.0b4}/PKG-INFO +1 -1
  2. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/setup.cfg +1 -1
  3. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/extractors/http_extractor.py +2 -5
  4. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/schedule.py +1 -1
  5. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/timestamp_parser.py +4 -1
  6. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/transformers/base.py +9 -0
  7. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/transformers/json_transformer.py +14 -0
  8. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4/src/hydroserverpy.egg-info}/PKG-INFO +1 -1
  9. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/LICENSE +0 -0
  10. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/README.md +0 -0
  11. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/pyproject.toml +0 -0
  12. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/setup.py +0 -0
  13. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/__init__.py +0 -0
  14. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/__init__.py +0 -0
  15. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/client.py +0 -0
  16. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/__init__.py +0 -0
  17. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/base.py +0 -0
  18. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/__init__.py +0 -0
  19. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/data_archive.py +0 -0
  20. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/data_source.py +0 -0
  21. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/etl_configuration.py +0 -0
  22. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/extractors/__init__.py +0 -0
  23. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/extractors/base.py +0 -0
  24. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/extractors/ftp_extractor.py +0 -0
  25. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/extractors/local_file_extractor.py +0 -0
  26. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/factories.py +0 -0
  27. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/loaders/__init__.py +0 -0
  28. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/loaders/base.py +0 -0
  29. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/loaders/hydroserver_loader.py +0 -0
  30. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/orchestration_configuration.py +0 -0
  31. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/orchestration_system.py +0 -0
  32. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/status.py +0 -0
  33. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/transformers/__init__.py +0 -0
  34. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/transformers/csv_transformer.py +0 -0
  35. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/etl/types.py +0 -0
  36. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/iam/__init__.py +0 -0
  37. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/iam/account.py +0 -0
  38. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/iam/apikey.py +0 -0
  39. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/iam/collaborator.py +0 -0
  40. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/iam/role.py +0 -0
  41. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/iam/workspace.py +0 -0
  42. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/sta/__init__.py +0 -0
  43. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/sta/datastream.py +0 -0
  44. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/sta/observation.py +0 -0
  45. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/sta/observed_property.py +0 -0
  46. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/sta/processing_level.py +0 -0
  47. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/sta/result_qualifier.py +0 -0
  48. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/sta/sensor.py +0 -0
  49. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/sta/thing.py +0 -0
  50. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/models/sta/unit.py +0 -0
  51. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/__init__.py +0 -0
  52. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/base.py +0 -0
  53. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/etl/__init__.py +0 -0
  54. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/etl/data_archive.py +0 -0
  55. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/etl/data_source.py +0 -0
  56. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/etl/orchestration_system.py +0 -0
  57. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/iam/__init__.py +0 -0
  58. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/iam/role.py +0 -0
  59. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/iam/workspace.py +0 -0
  60. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/sta/__init__.py +0 -0
  61. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/sta/datastream.py +0 -0
  62. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/sta/observed_property.py +0 -0
  63. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/sta/processing_level.py +0 -0
  64. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/sta/result_qualifier.py +0 -0
  65. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/sta/sensor.py +0 -0
  66. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/sta/thing.py +0 -0
  67. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/services/sta/unit.py +0 -0
  68. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/api/utils.py +0 -0
  69. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/quality/__init__.py +0 -0
  70. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy/quality/service.py +0 -0
  71. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy.egg-info/SOURCES.txt +0 -0
  72. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy.egg-info/dependency_links.txt +0 -0
  73. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy.egg-info/requires.txt +0 -0
  74. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/src/hydroserverpy.egg-info/top_level.txt +0 -0
  75. {hydroserverpy-1.4.0b3 → hydroserverpy-1.4.0b4}/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.0b3
3
+ Version: 1.4.0b4
4
4
  Requires-Python: <4,>=3.9
5
5
  License-File: LICENSE
6
6
  Requires-Dist: requests>=2
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = hydroserverpy
3
- version = 1.4.0b3
3
+ version = 1.4.0b4
4
4
 
5
5
  [options]
6
6
  package_dir =
@@ -17,11 +17,8 @@ class HTTPExtractor(Extractor):
17
17
  url = self.resolve_placeholder_variables(payload, loader)
18
18
  logging.info(f"Requesting data from → {url}")
19
19
 
20
- try:
21
- response = requests.get(url)
22
- except Exception as e:
23
- logging.error(f"Failed to fetch {url}: {e}")
24
- raise
20
+ response = requests.get(url)
21
+ response.raise_for_status()
25
22
 
26
23
  data = BytesIO()
27
24
  for chunk in response.iter_content(chunk_size=8192):
@@ -1,6 +1,6 @@
1
1
  from datetime import datetime
2
2
  from typing import Literal, Optional
3
- from pydantic import BaseModel, Field, EmailStr
3
+ from pydantic import BaseModel, Field
4
4
 
5
5
 
6
6
  class Schedule(BaseModel):
@@ -73,7 +73,10 @@ class TimestampParser:
73
73
  return localized.dt.tz_convert(timezone.utc)
74
74
 
75
75
  def parse_series(self, raw_series: pd.Series) -> pd.Series:
76
- s = raw_series.str.strip()
76
+ if pd.api.types.is_datetime64_any_dtype(raw_series):
77
+ s = raw_series # already datetimes
78
+ else:
79
+ s = raw_series.astype("string", copy=False).str.strip()
77
80
  parsed = self._convert_series_to_UTC(s)
78
81
 
79
82
  if parsed.isna().any():
@@ -68,14 +68,21 @@ class Transformer(ABC):
68
68
  def standardize_dataframe(
69
69
  self, df: pd.DataFrame, mappings: List[SourceTargetMapping]
70
70
  ):
71
+ logging.info(f"Successfully read payload into dataframe:\n {df}")
72
+
71
73
  # 1) Normalize timestamp column
72
74
  df.rename(columns={self.timestamp.key: "timestamp"}, inplace=True)
73
75
  if "timestamp" not in df.columns:
74
76
  msg = f"Timestamp column '{self.timestamp.key}' not found in data."
75
77
  logging.error(msg)
76
78
  raise ValueError(msg)
79
+ logging.info(f"Renamed timestamp column to 'timestamp'")
80
+
77
81
  df["timestamp"] = self.timestamp_parser.parse_series(df["timestamp"])
82
+ logging.info(f"Normalized timestamp column \n {df}")
83
+
78
84
  df = df.drop_duplicates(subset=["timestamp"], keep="last")
85
+ logging.info(f"Removed duplicates\n")
79
86
 
80
87
  def _resolve_source_col(s_id: Union[str, int]) -> str:
81
88
  if isinstance(s_id, int) and s_id not in df.columns:
@@ -120,6 +127,8 @@ class Transformer(ABC):
120
127
  target_col = str(path.target_identifier)
121
128
  transformed_df[target_col] = _apply_transformations(base, path)
122
129
 
130
+ logging.info(f"Mapped payload sources to targets")
131
+
123
132
  # 6) Keep only timestamp + target columns
124
133
  df = pd.concat([df[["timestamp"]], pd.DataFrame(transformed_df)], axis=1)
125
134
 
@@ -24,7 +24,21 @@ class JSONTransformer(Transformer):
24
24
  Returns:
25
25
  pd.DataFrame: pandas DataFrames in the format pd.Timestamp, datastream_id_1, datastream_id_2, ...
26
26
  """
27
+ if data_file is None:
28
+ raise TypeError(
29
+ "JSONTransformer received None; expected file-like, bytes, or str"
30
+ )
31
+
27
32
  json_data = json.load(data_file)
33
+ logging.info(f"Read in json data: \n{data_file}")
34
+ logging.info(
35
+ "JSONTransformer cfg:\n jmespath=%r\n ts.key=%r\n ts.format=%r\n ts.custom=%r",
36
+ self.cfg.jmespath,
37
+ self.timestamp.key,
38
+ self.timestamp.format,
39
+ self.timestamp.custom_format,
40
+ )
41
+
28
42
  data_points = self.extract_data_points(json_data)
29
43
  if not data_points:
30
44
  logging.warning("No data points found in the JSON data.")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hydroserverpy
3
- Version: 1.4.0b3
3
+ Version: 1.4.0b4
4
4
  Requires-Python: <4,>=3.9
5
5
  License-File: LICENSE
6
6
  Requires-Dist: requests>=2
File without changes