warpzone-sdk 14.1.0__tar.gz → 14.3.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.
Files changed (57) hide show
  1. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/PKG-INFO +2 -2
  2. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/pyproject.toml +2 -2
  3. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/db/client.py +63 -13
  4. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/integrations.py +1 -1
  5. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/README.md +0 -0
  6. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/__init__.py +0 -0
  7. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/blobstorage/__init__.py +0 -0
  8. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/blobstorage/client.py +0 -0
  9. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/db/__init__.py +0 -0
  10. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/deltastorage/__init__.py +0 -0
  11. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/deltastorage/data_types.py +0 -0
  12. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/deltastorage/generated_columns.py +0 -0
  13. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/deltastorage/lock_client.py +0 -0
  14. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/deltastorage/schema.py +0 -0
  15. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/deltastorage/slicing.py +0 -0
  16. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/deltastorage/store.py +0 -0
  17. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/deltastorage/table.py +0 -0
  18. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/enums/__init__.py +0 -0
  19. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/enums/topicenum.py +0 -0
  20. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/__init__.py +0 -0
  21. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/checks.py +0 -0
  22. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/functionize.py +0 -0
  23. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/monitor.py +0 -0
  24. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/process.py +0 -0
  25. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/processors/__init__.py +0 -0
  26. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/processors/dependencies.py +0 -0
  27. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/processors/outputs.py +0 -0
  28. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/processors/triggers.py +0 -0
  29. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/signature.py +0 -0
  30. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/function/types.py +0 -0
  31. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/healthchecks/__init__.py +0 -0
  32. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/healthchecks/model.py +0 -0
  33. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/monitor/__init__.py +0 -0
  34. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/monitor/logs.py +0 -0
  35. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/monitor/traces.py +0 -0
  36. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/servicebus/data/__init__.py +0 -0
  37. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/servicebus/data/client.py +0 -0
  38. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/servicebus/events/__init__.py +0 -0
  39. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/servicebus/events/client.py +0 -0
  40. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/servicebus/events/triggers.py +0 -0
  41. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/tablestorage/db/__init__.py +0 -0
  42. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/tablestorage/db/base_client.py +0 -0
  43. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/tablestorage/db/client.py +0 -0
  44. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/tablestorage/db/table_config.py +0 -0
  45. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/tablestorage/tables/__init__.py +0 -0
  46. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/tablestorage/tables/client.py +0 -0
  47. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/tablestorage/tables/entities.py +0 -0
  48. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/tablestorage/tables/helpers.py +0 -0
  49. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/testing/__init__.py +0 -0
  50. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/testing/assertions.py +0 -0
  51. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/testing/data.py +0 -0
  52. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/testing/matchers.py +0 -0
  53. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/tools/__init__.py +0 -0
  54. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/tools/copy.py +0 -0
  55. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/transform/__init__.py +0 -0
  56. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/transform/data.py +0 -0
  57. {warpzone_sdk-14.1.0 → warpzone_sdk-14.3.0}/warpzone/transform/schema.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: warpzone-sdk
3
- Version: 14.1.0
3
+ Version: 14.3.0
4
4
  Summary: The main objective of this package is to centralize logic used to interact with Azure Functions, Azure Service Bus and Azure Table Storage
5
5
  Author: Team Enigma
6
6
  Author-email: enigma@energinet.dk
@@ -22,7 +22,7 @@ Requires-Dist: azure-servicebus (>=7.8.0,<7.9.0)
22
22
  Requires-Dist: azure-storage-blob (>=12.14.1)
23
23
  Requires-Dist: cryptography (==43.0.3)
24
24
  Requires-Dist: datamazing (>=5.1.6)
25
- Requires-Dist: deltalake (>=1.3.0)
25
+ Requires-Dist: deltalake (==1.2.1)
26
26
  Requires-Dist: numpy (>=1.26.4)
27
27
  Requires-Dist: obstore (>=0.8.2)
28
28
  Requires-Dist: opentelemetry-sdk (>=1.32.0)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "warpzone-sdk"
3
- version = "14.1.0"
3
+ version = "14.3.0"
4
4
  description = "The main objective of this package is to centralize logic used to interact with Azure Functions, Azure Service Bus and Azure Table Storage"
5
5
  authors = [{ name = "Team Enigma", email = "enigma@energinet.dk" }]
6
6
  requires-python = ">=3.10"
@@ -14,7 +14,7 @@ requires-poetry = ">=2.2"
14
14
  pandas = ">=2.0.3"
15
15
  polars = ">=1.33.1"
16
16
  obstore = ">=0.8.2"
17
- deltalake = ">=1.3.0"
17
+ deltalake = "==1.2.1" # pin to avoid breaking changes in 1.3.0. Follow Github issue here https://github.com/delta-io/delta-rs/issues/3939
18
18
  pyarrow = ">=19.0.0"
19
19
  datamazing = ">=5.1.6"
20
20
  azure-core = ">=1.26.3"
@@ -32,29 +32,51 @@ class WarpzoneDatabaseClient:
32
32
  self,
33
33
  path: str,
34
34
  storage_options: dict[str, str] | None = None,
35
+ table_prefix: str = "",
35
36
  ):
36
37
  self.store = Store(
37
38
  path=path,
38
39
  storage_options=storage_options,
39
40
  )
41
+ self.table_prefix = table_prefix
40
42
 
41
43
  @classmethod
