Changelog

[0.6.12] - 2026-04-13

Added

  • Compatibility with Pydantic 2.13.

[0.6.11] - 2026-04-10

Added

  • add uniqueness, returned and case_exact filters to iter_paths

[0.6.10] - 2026-04-07

Fixed

  • replace copies readOnly and preserves immutable fields

[0.6.9] - 2026-04-07

Added

  • *RequestContext and *ResponseContext generic type aliases that wrap SCIMValidator and SCIMSerializer for each SCIM context (e.g. CreationRequestContext[User], CreationResponseContext[User]).

[0.6.8] - 2026-04-03

Added

Deprecated

  • The original parameter of model_validate() is deprecated. Use replace() on the validated instance instead. Will be removed in 0.8.0.

Fixed

  • PATCH operations on immutable fields are now validated at runtime per RFC 7644 §3.5.2: add is only allowed when the field has no previous value, replace is only allowed with the same value, and remove is only allowed on unset fields.

[0.6.7] - 2026-04-02

Added

[0.6.6] - 2026-03-12

Fixed

  • Fix ListResponse.totalResults validation when resources is none. #133

[0.6.5] - 2026-03-10

Fixed

  • Fix extension serialization crash when an extension is declared but not populated on a resource serialized outside of SCIM context (e.g. FastAPI response_model). #131

[0.6.4] - 2026-02-05

Added

  • SCIMException now accepts an optional scim_ctx parameter to indicate the SCIM context in which the exception occurred.

[0.6.3] - 2026-01-29

Fixed

[0.6.2] - 2026-01-25

Added

[0.6.1] - 2026-01-25

Added

  • Allow Path objects in Pydantic validation methods.

[0.6.0] - 2026-01-25

Added

  • Resources define their schema URN with a __schema__ classvar instead of a schemas default value. #110

  • External and URI marker classes for reference types.

Changed

  • Introduce a Path object to handle paths. #111

  • Reference type parameters simplified:

    • Reference[ExternalReference]Reference[External]

    • Reference[URIReference]Reference[URI]

    • Reference[Literal["User"]]Reference["User"]

    • Reference[Literal["User"] | Literal["Group"]]Reference[Union["User", "Group"]]

  • Reference now validates URI format for External and URI types.

  • Reference inherits from str directly instead of UserString.

Fixed

  • Only allow one primary complex attribute value to be true. #10

Deprecated

  • Defining schemas with a default value is deprecated. Use __schema__ = URN("...") instead.

  • Error.make_*_error() methods are deprecated. Use <Exception>.to_error() instead.

  • Reference[Literal["X"]] syntax is deprecated. Use Reference["X"] instead. Will be removed in 0.7.0.

  • ExternalReference alias is deprecated. Use External instead. Will be removed in 0.7.0.

  • URIReference alias is deprecated. Use URI instead. Will be removed in 0.7.0.

  • Validation that the base schema is present in schemas during SCIM context validation.

  • Validation that extension schemas are known during SCIM context validation.

  • Introduce SCIM exceptions hierarchy (SCIMException and subclasses) corresponding to RFC 7644 error types. #103

  • Error.from_validation_error to convert Pydantic ValidationError to SCIM Error.

  • PatchOp.patch auto-excludes other primary values when setting one to True. #116

[0.5.2] - 2026-01-22

Fixed

  • Sub-attributes of requested complex attributes are now included in responses. #114

[0.5.1] - 2025-11-07

Added

  • Support for Python 3.14.

  • Compile regexes.

Removed

  • Support for Python 3.9.

[0.5.0] - 2025-08-18

Added

  • Validation that forbid PatchOp with zero operations.

Fixed

  • Allow PATCH operations on resources and extensions root path.

  • Multiple ComplexAttribute do not inherit from MultiValuedComplexAttribute by default. #72 #73

[0.4.2] - 2025-08-05

Fixed

  • The library is 100% typed with mypy strict.

[0.4.1] - 2025-07-23

Fixed

  • Allow TypeVar as type parameters for PatchOp.

[0.4.0] - 2025-07-23

Added

  • Proper path validation for attributes, excluded_attributes and sort_by.

  • Implement patch()

Fixed

  • When using model_dump, ignore invalid attributes and excluded_attributes as suggested by RFC7644.

  • Don’t normalize attributes typed with Any. #20

[0.3.7] - 2025-07-17

