warpzone-sdk 15.0.0__py3-none-any.whl → 15.0.0.dev1__py3-none-any.whl

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.
warpzone/db/client.py CHANGED
@@ -32,51 +32,29 @@ class WarpzoneDatabaseClient:
32
32
  self,
33
33
  path: str,
34
34
  storage_options: dict[str, str] | None = None,
35
- table_prefix: str = "",
36
35
  ):
37
36
  self.store = Store(
38
37
  path=path,
39
38
  storage_options=storage_options,
40
39
  )
41
- self.table_prefix = table_prefix
42
40
 
43
41
  @classmethod
44
- def from_resource_name(
42
+ def from_storage_account(
45
43
  cls,
46
44
  storage_account: str,
47
45
  container_name: str = "datasets",
48
- sub_path: str = "",
49
- table_prefix: str = "",
50
46
  credential: (
51
47
  AzureNamedKeyCredential | AzureSasCredential | TokenCredential
52
48
  ) = DefaultAzureCredential(),
53
49
  ):
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
- """
67
50
  path = f"abfss://{container_name}@{storage_account}.dfs.core.windows.net"
68
- if sub_path:
69
- path += f"/{sub_path}"
70
-
71
51
  token = credential.get_token("https://storage.azure.com/.default")
72
52
  storage_options = {
73
53
  "account_name": storage_account,
74
54
  "token": token.token,
75
55
  }
76
56
 
77
- return cls(
78
- path=path, storage_options=storage_options, table_prefix=table_prefix
79
- )
57
+ return cls(path=path, storage_options=storage_options)
80
58
 
81
59
  def get_unit_and_multiple(self, timedelta: pd.Timedelta) -> tuple[str | None, int]:
82
60
  """
@@ -170,35 +148,7 @@ class WarpzoneDatabaseClient:
170
148
  time_interval: Optional[pdz.TimeInterval] = None,
171
149
  time_travel: Optional[pdz.TimeTravel] = None,
172
150
  filters: Optional[dict[str, object]] = None,
173
- include_validity_period_columns: bool = False,
174
- include_generated_columns: bool = False,
175
151
  ) -> 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
