Skip to content

feat!: compatibility with pydantic v2 - #148

Merged
ddneilson merged 1 commit into
OpenJobDescription:mainlinefrom
ddneilson:pydantic_v2_compat
Oct 28, 2024
Merged

ddneilson merged 1 commit into
OpenJobDescription:mainlinefrom
ddneilson:pydantic_v2_compat

Conversation

@ddneilson

@ddneilson ddneilson commented Oct 28, 2024

Copy link
Copy Markdown
Contributor

Fixes: #107

What was the problem/requirement? (What/Why)

Pydantic v1 is EOL, but some users of this library still use it. Those users would like to update to pydantic v2, but this library needs to be compatible with it for that to happen.

What was the solution? (How)

Pydantic v2 contains the pydantic v1 in the pydantic.v1 namespace, and pydantic v1.10.17+ also contains this same namespace. So, step one to migrating to Pydantic v2 is to use the pydantic.v1 namespace throughout. Then, in future, the models can be updated to true Pydantic v2 when all consumers are ready for it.

What is the impact of this change?

Consumers of this library can now update to a newer Pydantic without this library blocking them.

How was this change tested?

The unit tests pass. I've run the tests both with pydantic 1.10.18 and pydantic 2.9.2.

Was this change documented?

  • Are relevant docstrings in the code base updated?

Is this a breaking change?

I'm marking this as a breaking change since the pydantic library update is not backwards compatible.

Does this change impact security?

No


By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Pydantic v1 is EOL, but some users of this library still use it. Pydantic v2 contains the pydantic v1
in the pydantic.v1 namespace, and pydantic v1.10.17+ also contains this same namespace. So, step one
to migrating to Pydantic v2 is to use the pydantic.v1 namespace throughout. Then, in future, the models
can be updated to true Pydantic v2 when all consumers are ready for it.

I'm marking this as a breaking change since the pydantic library update is not backwards compatible.

Signed-off-by: Daniel Neilson <53624638+ddneilson@users.noreply.github.com>
@sonarqubecloud

Copy link
Copy Markdown

@ddneilson
ddneilson marked this pull request as ready for review October 28, 2024 18:42
@ddneilson
ddneilson requested a review from a team as a code owner October 28, 2024 18:42
@ddneilson
ddneilson merged commit c359496 into OpenJobDescription:mainline Oct 28, 2024
@ddneilson
ddneilson deleted the pydantic_v2_compat branch October 28, 2024 19:14
leongdl added a commit to leongdl/openjd-model-for-python that referenced this pull request Jul 16, 2026
Update the inject-list comment for the wrap-hook template variables:
WrappedAction.Cancelation.Mode is string? — null (not the empty
string) when the wrapped action defines no <Cancelation> — matching
the spec change in openjd-specifications PR OpenJobDescription#148 (r3597560515). The
inject list itself is name-based, so no behavioral change.

Signed-off-by: David Leong <116610336+leongdl@users.noreply.github.com>
leongdl added a commit to leongdl/openjd-model-for-python that referenced this pull request Jul 17, 2026
…view feedback on openjd-specifications PR OpenJobDescription#148, a format-string cancelation mode is no longer restricted to a single whole-field "{{ ... }}" expression. Any format string is statically valid (gated on FEATURE_BUNDLE_1); the resolved value is checked against the two mode names at run time. Whole-field expressions keep their string? null semantics: a null result drops the cancelation object. Mirrors the matching change in openjd-rs.
leongdl added a commit to leongdl/openjd-model-for-python that referenced this pull request Jul 21, 2026
…view feedback on openjd-specifications PR OpenJobDescription#148, a format-string cancelation mode is no longer restricted to a single whole-field "{{ ... }}" expression. Any format string is statically valid (gated on FEATURE_BUNDLE_1); the resolved value is checked against the two mode names at run time. Whole-field expressions keep their string? null semantics: a null result drops the cancelation object. Mirrors the matching change in openjd-rs.
leongdl added a commit to leongdl/openjd-model-for-python that referenced this pull request Jul 22, 2026
…C 0008 follow-up (openjd-specifications OpenJobDescription#148): expose the wrapped action's cancelation description to wrap hooks so a wrapper (e.g. a container runtime) can honor the same cancelation contract the runtime would have enforced in the unwrapped case: - WrappedAction.Cancelation.Mode (string?): TERMINATE, NOTIFY_THEN_TERMINATE, or null when the wrapped action declares no <Cancelation> — deliberately distinct from an explicit TERMINATE. - WrappedAction.Cancelation.NotifyPeriodInSeconds (int?): the effective grace period, applying the Template Schemas 5.3.2 defaults when the field is omitted; null when not applicable. - Format-string cancelation modes (FEATURE_BUNDLE_1) follow normal format-string semantics: any format string is statically valid, the resolved value is checked against the two mode names at run time, and a whole-field expression resolving to null drops the cancelation object. Resolution is deferred to run time, mirroring openjd-rs.

Signed-off-by: David Leong <116610336+leongdl@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature request: Compatibility with pydantic 2.x

4 participants