Fixed

  • All non strict mypy type annotations are fixed.

[0.3.6] - 2025-07-02

Added

[0.3.5] - 2025-06-05

Added

  • Fix dynamic schema generation for user defined classes with inheritance.

[0.3.4] - 2025-06-05

Added

  • Implement User and Group attributes types shortcuts to match dynamically created model types.

[0.3.3] - 2025-05-21

Fixed

  • User class typing. #92

[0.3.2] - 2025-03-28

Fixed

  • Pydantic warning.

[0.3.1] - 2025-03-07

Fixed

[0.3.0] - 2024-12-11

Added

Changed

[0.2.12] - 2024-12-09

Added

[0.2.11] - 2024-12-08

Added

[0.2.10] - 2024-12-02

Changed

  • The schema attribute is annotated with true.

Fixed

  • Base64Bytes compatibility between pydantic 2.10+ and <2.10

[0.2.9] - 2024-12-02

Added

[0.2.8] - 2024-12-02

Added

  • Support for Pydantic 2.10.

[0.2.7] - 2024-11-30

Added

[0.2.6] - 2024-11-29

Fixed

  • Implement model_dump_json().

  • Temporarily set Pydantic 2.9 as the maximum supported version.

[0.2.5] - 2024-11-13

Fixed

[0.2.4] - 2024-11-03

Fixed

  • Python 3.9 and 3.10 compatibility.

[0.2.3] - 2024-11-01

Added

  • Python 3.13 support.

  • Proper Base64 serialization. #31

  • get_field_root_type() supports UnionType.

Changed

  • SearchRequest.attributes and SearchRequest.attributes are mutually exclusive. #19

  • Schema ids must be valid URIs. #26

[0.2.2] - 2024-09-20

Fixed

  • ListResponse pydantic discriminator issue introduced with pydantic 2.9.0. #75

  • Extension payloads are not required on response contexts. #77

[0.2.1] - 2024-09-06

Fixed

[0.2.0] - 2024-08-18

Fixed

Note

schema.make_model() becomes Resource.from_schema(schema) or Extension.from_schema(schema).

Changed

[0.1.15] - 2024-08-18

Added

  • Add a PEP561 py.typed file to mark the package as typed.

Fixed

Changed

  • Remove ListResponse of method in favor of regular type parameters.

Note

ListResponse.of(User) becomes ListResponse[User] and ListResponse.of(User, Group)`` becomes ListResponse[Union[User, Group]].

Note

pet: Reference["Pet"] becomes pet: Reference[Literal["Pet"]]

[0.1.14] - 2024-07-23

Fixed

  • get_by_payload return None on invalid payloads

  • instance model_dump() with multiple extensions #57

[0.1.13] - 2024-07-15

Fixed

[0.1.12] - 2024-07-11

Fixed

  • Additional bugfixes about attribute case sensitivity #45

  • Dump was broken after sub-model assignments #48

  • Extension attributes dump were ignored #49

  • ListResponse tolerate any schema order #50

[0.1.11] - 2024-07-02

Fixed

  • Attributes are case insensitive #39

[0.1.10] - 2024-06-30

Added

[0.1.9] - 2024-06-29

Added

  • Reference type parameters represent SCIM ReferenceType

Fixed

[0.1.8] - 2024-06-26

Added

  • Dynamic pydantic model creation from SCIM schemas. #6

Changed

Fix

  • Allow relative URLs in Reference.

  • Models with multiples extensions could not be initialized. #37

[0.1.7] - 2024-06-16

Added

Fix

  • Add missing default values. #33

[0.1.6] - 2024-06-06

Added

  • Implement CaseExact attributes annotations.

  • Implement Required attributes annotations validation.

Changed

  • Refactor get_field_mutability and get_field_returnability in get_field_annotation.

[0.1.5] - 2024-06-04

Fix

[0.1.4] - 2024-06-03

Fix

  • ServiceProviderConfiguration id is optional.

[0.1.3] - 2024-06-03

Changed

  • Rename ServiceProviderConfiguration to ServiceProviderConfig to match the RFCs naming convention.

[0.1.2] - 2024-06-02

Added

  • Implement guess_by_payload()

[0.1.1] - 2024-06-01

Changed

  • Pre-defined errors are not constants anymore

[0.1.0] - 2024-06-01

Added

  • Initial release