Source code for datalad_next.url_operations.exceptions

"""Exceptions to be used by all handlers"""

from __future__ import annotations

from typing import (
    Any,
)


[docs] class UrlOperationsRemoteError(Exception): def __init__(self, url, message=None, status_code: Any = None): # use base exception feature to store all arguments in a tuple # and have named properties to access them super().__init__( url, message, status_code, ) def __str__(self): url, message, status_code = self.args if message: return message if status_code: return f"error {status_code} for {url!r}" return f"{self.__class__.__name__} for {url!r}" def __repr__(self) -> str: url, message, status_code = self.args return f"{self.__class__.__name__}(" \ f"{url!r}, {message!r}, {status_code!r})" @property def url(self): return self.args[0] @property def message(self): return self.args[1] @property def status_code(self): return self.args[2]
[docs] class UrlOperationsResourceUnknown(UrlOperationsRemoteError): """A connection request succeeded in principle, but target was not found Equivalent of an HTTP404 response. """ pass
[docs] class UrlOperationsInteractionError(UrlOperationsRemoteError): pass
[docs] class UrlOperationsAuthenticationError(UrlOperationsInteractionError): def __init__(self, url: str, credential: dict | None = None, message: str | None = None, status_code: Any = None): super().__init__(url, message=message, status_code=status_code) self.credential = credential
[docs] class UrlOperationsAuthorizationError(UrlOperationsRemoteError): def __init__(self, url: str, credential: dict | None = None, message: str | None = None, status_code: Any | None = None): super().__init__(url, message=message, status_code=status_code) self.credential = credential