- """
202
152
  # We do 'camelCaseToSnake_case' conversion here because the old
203
153
  # naming convention used in WarpZone was CamelCase, while the new
204
154
  # naming convention is snake_case. The goal is to remove this
@@ -241,16 +191,16 @@ class WarpzoneDatabaseClient:
241
191
  for col in pd_df.select_dtypes(include=["datetime", "datetimetz"]).columns:
242
192
  pd_df[col] = pd_df[col].dt.floor("s").dt.as_unit("ns")
243
193
 
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"])
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
+ )
255
205
 
256
206
  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_resource_name(
65
+ db_client = WarpzoneDeltaDatabaseClient.from_storage_account(
66
66
  os.environ["OPERATIONAL_DATA_STORAGE_ACCOUNT"],
67
67
  credential=_credential,
68
68
  )
@@ -3,32 +3,21 @@ from contextlib import contextmanager
3
3
  from typing import Callable
4
4
 
5
5
  import azure.functions as func
6
+ from azure.monitor.opentelemetry import configure_azure_monitor
6
7
 
7
8
  from warpzone.function.types import SingleArgumentCallable
8
9
  from warpzone.monitor import logs, traces
9
10
 
11
+ configure_azure_monitor()
12
+
10
13
  SUBJECT_IDENTIFIER = "<Subject>"
11
14
 
12
15
  tracer = traces.get_tracer(__name__)
13
16
  logger = logs.get_logger(__name__)
14
17
 
15
18
 
16
- def configure_monitoring():
17
- """
18
- Configure logging and tracing on Azure Function to
19
- - export telemetry to App Insights
20
- """
21
- # configure tracer provider
22
- traces.configure_tracing()
23
-
24
- # configure logger provider
25
- logs.configure_logging()
26
-
27
-
28
19
  @contextmanager
29
20
  def run_in_trace_context(context: func.Context):
30
- configure_monitoring()
31
-
32
21
  trace_context = context.trace_context
33
22
  with traces.set_trace_context(
34
23
  trace_context.trace_parent, trace_context.trace_state
@@ -1,2 +1,2 @@
1
1
  from .logs import get_logger
2
- from .traces import get_current_diagnostic_id, get_tracer, servicebus_send_span
2
+ from .traces import get_current_diagnostic_id, get_tracer
warpzone/monitor/logs.py CHANGED
@@ -1,72 +1,19 @@
1
- # NOTE: OpenTelemetry logging to Azure is still in EXPERIMENTAL mode!
2
1
  import logging
3
- import os
4
- import threading
5
- from logging import StreamHandler
6
2
 
7
- from azure.monitor.opentelemetry.exporter import AzureMonitorLogExporter
8
- from opentelemetry import _logs as logs
9
- from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
10
- from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
11
- from opentelemetry.sdk.resources import SERVICE_NAME, Resource
12
-
13
- logger = logging.getLogger(__name__)
14
- logger.addHandler(StreamHandler())
15
-
16
- # Suppress verbose logging from Azure SDK and infrastructure
17
- _NOISY_LOGGERS = [
18
- "azure.core.pipeline.policies.http_logging_policy",
19
- "azure.data.tables",
20
- "azure.storage.blob",
21
- "azure.servicebus",
22
- "azure.identity",
23
- "azure.monitor.opentelemetry.exporter",
24
- "azure_functions_worker",
25
- "azure.functions",
26
- "uamqp",
27
- ]
28
- for _logger_name in _NOISY_LOGGERS:
29
- logging.getLogger(_logger_name).setLevel(logging.WARNING)
30
-
31
- _LOGGING_LOCK = threading.Lock()
32
- LOGGING_IS_CONFIGURED = False
33
-
34
-
35
- def configure_logging():
36
- global LOGGING_IS_CONFIGURED
37
- # Add thread locking to avoid race conditions during setup
38
- with _LOGGING_LOCK:
39
- if LOGGING_IS_CONFIGURED:
40
- # logging should only be set up once
41
- # to avoid duplicated log handling.
42
- # Global variables is the pattern used
43
- # by opentelemetry, so we use the same
44
- return
45
-
46
- # set up logger provider based on the Azure Function resource
47
- # (this is make sure App Insights can track the log source correctly)
48
- # (https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-enable?tabs=net#set-the-cloud-role-name-and-the-cloud-role-instance)
49
- service_name = os.getenv("WEBSITE_SITE_NAME") or "unknown-service"
50
- resource = Resource.create({SERVICE_NAME: service_name})
51
- logs.set_logger_provider(
52
- LoggerProvider(
53
- resource=resource,
54
- )
55
- )
56
-
57
- # setup azure monitor log exporter to send telemetry to App Insights
58
- try:
59
- log_exporter = AzureMonitorLogExporter()
60
- except ValueError:
61
- logger.warning(
62
- "Cant set up logging to App Insights,"
63
- " as no connection string is set."
64
- )
65
- else:
66
- log_record_processor = BatchLogRecordProcessor(log_exporter)
67
- logs.get_logger_provider().add_log_record_processor(log_record_processor)
68
-
69
- LOGGING_IS_CONFIGURED = True
3
+ # Suppress verbose logging from Azure SDK
4
+ logging.getLogger("azure.core.pipeline.policies.http_logging_policy").setLevel(
5
+ logging.WARNING
6
+ )
7
+ logging.getLogger("azure.data.tables").setLevel(logging.WARNING)
8
+ logging.getLogger("azure.storage.blob").setLevel(logging.WARNING)
9
+ logging.getLogger("azure.servicebus").setLevel(logging.WARNING)
10
+ logging.getLogger("uamqp").setLevel(logging.WARNING)
11
+ logging.getLogger("azure.identity").setLevel(logging.WARNING)
12
+ # Suppress Azure Functions host/worker logging (e.g., trigger details)
13
+ logging.getLogger("azure_functions_worker").setLevel(logging.WARNING)
14
+ logging.getLogger("azure.functions").setLevel(logging.WARNING)
15
+ # Suppress Azure Monitor exporter logging (e.g., transmission success messages)
16
+ logging.getLogger("azure.monitor.opentelemetry.exporter").setLevel(logging.WARNING)
70
17
 
71
18
 
72
19
  def get_logger(name: str):
@@ -74,14 +21,4 @@ def get_logger(name: str):
74
21
  logger = logging.getLogger(name)
75
22
  logger.setLevel(logging.INFO)
76
23
 
77
- # Check if OTEL handler is already added to this specific logger
78
- # (not using hasHandlers() as it also checks parent/root handlers)
79
- has_otel_handler = any(isinstance(h, LoggingHandler) for h in logger.handlers)
80
- if not has_otel_handler:
81
- # add OTEL handler for trace correlation
82
- handler = LoggingHandler()
83
- logger.addHandler(handler)
84
- # Don't propagate to root logger to avoid duplicate logs
85
- logger.propagate = False
86
-
87
24
  return logger
@@ -1,65 +1,10 @@
1
- import logging
2
- import os
3
- import threading
4
1
  from contextlib import contextmanager
5
- from logging import StreamHandler
6
2
 
7
- from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter
3
+ from azure.core.settings import settings
8
4
  from opentelemetry import context, trace
9
- from opentelemetry.sdk.resources import SERVICE_NAME, Resource
10
- from opentelemetry.sdk.trace import TracerProvider
11
- from opentelemetry.sdk.trace.export import BatchSpanProcessor
12
- from opentelemetry.sdk.trace.sampling import ALWAYS_ON
13
5
  from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
14
6
 
15
- logger = logging.getLogger(__name__)
16
- logger.addHandler(StreamHandler())
17
-
18
- tracer = trace.get_tracer(__name__)
19
-
20
- _TRACING_LOCK = threading.Lock()
21
- TRACING_IS_CONFIGURED = False
22
-
23
-
24
- def configure_tracing():
25
- global TRACING_IS_CONFIGURED
26
- # Add thread locking to avoid race conditions during setup
27
- with _TRACING_LOCK:
28
- if TRACING_IS_CONFIGURED:
29
- # tracing should only be set up once
30
- # to avoid duplicated trace handling.
31
- # Global variables is the pattern used
32
- # by opentelemetry, so we use the same
33
- return
34
-
35
- # set up tracer provider based on the Azure Function resource
36
- # (this is make sure App Insights can track the trace source correctly)
37
- # (https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-enable?tabs=net#set-the-cloud-role-name-and-the-cloud-role-instance).
38
- # We use the ALWAYS ON sampler since otherwise spans will not be
39
- # recording upon creation
40
- # (https://anecdotes.dev/opentelemetry-on-google-cloud-unraveling-the-mystery-f61f044c18be)
41
- service_name = os.getenv("WEBSITE_SITE_NAME") or "unknown-service"
42
- resource = Resource.create({SERVICE_NAME: service_name})
43
- trace.set_tracer_provider(
44
- TracerProvider(
45
- sampler=ALWAYS_ON,
46
- resource=resource,
47
- )
48
- )
49
-
50
- # setup azure monitor trace exporter to send telemetry to App Insights
51
- try:
52
- trace_exporter = AzureMonitorTraceExporter()
53
- except ValueError:
54
- logger.warning(
55
- "Cant set up tracing to App Insights,"
56
- " as no connection string is set."
57
- )
58
- else:
59
- span_processor = BatchSpanProcessor(trace_exporter)
60
- trace.get_tracer_provider().add_span_processor(span_processor)
61
-
62
- TRACING_IS_CONFIGURED = True
7
+ settings.tracing_implementation = "opentelemetry"
63
8
 
64
9
 
65
10
  @contextmanager
@@ -104,25 +49,3 @@ def get_current_diagnostic_id() -> str:
104
49
  diagnostic_id = f"00-{operation_id}-{parent_id}-01"
105
50
 
106
51
  return diagnostic_id
107
-
108
-
109
- # Service Bus trace constants (these were removed from azure-servicebus SDK)
110
- _SB_TRACE_NAMESPACE = "Microsoft.ServiceBus"
111
-
112
-
113
- @contextmanager
114
- def servicebus_send_span(subject: str) -> trace.Span:
115
- """Start span for Service Bus message tracing.
116
-
117
- Args:
118
- subject: The message subject (used as span name for easy identification)
119
-
120
- Yields:
121
- trace.Span: the span
122
- """
123
- with tracer.start_as_current_span(
124
- subject, kind=trace.SpanKind.PRODUCER
125
- ) as msg_span:
126
- msg_span.set_attributes({"az.namespace": _SB_TRACE_NAMESPACE})
127
-
128
- yield msg_span
@@ -125,20 +125,20 @@ class WarpzoneEventClient:
125
125
  ):
126
126
  typeguard.check_type(value=topic, expected_type=Topic)
127
127
  topic_name = topic.value
128
- with traces.servicebus_send_span(event_msg.subject):
129
- diagnostic_id = traces.get_current_diagnostic_id()
130
-
131
- az_sdk_msg = ServiceBusMessage(
132
- body=json.dumps(event_msg.event),
133
- subject=event_msg.subject,
134
- content_type="application/json",
135
- message_id=event_msg.message_id,
136
- application_properties={"Diagnostic-Id": diagnostic_id},
137
- time_to_live=event_msg.time_to_live,
138
- )
139
128
 
140
- with self._get_topic_sender(topic_name) as sender:
141
- sender.send_messages(message=az_sdk_msg)
129
+ diagnostic_id = traces.get_current_diagnostic_id()
130
+
131
+ az_sdk_msg = ServiceBusMessage(
132
+ body=json.dumps(event_msg.event),
133
+ subject=event_msg.subject,
134
+ content_type="application/json",
135
+ message_id=event_msg.message_id,
136
+ application_properties={"Diagnostic-Id": diagnostic_id},
137
+ time_to_live=event_msg.time_to_live,
138
+ )
139
+
140
+ with self._get_topic_sender(topic_name) as sender:
141
+ sender.send_messages(message=az_sdk_msg)
142
142
 
143
143
  def list_subscriptions(
144
144
  self,
@@ -12,10 +12,13 @@ from azure.identity import DefaultAzureCredential
12
12
 
13
13
  from warpzone.blobstorage.client import WarpzoneBlobClient
14
14
  from warpzone.healthchecks import HealthCheckResult, check_health_of
15
+ from warpzone.monitor import traces
15
16
  from warpzone.tablestorage.db import base_client
16
17
  from warpzone.tablestorage.db.table_config import DataType, TableMetadata
17
18
  from warpzone.tablestorage.tables.client import WarpzoneTableClient
18
19
 
20
+ tracer = traces.get_tracer(__name__)
21
+
19
22
 
20
23
  class WarpzoneDatabaseClient:
21
24
  """Class to interact with Azure Table Storage for database queries
