Skip to content

Commit f2c0d41

Browse files
committed
fix: errata 8475 - ResourceType name and endpoint have server uniqueness
1 parent 6eed3da commit f2c0d41

File tree

4 files changed

+20
-10
lines changed

4 files changed

+20
-10
lines changed

doc/changelog.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Fixed
1010
- Group ``displayName`` is required. :rfc:`7643` `erratum 5368 <https://www.rfc-editor.org/errata/eid5368>`_ :issue:`123` :pr:`128`
1111
- :class:`~scim2_models.GroupMembership` ``$ref`` only references ``Group``. :rfc:`7643` `erratum 8471 <https://www.rfc-editor.org/errata/eid8471>`_
1212
- :class:`~scim2_models.Manager` ``value`` is case-exact. :rfc:`7643` `erratum 8472 <https://www.rfc-editor.org/errata/eid8472>`_
13+
- :class:`~scim2_models.ResourceType` ``name`` and ``endpoint`` have server uniqueness. :rfc:`7643` `erratum 8475 <https://www.rfc-editor.org/errata/eid8475>`_
1314

1415
[0.6.2] - 2026-01-25
1516
--------------------

samples/rfc7643-8.7.2-schema-resource_type.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
"multiValued": false,
2222
"description": "The resource type name. When applicable, service providers MUST specify the name, e.g., 'User'.",
2323
"required": true,
24-
"caseExact": false,
24+
"caseExact": true,
2525
"mutability": "readOnly",
2626
"returned": "default",
27-
"uniqueness": "none"
27+
"uniqueness": "server"
2828
},
2929
{
3030
"name": "description",
@@ -49,7 +49,7 @@
4949
"caseExact": false,
5050
"mutability": "readOnly",
5151
"returned": "default",
52-
"uniqueness": "none"
52+
"uniqueness": "server"
5353
},
5454
{
5555
"name": "schema",

scim2_models/resources/resource_type.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from ..annotations import Mutability
99
from ..annotations import Required
1010
from ..annotations import Returned
11+
from ..annotations import Uniqueness
1112
from ..attributes import ComplexAttribute
1213
from ..path import URN
1314
from ..reference import URI
@@ -38,7 +39,13 @@ class SchemaExtension(ComplexAttribute):
3839
class ResourceType(Resource[Any]):
3940
__schema__ = URN("urn:ietf:params:scim:schemas:core:2.0:ResourceType")
4041

41-
name: Annotated[str | None, Mutability.read_only, Required.true] = None
42+
name: Annotated[
43+
str | None,
44+
Mutability.read_only,
45+
Required.true,
46+
CaseExact.true,
47+
Uniqueness.server,
48+
] = None
4249
"""The resource type name.
4350
4451
When applicable, service providers MUST specify the name, e.g.,
@@ -57,9 +64,9 @@ class ResourceType(Resource[Any]):
5764
This is often the same value as the "name" attribute.
5865
"""
5966

60-
endpoint: Annotated[Reference[URI] | None, Mutability.read_only, Required.true] = (
61-
None
62-
)
67+
endpoint: Annotated[
68+
Reference[URI] | None, Mutability.read_only, Required.true, Uniqueness.server
69+
] = None
6370
"""The resource type's HTTP-addressable endpoint relative to the Base URL,
6471
e.g., '/Users'."""
6572

tests/test_dynamic_resources.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1450,10 +1450,10 @@ def test_make_resource_type_model_from_schema(load_sample):
14501450
== "The resource type name. When applicable, service providers MUST specify the name, e.g., 'User'."
14511451
)
14521452
assert ResourceType.get_field_annotation("name", Required) == Required.true
1453-
assert ResourceType.get_field_annotation("name", CaseExact) == CaseExact.false
1453+
assert ResourceType.get_field_annotation("name", CaseExact) == CaseExact.true
14541454
assert ResourceType.get_field_annotation("name", Mutability) == Mutability.read_only
14551455
assert ResourceType.get_field_annotation("name", Returned) == Returned.default
1456-
assert ResourceType.get_field_annotation("name", Uniqueness) == Uniqueness.none
1456+
assert ResourceType.get_field_annotation("name", Uniqueness) == Uniqueness.server
14571457

14581458
# description
14591459
assert ResourceType.get_field_root_type("description") is str
@@ -1491,7 +1491,9 @@ def test_make_resource_type_model_from_schema(load_sample):
14911491
== Mutability.read_only
14921492
)
14931493
assert ResourceType.get_field_annotation("endpoint", Returned) == Returned.default
1494-
assert ResourceType.get_field_annotation("endpoint", Uniqueness) == Uniqueness.none
1494+
assert (
1495+
ResourceType.get_field_annotation("endpoint", Uniqueness) == Uniqueness.server
1496+
)
14951497

14961498
# schema
14971499
assert ResourceType.get_field_root_type("schema_") == Reference[URI]

0 commit comments

Comments
 (0)