42
- def from_storage_account(
44
+ def from_resource_name(
43
45
  cls,
44
46
  storage_account: str,
45
47
  container_name: str = "datasets",
48
+ sub_path: str = "",
49
+ table_prefix: str = "",
46
50
  credential: (
47
51
  AzureNamedKeyCredential | AzureSasCredential | TokenCredential
48
52
  ) = DefaultAzureCredential(),
49
53
  ):
54
+ """Create a WarpzoneDatabaseClient from resource name (storage account).
55
+ This assumes the path of the delta lake is of the form:
56
+ abfss://{container_name}@{storage_account}.dfs.core.windows.net/{sub_path}
57
+
58
+ Args:
59
+ storage_account (str): Storage account name.
60
+ container_name (str, optional): Container name. Defaults to "datasets".
61
+ sub_path (str, optional): Sub-path within the container. Defaults to "".
62
+ table_prefix (str, optional): Table prefix to use (e.g. `mz_` for archive).
63
+ Defaults to "".
64
+ credential (optional): Azure credential to use.
65
+ Defaults to DefaultAzureCredential().
66
+ """
50
67
  path = f"abfss://{container_name}@{storage_account}.dfs.core.windows.net"
68
+ if sub_path:
69
+ path += f"/{sub_path}"
70
+
51
71
  token = credential.get_token("https://storage.azure.com/.default")
52
72
  storage_options = {
53
73
  "account_name": storage_account,
54
74
  "token": token.token,
55
75
  }
56
76
 
57
- return cls(path=path, storage_options=storage_options)
77
+ return cls(
78
+ path=path, storage_options=storage_options, table_prefix=table_prefix
79
+ )
58
80
 
59
81
  def get_unit_and_multiple(self, timedelta: pd.Timedelta) -> tuple[str | None, int]:
60
82
  """
@@ -148,7 +170,35 @@ class WarpzoneDatabaseClient:
148
170
  time_interval: Optional[pdz.TimeInterval] = None,
149
171
  time_travel: Optional[pdz.TimeTravel] = None,
150
172
  filters: Optional[dict[str, object]] = None,
173
+ include_validity_period_columns: bool = False,
174
+ include_generated_columns: bool = False,
151
175
  ) -> pd.DataFrame:
176
+ """Query table.
177
+ Query defaults are set to match old Table Storage client behavior.
178
+ Time travel defaults to "as of now"
179
+ Validity period columns are dropped by default.
180
+ Generated columns are dropped by default.
181
+
182
+ Args:
183
+ table_name (str): Name of the table
184
+ time_interval (Optional[pdz.TimeInterval], optional): Time interval for the
185
+ query. Defaults to None.
186
+ time_travel (Optional[pdz.TimeTravel], optional): Time travel information.
187
+ Defaults to None.
188
+ filters (Optional[dict[str, object]], optional): Filters to apply to the
189
+ query.
190
+ Defaults to None.
191
+ include_validity_period_columns (bool, optional): Whether to include
192
+ validity period columns in the result;
193
+ (e.g. `valid_from_time_utc`, `valid_to_time_utc`).
194
+ Defaults to False.
195
+ include_generated_columns (bool, optional): Whether to include generated
196
+ columns in the result; (e.g. `valid_from_time_utc`, `valid_to_time_utc`).
197
+ Defaults to False.
198
+
199
+ Returns:
200
+ pd.DataFrame: The result of the query.
201
+ """
152
202
  # We do 'camelCaseToSnake_case' conversion here because the old
153
203
  # naming convention used in WarpZone was CamelCase, while the new
154
204
  # naming convention is snake_case. The goal is to remove this
@@ -191,16 +241,16 @@ class WarpzoneDatabaseClient:
191
241
  for col in pd_df.select_dtypes(include=["datetime", "datetimetz"]).columns:
192
242
  pd_df[col] = pd_df[col].dt.floor("s").dt.as_unit("ns")
193
243
 
194
- # We remove the valid-from and valid-to columns, as well
195
- # as any generated columns, as this was not present
196
- # in the old solution (Azure Table Stroage)
197
- generated_cols = []
198
- for field in table.schema().fields:
199
- if field.generated_as is not None:
200
- generated_cols.append(field.column_name)
201
-
202
- pd_df = pd_df.drop(
203
- columns=["valid_from_time_utc", "valid_to_time_utc"] + generated_cols
204
- )
244
+ # Drop generated columns
245
+ if not include_generated_columns:
246
+ generated_cols = []
247
+ for field in table.schema().fields:
248
+ if field.generated_as is not None:
249
+ generated_cols.append(field.column_name)
250
+ pd_df = pd_df.drop(columns=generated_cols)
251
+
252
+ # Drop valid-from/to columns
253
+ if not include_validity_period_columns:
254
+ pd_df = pd_df.drop(columns=["valid_from_time_utc", "valid_to_time_utc"])
205
255
 
206
256
  return pd_df
@@ -62,7 +62,7 @@ def get_db_client() -> WarpzoneDatabaseClient:
62
62
 
63
63
 
64
64
  def get_delta_db_client() -> WarpzoneDeltaDatabaseClient:
65
- db_client = WarpzoneDeltaDatabaseClient.from_storage_account(
65
+ db_client = WarpzoneDeltaDatabaseClient.from_resource_name(
66
66
  os.environ["OPERATIONAL_DATA_STORAGE_ACCOUNT"],
67
67
  credential=_credential,
68
68
  )
File without changes