@@ -157,22 +160,31 @@ class WarpzoneDatabaseClient:
157
160
  filters: Optional[dict[str, object]] = None,
158
161
  use_cache: Optional[bool] = True,
159
162
  ) -> pd.DataFrame:
160
- table_metadata = self.get_table_metadata(table_name)
161
-
162
- match table_metadata.data_type:
163
- case DataType.TIME_SERIES:
164
- df = self._query_time_series(
165
- table_metadata, time_interval, filters, use_cache
166
- )
167
- case _:
168
- if time_interval:
169
- raise ValueError(
170
- f"Table {table_name} is not a time series table,"
171
- " and cannot be queried with a time interval."
163
+ with tracer.start_as_current_span(
164
+ "WarpzoneDatabaseClient.query",
165
+ attributes={
166
+ "table_name": table_name,
167
+ "use_cache": use_cache,
168
+ "has_filters": filters is not None,
169
+ "has_time_interval": time_interval is not None,
170
+ },
171
+ ):
172
+ table_metadata = self.get_table_metadata(table_name)
173
+
174
+ match table_metadata.data_type:
175
+ case DataType.TIME_SERIES:
176
+ df = self._query_time_series(
177
+ table_metadata, time_interval, filters, use_cache
172
178
  )
173
- df = self._query_generic(table_metadata, None, filters, use_cache)
174
-
175
- return df
179
+ case _:
180
+ if time_interval:
181
+ raise ValueError(
182
+ f"Table {table_name} is not a time series table,"
183
+ " and cannot be queried with a time interval."
184
+ )
185
+ df = self._query_generic(table_metadata, None, filters, use_cache)
186
+
187
+ return df
176
188
 
177
189
  def list_tables(self):
178
190
  return self._table_client.list_tables()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: warpzone-sdk
3
- Version: 15.0.0
3
+ Version: 15.0.0.dev1
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
@@ -13,9 +13,11 @@ Classifier: Programming Language :: Python :: 3.13
13
13
  Classifier: Programming Language :: Python :: 3.14
14
14
  Requires-Dist: aiohttp (>=3.8.3)
15
15
  Requires-Dist: azure-core (>=1.26.3)
16
+ Requires-Dist: azure-core-tracing-opentelemetry (>=1.0.0b12)
16
17
  Requires-Dist: azure-data-tables (>=12.4.0)
17
18
  Requires-Dist: azure-functions (>=1.12.0)
18
19
  Requires-Dist: azure-identity (>=1.15.0)
20
+ Requires-Dist: azure-monitor-opentelemetry (>=1.8.4)
19
21
  Requires-Dist: azure-monitor-opentelemetry-exporter (>=1.0.0b36)
20
22
  Requires-Dist: azure-servicebus (>=7.8.0)
21
23
  Requires-Dist: azure-storage-blob (>=12.14.1)
@@ -2,7 +2,7 @@ warpzone/__init__.py,sha256=Ay7znIadokCdHHqsPlWAqhdg-zdWhXHNtxVinViYm7o,1533
2
2
  warpzone/blobstorage/__init__.py,sha256=lnc0uiaGLF0qMi_rWhCpRSFvaj0CJEiMCAl6Yqn1ZiA,21
3
3
  warpzone/blobstorage/client.py,sha256=YwDV83acoCeHS_D_ydsTYwnf56rSTy9CKpsxqeoXmBs,4638
4
4
  warpzone/db/__init__.py,sha256=lnc0uiaGLF0qMi_rWhCpRSFvaj0CJEiMCAl6Yqn1ZiA,21
5
- warpzone/db/client.py,sha256=DitLBzMEtcZAfBMRc7iTyFLVB8al7lD2D39CgRPu9ms,9183
5
+ warpzone/db/client.py,sha256=_LYIZIYwaii9dyTwpqoOCYbqzzcbJNgflzSvUqeTto8,6919
6
6
  warpzone/deltastorage/__init__.py,sha256=cV8sGT2N_N5Z-E179NMW5O7q3FUDrb3j5f-yVNlNPv0,152
7
7
  warpzone/deltastorage/data_types.py,sha256=tWjLO_0ig7-tYxSHShvrd0znA7FFDnS-wBuFClUQG2U,2059
8
8
  warpzone/deltastorage/generated_columns.py,sha256=Dr_bihM7v9JKCgBXxc3JQC2P2mUGobXsReRKOl6jDO4,4765
@@ -16,8 +16,8 @@ warpzone/enums/topicenum.py,sha256=cj9F7kYzwvDeHN5jJXwgnHXTh6E64VwRNpFepNthIyk,2
16
16
  warpzone/function/__init__.py,sha256=rJOZBpWsUgjMc7YtXMJ1rLGm45KB1AhDJ_Y2ISiSISc,35
17
17
  warpzone/function/checks.py,sha256=B9YqThymf16ac_fVAYKilv20ru5v9nwXgHlbxYIaG98,1018
18
18
  warpzone/function/functionize.py,sha256=bSV0QvwKbD9Vo3a_8cc1rgV2rzTdMMvidinyXItBfvs,2128
19
- warpzone/function/integrations.py,sha256=Law-0TI_tbm8rq5XXuilDH69_0LhoqaZhDbTL498Qik,4016
20
- warpzone/function/monitor.py,sha256=xD13d4795a9qgGphOywFl4sOXRQjKypiL2ozQFOseqQ,1862
19
+ warpzone/function/integrations.py,sha256=sDt2BTx6a4mVc-33wTITP9XQVPustwj7rkX4urTyOqo,4018
20
+ warpzone/function/monitor.py,sha256=-WnbllgphJs1JRn_UxkLDHALM2UlrtEwy4ORh8eJ-xI,1660
21
21
  warpzone/function/process.py,sha256=nbUVywM8ChfUwuaqFisgaD98aNRgeZkK4g5sbtuBdRs,2339
22
22
  warpzone/function/processors/__init__.py,sha256=DhIdSWLBcIeSO8IJdxPqGIhgwwnkDN6_Xqwy93BCLeA,46
23
23
  warpzone/function/processors/dependencies.py,sha256=m17BwdKyQEvzCPxpQZpAW5l1uYRIHWmweDz3XJskmpA,1259
@@ -27,17 +27,17 @@ warpzone/function/signature.py,sha256=_ZFDp9wAsSXtha05V5WPNeohwJ3JFh_OADB05FaOQa
27
27
  warpzone/function/types.py,sha256=5m2hRrnLC3eqIlAH5-MM9_wKjMZ6lYawZtCOVStyFuY,724
28
28
  warpzone/healthchecks/__init__.py,sha256=9gc_Mt2szs8sDSwy0V4l3JZ6d9hX41xTpZCkDP2qsY4,2108
29
29
  warpzone/healthchecks/model.py,sha256=mM7DnrirLbUpBPPfi82MUPP654D0eOR2_F65TmzsPD0,1187
30
- warpzone/monitor/__init__.py,sha256=gXT2cxR4tlZER54zd7D49ZQBVyitLaqj13_cUoILuyM,109
31
- warpzone/monitor/logs.py,sha256=q3SUQCtG1ii0B9GkVs2l8kgZ5b5bI2qI6L0SoOW2QTY,3147
32
- warpzone/monitor/traces.py,sha256=Xc_po1LxJFy5jtNWxIVphIInl_d89Zw3Rb21PsdQhQA,4170
30
+ warpzone/monitor/__init__.py,sha256=ggI5fIUu-szgC44ICzuOmpYrIoVOKPbsMT3zza9ssD4,87
31
+ warpzone/monitor/logs.py,sha256=V1A2ImqbPo4c-hDr2qWAZlpr2muyVar30eI9mF2_rzE,986
32
+ warpzone/monitor/traces.py,sha256=SQckLC4LCEbgg79ZBnmYcm26IaxJfHDQ9GV7Huh2Uls,1393
33
33
  warpzone/servicebus/data/__init__.py,sha256=lnc0uiaGLF0qMi_rWhCpRSFvaj0CJEiMCAl6Yqn1ZiA,21
34
34
  warpzone/servicebus/data/client.py,sha256=zECS3JwedhYnDk8PntYgIYpBF_uu9YN38KzpPFK7CKs,6511
35
35
  warpzone/servicebus/events/__init__.py,sha256=lnc0uiaGLF0qMi_rWhCpRSFvaj0CJEiMCAl6Yqn1ZiA,21
36
- warpzone/servicebus/events/client.py,sha256=8v8XsF-2RwzKIi_93IzR_eR-BZTGXXHSuV4P9WCQ3_4,5581
36
+ warpzone/servicebus/events/client.py,sha256=jv7QXlTc6Ye2PDVWJC3H0zBFtYWlybBoRj2Ssu5-6rw,5477
37
37
  warpzone/servicebus/events/triggers.py,sha256=_QuPTBbje7LrBoz0qhhgrtDZOcE6x1S9GNu-WJUQ8bY,2626
38
38
  warpzone/tablestorage/db/__init__.py,sha256=lnc0uiaGLF0qMi_rWhCpRSFvaj0CJEiMCAl6Yqn1ZiA,21
39
39
  warpzone/tablestorage/db/base_client.py,sha256=ropKO6z0UXqBl38NuGYV4VZ_ZFm4w1d84ReOLYoBKLY,2376
40
- warpzone/tablestorage/db/client.py,sha256=-OchZI7x--Z9msNp912ggZ_sNGwNDXO-i7VGV6INSrg,6587
40
+ warpzone/tablestorage/db/client.py,sha256=w8p3ghtpFnbDQtqqAQTFnC346lLDjBKmi3rRjNgSrz0,7053
41
41
  warpzone/tablestorage/db/table_config.py,sha256=PC45dnr3vVMVr8ktu3GWoH8u3JKJaCRAvMCroUaC1NE,1336
42
42
  warpzone/tablestorage/tables/__init__.py,sha256=l_8wElG1oam39fmXqIXDAnCYqbKXEyX1G0cD6JCCv4s,78
43
43
  warpzone/tablestorage/tables/client.py,sha256=chvmTz5S8M1-IWYgfJHyTCwLZVsVzlchMuCYwHzQhCE,3636
@@ -52,6 +52,6 @@ warpzone/tools/copy.py,sha256=5fddotMZkXZO8avzUbGOhvs0cp8mce95pNpy0oPVjnQ,2596
52
52
  warpzone/transform/__init__.py,sha256=ruGa7tl-v4ndlWpULE1jSGU_a4_iRc3V6eyNr5xKP9E,27
53
53
  warpzone/transform/data.py,sha256=Abb8PcrgMbbNCJkkIUdtrTHdlY0OfXid387qw1nDpFY,2362
54
54
  warpzone/transform/schema.py,sha256=nbSQtDMvXkyqGKuwhuFCF0WsEDsaNyoPYpMKvbsKlv8,2423
55
- warpzone_sdk-15.0.0.dist-info/METADATA,sha256=nRDec8CvHZR0OJLG-LNJWCxQVPSqmLDfZuw_NlWkzGk,7279
56
- warpzone_sdk-15.0.0.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
57
- warpzone_sdk-15.0.0.dist-info/RECORD,,
55
+ warpzone_sdk-15.0.0.dev1.dist-info/METADATA,sha256=U7Mz9332k6VsVXQitNaurDeed-oD4QBFyEmPaMWJexM,7398
56
+ warpzone_sdk-15.0.0.dev1.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
57
+ warpzone_sdk-15.0.0.dev1.dist-info/RECORD,,