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.

Files changed (19) hide show
  1. great_expectations_cloud/agent/actions/agent_action.py +3 -3
  2. great_expectations_cloud/agent/actions/draft_datasource_config_action.py +2 -2
  3. great_expectations_cloud/agent/actions/generate_data_quality_check_expectations_action.py +22 -14
  4. great_expectations_cloud/agent/actions/list_asset_names.py +4 -5
  5. great_expectations_cloud/agent/actions/run_checkpoint.py +64 -3
  6. great_expectations_cloud/agent/actions/run_metric_list_action.py +3 -3
  7. great_expectations_cloud/agent/actions/run_scheduled_checkpoint.py +28 -5
  8. great_expectations_cloud/agent/actions/run_window_checkpoint.py +2 -4
  9. great_expectations_cloud/agent/actions/utils.py +13 -4
  10. great_expectations_cloud/agent/agent.py +280 -43
  11. great_expectations_cloud/agent/event_handler.py +8 -7
  12. great_expectations_cloud/agent/message_service/asyncio_rabbit_mq_client.py +36 -8
  13. great_expectations_cloud/agent/message_service/subscriber.py +4 -0
  14. great_expectations_cloud/agent/models.py +23 -2
  15. {great_expectations_cloud-20250902.0.dev1.dist-info → great_expectations_cloud-20260120.0.dev0.dist-info}/METADATA +5 -5
  16. {great_expectations_cloud-20250902.0.dev1.dist-info → great_expectations_cloud-20260120.0.dev0.dist-info}/RECORD +19 -19
  17. {great_expectations_cloud-20250902.0.dev1.dist-info → great_expectations_cloud-20260120.0.dev0.dist-info}/WHEEL +1 -1
  18. {great_expectations_cloud-20250902.0.dev1.dist-info → great_expectations_cloud-20260120.0.dev0.dist-info}/entry_points.txt +0 -0
  19. {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, delivery_tag=delivery_tag, body=body
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.info(
194
- "Consumer was cancelled remotely, shutting down",
198
+ LOGGER.warning(
199
+ "rabbitmq.consumer.cancelled",
195
200
  extra={
196
- "method_frame": method_frame,
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
- LOGGER.debug("Connection to RabbitMQ has been closed")
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(error: BaseException) -> JobCompleted:
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(success=False, error_stack_trace=str(error))
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.3
1
+ Metadata-Version: 2.4
2
2
  Name: great_expectations_cloud
3
- Version: 20250902.0.dev1
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.5.10)
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=mGAovvT4CDaQlZaeNcz5tqfMIt6cul2anzxPwFrSxeA,1186
5
- great_expectations_cloud/agent/actions/draft_datasource_config_action.py,sha256=_v_yEPXZ3k8-lvdMCEPtrf6kegVYxnBo9UC0WoLaLwM,5117
6
- great_expectations_cloud/agent/actions/generate_data_quality_check_expectations_action.py,sha256=Ky1fqCspzhRRbCSUgWqYiLnL6iRDMDfYvgn1ZzfqzM0,23196
7
- great_expectations_cloud/agent/actions/list_asset_names.py,sha256=bDAYQtDbgDAOg8iu7HyGSTmBduhup7lLN0vGxoJZqN4,2510
8
- great_expectations_cloud/agent/actions/run_checkpoint.py,sha256=N2d07JDCG06kMve7yjPZQFlaGKoJw5dCbpKuBWw6Ssg,3751
9
- great_expectations_cloud/agent/actions/run_metric_list_action.py,sha256=tW64pNYJElkUmcd9baKllTSyR-NYyU-40QvMwSwwLqQ,3234
10
- great_expectations_cloud/agent/actions/run_scheduled_checkpoint.py,sha256=XMvv59izhzjSuw2YF7mlyNkeUQ3hxXj6G-ldAeSfl-s,2403
11
- great_expectations_cloud/agent/actions/run_window_checkpoint.py,sha256=khFmTSZ6W-MrInswgEHGrQAzVt-aelycurAMPbcLcLU,2264
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=DuUy6Ntsin0RIdgG2n1K85WJUATKHsqcCgtXKjr7scQ,1269
14
- great_expectations_cloud/agent/agent.py,sha256=Gd8gaamnh7Gw4uiW2-sVxbMaWdeNibHQR6LDryI_uVY,29761
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=kePpZ4EMIY0YWKeYH4W7lKY8C8OeER_Dkhwwadf3nTc,6069
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=B2EwgG_Qdm1s_xkxbGPQxdRBkDSuhkKyT6rGFpXuqQ0,12391
23
- great_expectations_cloud/agent/message_service/subscriber.py,sha256=K8szy9uM1MUBkMaMZt9o5ExnjqEn1hw6zYaH7pQkjoM,5975
24
- great_expectations_cloud/agent/models.py,sha256=yZEir-ZShLbyJ8DZxMYNAZmSzbpOSH5wGRKyPo1LcJU,9984
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-20250902.0.dev1.dist-info/LICENSE,sha256=_JJnoX6N_OkrAwlCRizCwil0tIjDAy2TG3GiJ50sM6k,2084
31
- great_expectations_cloud-20250902.0.dev1.dist-info/METADATA,sha256=lfPWV6KQi7QxYYifj3n0BkFeEKSxrummmkMp0Uq48_Y,12352
32
- great_expectations_cloud-20250902.0.dev1.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
33
- great_expectations_cloud-20250902.0.dev1.dist-info/entry_points.txt,sha256=ofJgdeS2gSzxXLyCAjfNhIaN1wmSyR7EAMs5qhVaXE4,68
34
- great_expectations_cloud-20250902.0.dev1.dist-info/RECORD,,
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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.1
2
+ Generator: poetry-core 2.2.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any