@@ -84,7 +84,7 @@ def handler404(request, exception):
8484# -- single-resource-start --
8585@method_decorator (csrf_exempt , name = "dispatch" )
8686class UserView (View ):
87- """Handle GET, PATCH and DELETE on one SCIM user resource."""
87+ """Handle GET, PUT, PATCH and DELETE on one SCIM user resource."""
8888
8989 def get (self , request , app_record ):
9090 try :
@@ -105,6 +105,31 @@ def delete(self, request, app_record):
105105 delete_record (app_record ["id" ])
106106 return scim_response ("" , HTTPStatus .NO_CONTENT )
107107
108+ def put (self , request , app_record ):
109+ existing_user = to_scim_user (app_record )
110+ try :
111+ replacement = User .model_validate (
112+ json .loads (request .body ),
113+ scim_ctx = Context .RESOURCE_REPLACEMENT_REQUEST ,
114+ original = existing_user ,
115+ )
116+ except ValidationError as error :
117+ return scim_validation_error (error )
118+
119+ replacement .id = existing_user .id
120+ updated_record = from_scim_user (replacement )
121+ try :
122+ save_record (updated_record )
123+ except ValueError as error :
124+ return scim_uniqueness_error (error )
125+
126+ response_user = to_scim_user (updated_record )
127+ return scim_response (
128+ response_user .model_dump_json (
129+ scim_ctx = Context .RESOURCE_REPLACEMENT_RESPONSE
130+ )
131+ )
132+
108133 def patch (self , request , app_record ):
109134 try :
110135 patch = PatchOp [User ].model_validate (
0 commit comments