|
16 | 16 | from scim2_models import PatchOp |
17 | 17 | from scim2_models import ResourceType |
18 | 18 | from scim2_models import ResponseParameters |
| 19 | +from scim2_models import SCIMException |
19 | 20 | from scim2_models import Schema |
20 | 21 | from scim2_models import SearchRequest |
21 | | -from scim2_models import UniquenessException |
22 | 22 | from scim2_models import User |
23 | 23 |
|
24 | 24 | from .integrations import check_etag |
@@ -81,12 +81,12 @@ def scim_validation_error(error): |
81 | 81 | # -- validation-helper-end -- |
82 | 82 |
|
83 | 83 |
|
84 | | -# -- uniqueness-helper-start -- |
85 | | -def scim_uniqueness_error(error): |
86 | | - """Turn uniqueness errors into a SCIM 409 response.""" |
87 | | - scim_error = UniquenessException(detail=str(error)).to_error() |
88 | | - return scim_response(scim_error.model_dump_json(), HTTPStatus.CONFLICT) |
89 | | -# -- uniqueness-helper-end -- |
| 84 | +# -- scim-exception-helper-start -- |
| 85 | +def scim_exception_error(error): |
| 86 | + """Turn SCIM exceptions into a SCIM error response.""" |
| 87 | + scim_error = error.to_error() |
| 88 | + return scim_response(scim_error.model_dump_json(), scim_error.status) |
| 89 | +# -- scim-exception-helper-end -- |
90 | 90 |
|
91 | 91 |
|
92 | 92 | # -- precondition-helper-start -- |
@@ -152,17 +152,19 @@ def put(self, request, app_record): |
152 | 152 | replacement = User.model_validate( |
153 | 153 | json.loads(request.body), |
154 | 154 | scim_ctx=Context.RESOURCE_REPLACEMENT_REQUEST, |
155 | | - original=existing_user, |
156 | 155 | ) |
| 156 | + replacement.replace(existing_user) |
157 | 157 | except ValidationError as error: |
158 | 158 | return scim_validation_error(error) |
| 159 | + except SCIMException as error: |
| 160 | + return scim_exception_error(error) |
159 | 161 |
|
160 | 162 | replacement.id = existing_user.id |
161 | 163 | updated_record = from_scim_user(replacement) |
162 | 164 | try: |
163 | 165 | save_record(updated_record) |
164 | | - except ValueError as error: |
165 | | - return scim_uniqueness_error(error) |
| 166 | + except SCIMException as error: |
| 167 | + return scim_exception_error(error) |
166 | 168 |
|
167 | 169 | response_user = to_scim_user(updated_record, resource_location(request, updated_record)) |
168 | 170 | resp = scim_response( |
@@ -192,8 +194,8 @@ def patch(self, request, app_record): |
192 | 194 | updated_record = from_scim_user(scim_user) |
193 | 195 | try: |
194 | 196 | save_record(updated_record) |
195 | | - except ValueError as error: |
196 | | - return scim_uniqueness_error(error) |
| 197 | + except SCIMException as error: |
| 198 | + return scim_exception_error(error) |
197 | 199 |
|
198 | 200 | resp = scim_response( |
199 | 201 | scim_user.model_dump_json(scim_ctx=Context.RESOURCE_PATCH_RESPONSE) |
@@ -242,8 +244,8 @@ def post(self, request): |
242 | 244 | app_record = from_scim_user(request_user) |
243 | 245 | try: |
244 | 246 | save_record(app_record) |
245 | | - except ValueError as error: |
246 | | - return scim_uniqueness_error(error) |
| 247 | + except SCIMException as error: |
| 248 | + return scim_exception_error(error) |
247 | 249 |
|
248 | 250 | response_user = to_scim_user(app_record, resource_location(request, app_record)) |
249 | 251 | resp = scim_response( |
|
0 commit comments