|
5 | 5 | import unittest
|
6 | 6 | import logging
|
7 | 7 |
|
| 8 | +from sqlglot.expressions import Alter |
8 | 9 | from sqlmesh.core.console import Console
|
9 | 10 | from sqlmesh.core.plan import EvaluatablePlan
|
10 | 11 | from sqlmesh.core.context_diff import ContextDiff
|
|
16 | 17 | SnapshotChangeCategory,
|
17 | 18 | SnapshotInfoLike,
|
18 | 19 | )
|
| 20 | +from sqlmesh.utils.concurrency import NodeExecutionFailedError |
19 | 21 |
|
20 | 22 | logger = logging.getLogger(__name__)
|
21 | 23 |
|
@@ -193,11 +195,35 @@ class LogError:
|
193 | 195 | message: str
|
194 | 196 |
|
195 | 197 |
|
| 198 | +@dataclass |
| 199 | +class LogWarning: |
| 200 | + message: str |
| 201 | + |
| 202 | + |
196 | 203 | @dataclass
|
197 | 204 | class LogSuccess:
|
198 | 205 | message: str
|
199 | 206 |
|
200 | 207 |
|
| 208 | +@dataclass |
| 209 | +class LogFailedModels: |
| 210 | + errors: t.List[NodeExecutionFailedError] |
| 211 | + |
| 212 | + |
| 213 | +@dataclass |
| 214 | +class LogSkippedModels: |
| 215 | + snapshot_names: t.Set[str] |
| 216 | + |
| 217 | + |
| 218 | +@dataclass |
| 219 | +class LogDestructiveChange: |
| 220 | + snapshot_name: str |
| 221 | + dropped_column_names: t.List[str] |
| 222 | + alter_expressions: t.List[Alter] |
| 223 | + dialect: str |
| 224 | + error: bool = True |
| 225 | + |
| 226 | + |
201 | 227 | @dataclass
|
202 | 228 | class LoadingStart:
|
203 | 229 | message: t.Optional[str] = None
|
@@ -254,7 +280,11 @@ class ConsoleException:
|
254 | 280 | ShowSQL,
|
255 | 281 | LogStatusUpdate,
|
256 | 282 | LogError,
|
| 283 | + LogWarning, |
257 | 284 | LogSuccess,
|
| 285 | + LogFailedModels, |
| 286 | + LogSkippedModels, |
| 287 | + LogDestructiveChange, |
258 | 288 | LoadingStart,
|
259 | 289 | LoadingStop,
|
260 | 290 | ShowSchemaDiff,
|
@@ -444,9 +474,32 @@ def log_status_update(self, message: str) -> None:
|
444 | 474 | def log_error(self, message: str) -> None:
|
445 | 475 | self.publish(LogError(message))
|
446 | 476 |
|
| 477 | + def log_warning(self, message): |
| 478 | + self.publish(LogWarning(message)) |
| 479 | + |
447 | 480 | def log_success(self, message: str) -> None:
|
448 | 481 | self.publish(LogSuccess(message))
|
449 | 482 |
|
| 483 | + def log_failed_models(self, errors): |
| 484 | + self.publish(LogFailedModels(errors)) |
| 485 | + |
| 486 | + def log_skipped_models(self, snapshot_names): |
| 487 | + self.publish(LogSkippedModels(snapshot_names)) |
| 488 | + |
| 489 | + def log_destructive_change( |
| 490 | + self, |
| 491 | + snapshot_name, |
| 492 | + dropped_column_names, |
| 493 | + alter_expressions, |
| 494 | + dialect, |
| 495 | + error=True, |
| 496 | + ): |
| 497 | + self.publish( |
| 498 | + LogDestructiveChange( |
| 499 | + snapshot_name, dropped_column_names, alter_expressions, dialect, error |
| 500 | + ) |
| 501 | + ) |
| 502 | + |
450 | 503 | def loading_start(self, message: t.Optional[str] = None) -> uuid.UUID:
|
451 | 504 | event_id = uuid.uuid4()
|
452 | 505 | self.publish(LoadingStart(message, event_id))
|
|
0 commit comments