* remove pyright Signed-off-by: Jens Langhammer <jens@goauthentik.io> * remove pylint Signed-off-by: Jens Langhammer <jens@goauthentik.io> * replace pylint with ruff Signed-off-by: Jens Langhammer <jens@goauthentik.io> * ruff fix Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * fix UP038 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix DJ012 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix default arg Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix UP031 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rename stage type to view Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix DJ008 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix remaining upgrade Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix PLR2004 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix B904 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix PLW2901 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix remaining issues Signed-off-by: Jens Langhammer <jens@goauthentik.io> * prevent ruff from breaking the code Signed-off-by: Jens Langhammer <jens@goauthentik.io> * stages/prompt: refactor field building Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * fix tests Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix lint Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fully remove isort Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io> Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> Co-authored-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
"""SCIM Client exceptions"""
|
|
|
|
from pydantic import ValidationError
|
|
from requests import Response
|
|
|
|
from authentik.lib.sentry import SentryIgnoredException
|
|
from authentik.providers.scim.clients.schema import SCIMError
|
|
|
|
|
|
class StopSync(SentryIgnoredException):
|
|
"""Exception raised when a configuration error should stop the sync process"""
|
|
|
|
def __init__(self, exc: Exception, obj: object, mapping: object | None = None) -> None:
|
|
self.exc = exc
|
|
self.obj = obj
|
|
self.mapping = mapping
|
|
|
|
def detail(self) -> str:
|
|
"""Get human readable details of this error"""
|
|
msg = f"Error {str(self.exc)}, caused by {self.obj}"
|
|
|
|
if self.mapping:
|
|
msg += f" (mapping {self.mapping})"
|
|
return msg
|
|
|
|
|
|
class SCIMRequestException(SentryIgnoredException):
|
|
"""Exception raised when an SCIM request fails"""
|
|
|
|
_response: Response | None
|
|
_message: str | None
|
|
|
|
def __init__(self, response: Response | None = None, message: str | None = None) -> None:
|
|
self._response = response
|
|
self._message = message
|
|
|
|
def detail(self) -> str:
|
|
"""Get human readable details of this error"""
|
|
if not self._response:
|
|
return self._message
|
|
try:
|
|
error = SCIMError.parse_raw(self._response.text)
|
|
return error.detail
|
|
except ValidationError:
|
|
pass
|
|
return self._message
|
|
|
|
|
|
class ResourceMissing(SCIMRequestException):
|
|
"""Error raised when the provider raises a 404, meaning that we
|
|
should delete our internal ID and re-create the object"""
|