Skip to content

Commit 318f43b

Browse files
committed
type alias, remove optionals, rename to user_provided_flags
1 parent f8c910c commit 318f43b

4 files changed

Lines changed: 33 additions & 73 deletions

File tree

sqlmesh/core/context.py

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
NotificationTargetManager,
8989
)
9090
from sqlmesh.core.plan import Plan, PlanBuilder, SnapshotIntervals
91+
from sqlmesh.core.plan.definition import UserProvidedFlags
9192
from sqlmesh.core.reference import ReferenceGraph
9293
from sqlmesh.core.scheduler import Scheduler, CompletionStatus
9394
from sqlmesh.core.schema_loader import create_external_models_file
@@ -1335,47 +1336,33 @@ def plan_builder(
13351336
Returns:
13361337
The plan builder.
13371338
"""
1338-
kwargs: t.Dict[
1339-
str,
1340-
t.Union[
1341-
t.Optional[TimeLike],
1342-
t.Optional[str],
1343-
t.Optional[bool],
1344-
t.Optional[t.Iterable[str]],
1345-
t.Optional[t.Collection[str]],
1346-
],
1347-
] = {
1339+
kwargs: t.Dict[str, t.Optional[UserProvidedFlags]] = {
13481340
"start": start,
13491341
"end": end,
13501342
"execution_time": execution_time,
13511343
"create_from": create_from,
13521344
"skip_tests": skip_tests,
1353-
"restate_models": restate_models,
1345+
"restate_models": list(restate_models) if restate_models else None,
13541346
"no_gaps": no_gaps,
13551347
"skip_backfill": skip_backfill,
13561348
"empty_backfill": empty_backfill,
13571349
"forward_only": forward_only,
1358-
"allow_destructive_models": allow_destructive_models,
1350+
"allow_destructive_models": list(allow_destructive_models)
1351+
if allow_destructive_models
1352+
else None,
13591353
"no_auto_categorization": no_auto_categorization,
13601354
"effective_from": effective_from,
13611355
"include_unmodified": include_unmodified,
1362-
"select_models": select_models,
1363-
"backfill_models": backfill_models,
1356+
"select_models": list(select_models) if select_models else None,
1357+
"backfill_models": list(backfill_models) if backfill_models else None,
13641358
"enable_preview": enable_preview,
13651359
"run": run,
13661360
"diff_rendered": diff_rendered,
13671361
"skip_linter": skip_linter,
13681362
}
1369-
user_defined_flags: t.Dict[
1370-
str,
1371-
t.Union[
1372-
t.Optional[TimeLike],
1373-
t.Optional[str],
1374-
t.Optional[bool],
1375-
t.Optional[t.Iterable[str]],
1376-
t.Optional[t.Collection[str]],
1377-
],
1378-
] = {k: v for k, v in kwargs.items() if v is not None}
1363+
user_provided_flags: t.Dict[str, UserProvidedFlags] = {
1364+
k: v for k, v in kwargs.items() if v is not None
1365+
}
13791366

13801367
skip_tests = skip_tests or False
13811368
no_gaps = no_gaps or False
@@ -1519,7 +1506,7 @@ def plan_builder(
15191506
engine_schema_differ=self.engine_adapter.SCHEMA_DIFFER,
15201507
interval_end_per_model=max_interval_end_per_model,
15211508
console=self.console,
1522-
user_defined_flags=user_defined_flags,
1509+
user_provided_flags=user_provided_flags,
15231510
)
15241511

15251512
def apply(

sqlmesh/core/plan/builder.py

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@
1515
)
1616
from sqlmesh.core.context_diff import ContextDiff
1717
from sqlmesh.core.environment import EnvironmentNamingInfo
18-
from sqlmesh.core.plan.definition import Plan, SnapshotMapping, earliest_interval_start
18+
from sqlmesh.core.plan.definition import (
19+
Plan,
20+
SnapshotMapping,
21+
UserProvidedFlags,
22+
earliest_interval_start,
23+
)
1924
from sqlmesh.core.schema_diff import SchemaDiffer, has_drop_alteration, get_dropped_column_names
2025
from sqlmesh.core.snapshot import (
2126
DeployabilityIndex,
@@ -107,18 +112,7 @@ def __init__(
107112
ensure_finalized_snapshots: bool = False,
108113
interval_end_per_model: t.Optional[t.Dict[str, int]] = None,
109114
console: t.Optional[PlanBuilderConsole] = None,
110-
user_defined_flags: t.Optional[
111-
t.Dict[
112-
str,
113-
t.Union[
114-
t.Optional[TimeLike],
115-
t.Optional[str],
116-
t.Optional[bool],
117-
t.Optional[t.Iterable[str]],
118-
t.Optional[t.Collection[str]],
119-
],
120-
]
121-
] = None,
115+
user_provided_flags: t.Optional[t.Dict[str, UserProvidedFlags]] = None,
122116
):
123117
self._context_diff = context_diff
124118
self._no_gaps = no_gaps
@@ -146,7 +140,7 @@ def __init__(
146140
self._engine_schema_differ = engine_schema_differ
147141
self._console = console or get_console()
148142
self._choices: t.Dict[SnapshotId, SnapshotChangeCategory] = {}
149-
self._user_defined_flags = user_defined_flags
143+
self._user_provided_flags = user_provided_flags
150144

151145
self._start = start
152146
if not self._start and (
@@ -293,7 +287,7 @@ def build(self) -> Plan:
293287
execution_time=self._execution_time,
294288
end_bounded=self._end_bounded,
295289
ensure_finalized_snapshots=self._ensure_finalized_snapshots,
296-
user_defined_flags=self._user_defined_flags,
290+
user_provided_flags=self._user_provided_flags,
297291
)
298292
self._latest_plan = plan
299293
return plan

sqlmesh/core/plan/definition.py

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from sqlmesh.utils.pydantic import PydanticModel
2929

3030
SnapshotMapping = t.Dict[SnapshotId, t.Set[SnapshotId]]
31+
UserProvidedFlags = t.Union[TimeLike, str, bool, t.List[str]]
3132

3233

3334
class Plan(PydanticModel, frozen=True):
@@ -63,18 +64,7 @@ class Plan(PydanticModel, frozen=True):
6364
effective_from: t.Optional[TimeLike] = None
6465
execution_time: t.Optional[TimeLike] = None
6566

66-
user_defined_flags: t.Optional[
67-
t.Dict[
68-
str,
69-
t.Union[
70-
t.Optional[TimeLike],
71-
t.Optional[str],
72-
t.Optional[bool],
73-
t.Optional[t.Iterable[str]],
74-
t.Optional[t.Collection[str]],
75-
],
76-
]
77-
] = None
67+
user_provided_flags: t.Optional[t.Dict[str, UserProvidedFlags]] = None
7868

7969
@cached_property
8070
def start(self) -> TimeLike:
@@ -275,7 +265,7 @@ def to_evaluatable(self) -> EvaluatablePlan:
275265
if s.is_model and s.model.disable_restatement
276266
},
277267
environment_statements=self.context_diff.environment_statements,
278-
user_defined_flags=self.user_defined_flags,
268+
user_provided_flags=self.user_provided_flags,
279269
)
280270

281271
@cached_property
@@ -308,18 +298,7 @@ class EvaluatablePlan(PydanticModel):
308298
execution_time: t.Optional[TimeLike] = None
309299
disabled_restatement_models: t.Set[str]
310300
environment_statements: t.Optional[t.List[EnvironmentStatements]] = None
311-
user_defined_flags: t.Optional[
312-
t.Dict[
313-
str,
314-
t.Union[
315-
t.Optional[TimeLike],
316-
t.Optional[str],
317-
t.Optional[bool],
318-
t.Optional[t.Iterable[str]],
319-
t.Optional[t.Collection[str]],
320-
],
321-
]
322-
] = None
301+
user_provided_flags: t.Optional[t.Dict[str, UserProvidedFlags]] = None
323302

324303
def is_selected_for_backfill(self, model_fqn: str) -> bool:
325304
return self.models_to_backfill is None or model_fqn in self.models_to_backfill

tests/core/test_plan.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3107,20 +3107,20 @@ def test_set_choice_for_forward_only_model(make_snapshot):
31073107
)
31083108

31093109

3110-
def test_user_defined_flags(sushi_context: Context):
3110+
def test_user_provided_flags(sushi_context: Context):
31113111
expected_flags = {
31123112
"run": True,
31133113
"execution_time": "2025-01-01",
31143114
}
31153115
plan_a = sushi_context.plan(no_prompts=True, run=True, execution_time="2025-01-01")
3116-
assert plan_a.user_defined_flags == expected_flags
3116+
assert plan_a.user_provided_flags == expected_flags
31173117
evaluatable_plan = plan_a.to_evaluatable()
3118-
assert evaluatable_plan.user_defined_flags == expected_flags
3118+
assert evaluatable_plan.user_provided_flags == expected_flags
31193119

31203120
plan_b = sushi_context.plan()
3121-
assert plan_b.user_defined_flags == {}
3121+
assert plan_b.user_provided_flags == {}
31223122
evaluatable_plan_b = plan_b.to_evaluatable()
3123-
assert evaluatable_plan_b.user_defined_flags == {}
3123+
assert evaluatable_plan_b.user_provided_flags == {}
31243124

31253125
context_diff = ContextDiff(
31263126
environment="test_environment",
@@ -3144,11 +3144,11 @@ def test_user_defined_flags(sushi_context: Context):
31443144
context_diff,
31453145
DuckDBEngineAdapter.SCHEMA_DIFFER,
31463146
forward_only=True,
3147-
user_defined_flags={"forward_only": True},
3147+
user_provided_flags={"forward_only": True},
31483148
).build()
3149-
assert plan_builder.user_defined_flags == {"forward_only": True}
3149+
assert plan_builder.user_provided_flags == {"forward_only": True}
31503150
plan_builder = PlanBuilder(
31513151
context_diff,
31523152
DuckDBEngineAdapter.SCHEMA_DIFFER,
31533153
).build()
3154-
assert plan_builder.user_defined_flags == None
3154+
assert plan_builder.user_provided_flags == None

0 commit comments

Comments
 (0)