great-expectations-cloud 20250902.0.dev1__py3-none-any.whl → 20260120.0.dev0__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.
Potentially problematic release.
This version of great-expectations-cloud might be problematic. Click here for more details.
- great_expectations_cloud/agent/actions/agent_action.py +3 -3
- great_expectations_cloud/agent/actions/draft_datasource_config_action.py +2 -2
- great_expectations_cloud/agent/actions/generate_data_quality_check_expectations_action.py +22 -14
- great_expectations_cloud/agent/actions/list_asset_names.py +4 -5
- great_expectations_cloud/agent/actions/run_checkpoint.py +64 -3
- great_expectations_cloud/agent/actions/run_metric_list_action.py +3 -3
- great_expectations_cloud/agent/actions/run_scheduled_checkpoint.py +28 -5
- great_expectations_cloud/agent/actions/run_window_checkpoint.py +2 -4
- great_expectations_cloud/agent/actions/utils.py +13 -4
- great_expectations_cloud/agent/agent.py +280 -43
- great_expectations_cloud/agent/event_handler.py +8 -7
- great_expectations_cloud/agent/message_service/asyncio_rabbit_mq_client.py +36 -8
- great_expectations_cloud/agent/message_service/subscriber.py +4 -0
- great_expectations_cloud/agent/models.py +23 -2
- {great_expectations_cloud-20250902.0.dev1.dist-info → great_expectations_cloud-20260120.0.dev0.dist-info}/METADATA +5 -5
- {great_expectations_cloud-20250902.0.dev1.dist-info → great_expectations_cloud-20260120.0.dev0.dist-info}/RECORD +19 -19
- {great_expectations_cloud-20250902.0.dev1.dist-info → great_expectations_cloud-20260120.0.dev0.dist-info}/WHEEL +1 -1
- {great_expectations_cloud-20250902.0.dev1.dist-info → great_expectations_cloud-20260120.0.dev0.dist-info}/entry_points.txt +0 -0
- {great_expectations_cloud-20250902.0.dev1.dist-info → great_expectations_cloud-20260120.0.dev0.dist-info/licenses}/LICENSE +0 -0
|
@@ -27,6 +27,7 @@ class OnMessagePayload:
|
|
|
27
27
|
correlation_id: str
|
|
28
28
|
delivery_tag: int
|
|
29
29
|
body: bytes
|
|
30
|
+
redelivered: bool = False # Set by RabbitMQ when message is redelivered
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
class OnMessageFn(Protocol):
|
|
@@ -174,8 +175,12 @@ class AsyncRabbitMQClient:
|
|
|
174
175
|
# param on_message is provided by the caller as an argument to AsyncRabbitMQClient.run
|
|
175
176
|
correlation_id = header_frame.correlation_id
|
|
176
177
|
delivery_tag = method_frame.delivery_tag
|
|
178
|
+
redelivered = method_frame.redelivered # RabbitMQ sets this flag on redelivery
|
|
177
179
|
payload = OnMessagePayload(
|
|
178
|
-
correlation_id=correlation_id,
|
|
180
|
+
correlation_id=correlation_id,
|
|
181
|
+
delivery_tag=delivery_tag,
|
|
182
|
+
body=body,
|
|
183
|
+
redelivered=redelivered,
|
|
179
184
|
)
|
|
180
185
|
return on_message(payload)
|
|
181
186
|
|
|
@@ -190,10 +195,13 @@ class AsyncRabbitMQClient:
|
|
|
190
195
|
def _on_consumer_canceled(self, method_frame: Basic.Cancel) -> None:
|
|
191
196
|
"""Callback invoked when the broker cancels the client's connection."""
|
|
192
197
|
if self._channel is not None:
|
|
193
|
-
LOGGER.
|
|
194
|
-
"
|
|
198
|
+
LOGGER.warning(
|
|
199
|
+
"rabbitmq.consumer.cancelled",
|
|
195
200
|
extra={
|
|
196
|
-
"
|
|
201
|
+
"consumer_tag": method_frame.consumer_tag
|
|
202
|
+
if hasattr(method_frame, "consumer_tag")
|
|
203
|
+
else None,
|
|
204
|
+
"was_consuming": self.was_consuming,
|
|
197
205
|
},
|
|
198
206
|
)
|
|
199
207
|
self._channel.close()
|
|
@@ -232,11 +240,31 @@ class AsyncRabbitMQClient:
|
|
|
232
240
|
self._reconnect()
|
|
233
241
|
self._log_pika_exception("Connection open failed", reason)
|
|
234
242
|
|
|
235
|
-
def _on_connection_closed(
|
|
236
|
-
self, connection: AsyncioConnection, _unused_reason: pika.Exception
|
|
237
|
-
) -> None:
|
|
243
|
+
def _on_connection_closed(self, connection: AsyncioConnection, reason: pika.Exception) -> None:
|
|
238
244
|
"""Callback invoked after the broker closes the connection"""
|
|
239
|
-
|
|
245
|
+
# Use DEBUG for expected closes, WARNING for unexpected
|
|
246
|
+
log_level = LOGGER.debug if self._closing else LOGGER.warning
|
|
247
|
+
if isinstance(reason, (ConnectionClosed, ChannelClosed)):
|
|
248
|
+
log_level(
|
|
249
|
+
"rabbitmq.connection.closed",
|
|
250
|
+
extra={
|
|
251
|
+
"reply_code": reason.reply_code,
|
|
252
|
+
"reply_text": reason.reply_text,
|
|
253
|
+
"was_consuming": self.was_consuming,
|
|
254
|
+
"is_closing": self._closing,
|
|
255
|
+
},
|
|
256
|
+
)
|
|
257
|
+
else:
|
|
258
|
+
log_level(
|
|
259
|
+
"rabbitmq.connection.closed",
|
|
260
|
+
extra={
|
|
261
|
+
"reply_code": 0, # Unknown/non-AMQP error
|
|
262
|
+
"reply_text": str(reason),
|
|
263
|
+
"reason_type": type(reason).__name__,
|
|
264
|
+
"was_consuming": self.was_consuming,
|
|
265
|
+
"is_closing": self._closing,
|
|
266
|
+
},
|
|
267
|
+
)
|
|
240
268
|
self._channel = None
|
|
241
269
|
self._is_unrecoverable = True
|
|
242
270
|
if self._closing:
|
|
@@ -37,6 +37,8 @@ class EventContext:
|
|
|
37
37
|
can be removed from the queue.
|
|
38
38
|
redeliver_message: async callable to signal that the broker should
|
|
39
39
|
try to deliver this message again.
|
|
40
|
+
redelivered: True if RabbitMQ is redelivering this message (another
|
|
41
|
+
consumer failed to acknowledge it).
|
|
40
42
|
"""
|
|
41
43
|
|
|
42
44
|
event: Event
|
|
@@ -44,6 +46,7 @@ class EventContext:
|
|
|
44
46
|
processed_successfully: Callable[[], None]
|
|
45
47
|
processed_with_failures: Callable[[], None]
|
|
46
48
|
redeliver_message: Callable[[], Coroutine[OnMessageCallback, None, None]]
|
|
49
|
+
redelivered: bool = False
|
|
47
50
|
|
|
48
51
|
|
|
49
52
|
class OnMessageCallback(Protocol):
|
|
@@ -142,6 +145,7 @@ class Subscriber:
|
|
|
142
145
|
processed_successfully=ack_callback,
|
|
143
146
|
processed_with_failures=nack_callback,
|
|
144
147
|
redeliver_message=redeliver_message,
|
|
148
|
+
redelivered=payload.redelivered,
|
|
145
149
|
)
|
|
146
150
|
|
|
147
151
|
return on_message(event_context)
|
|
@@ -24,6 +24,18 @@ def all_subclasses(cls: type) -> list[type]:
|
|
|
24
24
|
return all_sub_cls
|
|
25
25
|
|
|
26
26
|
|
|
27
|
+
class DomainContext(BaseModel):
|
|
28
|
+
"""
|
|
29
|
+
Encapsulates domain-related context information.
|
|
30
|
+
|
|
31
|
+
This dataclass consolidates organization_id and workspace_id to reduce
|
|
32
|
+
parameter proliferation and improve code maintainability.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
organization_id: UUID
|
|
36
|
+
workspace_id: UUID
|
|
37
|
+
|
|
38
|
+
|
|
27
39
|
class AgentBaseExtraForbid(BaseModel):
|
|
28
40
|
class Config:
|
|
29
41
|
# 2024-03-04: ZEL-501 Strictly enforce models for handling outdated APIs
|
|
@@ -39,6 +51,7 @@ class AgentBaseExtraIgnore(BaseModel):
|
|
|
39
51
|
class EventBase(AgentBaseExtraIgnore):
|
|
40
52
|
type: str
|
|
41
53
|
organization_id: Optional[UUID] = None # noqa: UP045
|
|
54
|
+
workspace_id: UUID
|
|
42
55
|
|
|
43
56
|
|
|
44
57
|
class ScheduledEventBase(EventBase):
|
|
@@ -276,15 +289,23 @@ class CreateScheduledJobAndSetJobStartedRequest(AgentBaseExtraForbid):
|
|
|
276
289
|
data: CreateScheduledJobAndSetJobStarted
|
|
277
290
|
|
|
278
291
|
|
|
279
|
-
def build_failed_job_completed_status(
|
|
292
|
+
def build_failed_job_completed_status(
|
|
293
|
+
error: BaseException,
|
|
294
|
+
processed_by: Literal["agent", "runner"] | None = None,
|
|
295
|
+
) -> JobCompleted:
|
|
280
296
|
if isinstance(error, GXCoreError):
|
|
281
297
|
status = JobCompleted(
|
|
282
298
|
success=False,
|
|
283
299
|
error_stack_trace=str(error),
|
|
284
300
|
error_code=error.error_code,
|
|
285
301
|
error_params=error.get_error_params(),
|
|
302
|
+
processed_by=processed_by,
|
|
286
303
|
)
|
|
287
304
|
else:
|
|
288
|
-
status = JobCompleted(
|
|
305
|
+
status = JobCompleted(
|
|
306
|
+
success=False,
|
|
307
|
+
error_stack_trace=str(error),
|
|
308
|
+
processed_by=processed_by,
|
|
309
|
+
)
|
|
289
310
|
|
|
290
311
|
return status
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: great_expectations_cloud
|
|
3
|
-
Version:
|
|
3
|
+
Version: 20260120.0.dev0
|
|
4
4
|
Summary: Great Expectations Cloud
|
|
5
5
|
License: Proprietary
|
|
6
|
+
License-File: LICENSE
|
|
6
7
|
Author: The Great Expectations Team
|
|
7
8
|
Author-email: team@greatexpectations.io
|
|
8
|
-
Requires-Python: >=3.11,<3.12
|
|
9
|
+
Requires-Python: >=3.11.4,<3.12
|
|
9
10
|
Classifier: Development Status :: 3 - Alpha
|
|
10
11
|
Classifier: Intended Audience :: Developers
|
|
11
12
|
Classifier: Intended Audience :: Science/Research
|
|
12
13
|
Classifier: License :: Other/Proprietary License
|
|
13
14
|
Classifier: Programming Language :: Python :: 3
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
15
15
|
Classifier: Topic :: Scientific/Engineering
|
|
16
16
|
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
17
17
|
Classifier: Topic :: Software Development :: Quality Assurance
|
|
18
18
|
Classifier: Topic :: Software Development :: Testing
|
|
19
|
-
Requires-Dist: great-expectations[databricks,gx-redshift,mssql,postgresql,snowflake] (==1.
|
|
19
|
+
Requires-Dist: great-expectations[databricks,gx-redshift,mssql,postgresql,snowflake,trino] (==1.11.1)
|
|
20
20
|
Requires-Dist: orjson (>=3.9.7,<4.0.0,!=3.9.10)
|
|
21
21
|
Requires-Dist: packaging (>=21.3,<26.0)
|
|
22
22
|
Requires-Dist: pika (>=1.3.1,<2.0.0)
|
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
great_expectations_cloud/__init__.py,sha256=1mr5RDyA2N38eynvEfVbuYIbjFadeJfqZ-X9CrqYiVo,150
|
|
2
2
|
great_expectations_cloud/agent/__init__.py,sha256=FqDFYbGefmNhwlvJwJbNovkwzny6mwaYH5LtTi6VlSU,464
|
|
3
3
|
great_expectations_cloud/agent/actions/__init__.py,sha256=TYPe2j8EgaziXXgSLEdgjnbHKL56O6cQL1kjPnGbRFI,949
|
|
4
|
-
great_expectations_cloud/agent/actions/agent_action.py,sha256=
|
|
5
|
-
great_expectations_cloud/agent/actions/draft_datasource_config_action.py,sha256=
|
|
6
|
-
great_expectations_cloud/agent/actions/generate_data_quality_check_expectations_action.py,sha256=
|
|
7
|
-
great_expectations_cloud/agent/actions/list_asset_names.py,sha256=
|
|
8
|
-
great_expectations_cloud/agent/actions/run_checkpoint.py,sha256=
|
|
9
|
-
great_expectations_cloud/agent/actions/run_metric_list_action.py,sha256=
|
|
10
|
-
great_expectations_cloud/agent/actions/run_scheduled_checkpoint.py,sha256=
|
|
11
|
-
great_expectations_cloud/agent/actions/run_window_checkpoint.py,sha256=
|
|
4
|
+
great_expectations_cloud/agent/actions/agent_action.py,sha256=F9zOgVmNJ_V2RhRbDXNMjd46-QVNFN8Lp_bmPvh5cwU,1189
|
|
5
|
+
great_expectations_cloud/agent/actions/draft_datasource_config_action.py,sha256=NVN2GBSty-XvCW7pHDkLImHd3V0iJzpUNIh8rNGDuzs,5241
|
|
6
|
+
great_expectations_cloud/agent/actions/generate_data_quality_check_expectations_action.py,sha256=dhiy_lkcePDy45fEX0uhk-m89_aYKtV6P5jfd-Dcax8,23611
|
|
7
|
+
great_expectations_cloud/agent/actions/list_asset_names.py,sha256=pOL5ip8ZZJbZhDNSp44rjYkx93rKdf3U6f4fY-JLhvg,2576
|
|
8
|
+
great_expectations_cloud/agent/actions/run_checkpoint.py,sha256=xlDYX6BHvHr3loz74hu4ARq5VStJ7-QYf80GPi-PuTY,5697
|
|
9
|
+
great_expectations_cloud/agent/actions/run_metric_list_action.py,sha256=69nyR0vXjz_lKAHYczuEMQtbNIv0lf-DMiOBXmkwpuQ,3237
|
|
10
|
+
great_expectations_cloud/agent/actions/run_scheduled_checkpoint.py,sha256=33lp6F_J1asgBmaHoqLLDL8wRnBw9MEZlQ3bosGQkwk,3425
|
|
11
|
+
great_expectations_cloud/agent/actions/run_window_checkpoint.py,sha256=MCMbgY3dNUx546sNpXg5p3rCWNzDa6EQOUt20Nr5udo,2317
|
|
12
12
|
great_expectations_cloud/agent/actions/unknown.py,sha256=mtWw9tDZqGZSiUWj7PtIlLFJ1dM-7AHBX3SO16-u2EM,739
|
|
13
|
-
great_expectations_cloud/agent/actions/utils.py,sha256=
|
|
14
|
-
great_expectations_cloud/agent/agent.py,sha256=
|
|
13
|
+
great_expectations_cloud/agent/actions/utils.py,sha256=0lzeASN1TYWJ35-H-sCRkcPMHzWU05SzKIyTv0CzvA8,1665
|
|
14
|
+
great_expectations_cloud/agent/agent.py,sha256=JdyWvLdkzMq_kJgLsuhCDZz7NIOjBQZxaUv_UiwiEwg,40826
|
|
15
15
|
great_expectations_cloud/agent/agent_warnings.py,sha256=9-xl_AI2V9Py4o7KzFOQjG3lYx-vZ36fq4w2iiPNiUw,362
|
|
16
16
|
great_expectations_cloud/agent/cli.py,sha256=a_HmPxBMlVD59BEmkZnlbOOAFlezVMx9djZ2XIW-3W0,2885
|
|
17
17
|
great_expectations_cloud/agent/config.py,sha256=c1BOr-TrxZnciWNRuu4atGtfRh-XSmwIS0osDCzQa04,1348
|
|
18
18
|
great_expectations_cloud/agent/constants.py,sha256=SAEtcOwI-SxZiZSVoCFfEC5oCtYdgmyUmK7for_zg_Q,246
|
|
19
|
-
great_expectations_cloud/agent/event_handler.py,sha256=
|
|
19
|
+
great_expectations_cloud/agent/event_handler.py,sha256=wcvAM0i6pnIsWlYstnZ2ThpByJYCyKrRmh0solC02bk,6091
|
|
20
20
|
great_expectations_cloud/agent/exceptions.py,sha256=XIDBVSmBfFpVQA5i9rZqEtORIdi5E4_lwup0jP90TUk,1506
|
|
21
21
|
great_expectations_cloud/agent/message_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
-
great_expectations_cloud/agent/message_service/asyncio_rabbit_mq_client.py,sha256=
|
|
23
|
-
great_expectations_cloud/agent/message_service/subscriber.py,sha256=
|
|
24
|
-
great_expectations_cloud/agent/models.py,sha256=
|
|
22
|
+
great_expectations_cloud/agent/message_service/asyncio_rabbit_mq_client.py,sha256=z1iYArWz5qhtsEYSK6Qd2LbiwZsEJOzOvunvtHVRuBo,13630
|
|
23
|
+
great_expectations_cloud/agent/message_service/subscriber.py,sha256=ZEwwLaQe-yypYJWMkpTvRqEgzH7FbYH0-ean8LK1Qt8,6174
|
|
24
|
+
great_expectations_cloud/agent/models.py,sha256=PKPxOXApET47s5Q-c9OqolgZoYghoULuvMFcCsl1soI,10478
|
|
25
25
|
great_expectations_cloud/agent/run.py,sha256=V33RLoB1PFmJ0h0RfHG4SB5lN_Za8tW2Dua6GUpN9yY,639
|
|
26
26
|
great_expectations_cloud/agent/utils.py,sha256=3OvdcXeK1gk2oJgqG4jPvBRwlMCn8LioULW3YgRtj98,2950
|
|
27
27
|
great_expectations_cloud/logging/README.md,sha256=vbwU689x8SkGjzoBYQzZOzAvh28fR0RCa1XY5WD-Dgs,1762
|
|
28
28
|
great_expectations_cloud/logging/logging_cfg.py,sha256=W6mlm4_Z2bjzM5TuKmFg_WZor2XoJm4DAoLGaf2O__I,6579
|
|
29
29
|
great_expectations_cloud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
-
great_expectations_cloud-
|
|
31
|
-
great_expectations_cloud-
|
|
32
|
-
great_expectations_cloud-
|
|
33
|
-
great_expectations_cloud-
|
|
34
|
-
great_expectations_cloud-
|
|
30
|
+
great_expectations_cloud-20260120.0.dev0.dist-info/METADATA,sha256=UzLgYArcgE5nmCdO27EcqNQVSf7hClmv5Ol0xanWx1c,12331
|
|
31
|
+
great_expectations_cloud-20260120.0.dev0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
32
|
+
great_expectations_cloud-20260120.0.dev0.dist-info/entry_points.txt,sha256=ofJgdeS2gSzxXLyCAjfNhIaN1wmSyR7EAMs5qhVaXE4,68
|
|
33
|
+
great_expectations_cloud-20260120.0.dev0.dist-info/licenses/LICENSE,sha256=_JJnoX6N_OkrAwlCRizCwil0tIjDAy2TG3GiJ50sM6k,2084
|
|
34
|
+
great_expectations_cloud-20260120.0.dev0.dist-info/RECORD,,
|
|
File without changes
|