|
8 | 8 |
|
9 | 9 |
|
10 | 10 | class PumCustomBaseModel(BaseModel): |
11 | | - model_config = ConfigDict(extra="forbid") |
| 11 | + model_config = ConfigDict(extra="forbid", populate_by_name=True) |
12 | 12 |
|
13 | 13 |
|
14 | 14 | class ParameterDefinitionModel(PumCustomBaseModel): |
@@ -54,17 +54,27 @@ def validate_args(self): |
54 | 54 | return self |
55 | 55 |
|
56 | 56 |
|
57 | | -class MigrationHooksModel(PumCustomBaseModel): |
| 57 | +class ApplicationHookModel(PumCustomBaseModel): |
58 | 58 | """ |
59 | | - MigrationHooksModel holds the configuration for migration hooks. |
| 59 | + ApplicationHookModel holds the configuration for application schema hooks. |
60 | 60 |
|
61 | 61 | Attributes: |
62 | | - pre: List of pre-migration hooks. |
63 | | - post: List of post-migration hooks. |
| 62 | + drop: Hooks to drop the application schema before applying migrations. |
| 63 | + create: Hooks to create the application schema after applying migrations. |
64 | 64 | """ |
65 | 65 |
|
66 | | - pre: Optional[List[HookModel]] = [] |
67 | | - post: Optional[List[HookModel]] = [] |
| 66 | + drop: Optional[List[HookModel]] = Field(default=[], alias="pre") |
| 67 | + create: Optional[List[HookModel]] = Field(default=[], alias="post") |
| 68 | + |
| 69 | + @model_validator(mode="before") |
| 70 | + def handle_legacy_names(cls, values): |
| 71 | + """Support legacy field names for backward compatibility.""" |
| 72 | + # If new names don't exist but old names do, use old names |
| 73 | + if "drop" not in values and "pre" in values: |
| 74 | + values["drop"] = values.pop("pre") |
| 75 | + if "create" not in values and "post" in values: |
| 76 | + values["create"] = values.pop("post") |
| 77 | + return values |
68 | 78 |
|
69 | 79 |
|
70 | 80 | class PumModel(PumCustomBaseModel): |
@@ -187,15 +197,25 @@ class ConfigModel(PumCustomBaseModel): |
187 | 197 | Attributes: |
188 | 198 | pum: The PUM (Project Update Manager) configuration. Defaults to a new PumModel instance. |
189 | 199 | parameters: List of parameter definitions. Defaults to an empty list. |
190 | | - migration_hooks: Configuration for migration hooks. Defaults to a new MigrationHooksModel instance. |
| 200 | + application_hooks: Configuration for application schema hooks. Defaults to a new ApplicationHookModel instance. |
191 | 201 | changelogs_directory: Directory path for changelogs. Defaults to "changelogs". |
192 | 202 | roles: List of role definitions. Defaults to None. |
193 | 203 | """ |
194 | 204 |
|
195 | 205 | pum: Optional[PumModel] = Field(default_factory=PumModel) |
196 | 206 | parameters: Optional[List[ParameterDefinitionModel]] = [] |
197 | | - migration_hooks: Optional[MigrationHooksModel] = Field(default_factory=MigrationHooksModel) |
| 207 | + application_hooks: Optional[ApplicationHookModel] = Field( |
| 208 | + default_factory=ApplicationHookModel, alias="migration_hooks" |
| 209 | + ) |
198 | 210 | changelogs_directory: Optional[str] = "changelogs" |
199 | 211 | roles: Optional[List[RoleModel]] = [] |
200 | 212 | demo_data: Optional[List[DemoDataModel]] = [] |
201 | 213 | dependencies: Optional[List[DependencyModel]] = [] |
| 214 | + |
| 215 | + @model_validator(mode="before") |
| 216 | + def handle_legacy_field_names(cls, values): |
| 217 | + """Support legacy field names for backward compatibility.""" |
| 218 | + # If new name doesn't exist but old name does, use old name |
| 219 | + if "application_hooks" not in values and "migration_hooks" in values: |
| 220 | + values["application_hooks"] = values.pop("migration_hooks") |
| 221 | + return values |
0 commit comments