mirror of
https://github.com/samsonjs/vdirsyncer.git
synced 2026-03-25 08:55:50 +00:00
81 lines
1.8 KiB
Python
81 lines
1.8 KiB
Python
"""
|
|
Contains exception classes used by vdirsyncer. Not all exceptions are here,
|
|
only the most commonly used ones.
|
|
"""
|
|
|
|
|
|
class Error(Exception):
|
|
"""Baseclass for all errors."""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
for key, value in kwargs.items():
|
|
if getattr(self, key, object()) is not None: # pragma: no cover
|
|
raise TypeError(f"Invalid argument: {key}")
|
|
setattr(self, key, value)
|
|
|
|
super().__init__(*args)
|
|
|
|
|
|
class UserError(Error, ValueError):
|
|
"""Wrapper exception to be used to signify the traceback should not be
|
|
shown to the user."""
|
|
|
|
problems = None
|
|
|
|
def __str__(self):
|
|
msg = Error.__str__(self)
|
|
for problem in self.problems or ():
|
|
msg += f"\n - {problem}"
|
|
|
|
return msg
|
|
|
|
|
|
class CollectionNotFound(Error):
|
|
"""Collection not found"""
|
|
|
|
|
|
class PairNotFound(Error):
|
|
"""Pair not found"""
|
|
|
|
pair_name = None
|
|
|
|
|
|
class PreconditionFailed(Error):
|
|
"""
|
|
- The item doesn't exist although it should
|
|
- The item exists although it shouldn't
|
|
- The etags don't match.
|
|
|
|
Due to CalDAV we can't actually say which error it is.
|
|
This error may indicate race conditions.
|
|
"""
|
|
|
|
|
|
class NotFoundError(PreconditionFailed):
|
|
"""Item not found"""
|
|
|
|
|
|
class AlreadyExistingError(PreconditionFailed):
|
|
"""Item already exists."""
|
|
|
|
existing_href = None
|
|
|
|
|
|
class WrongEtagError(PreconditionFailed):
|
|
"""Wrong etag"""
|
|
|
|
|
|
class ReadOnlyError(Error):
|
|
"""Storage is read-only."""
|
|
|
|
|
|
class InvalidResponse(Error, ValueError):
|
|
"""The backend returned an invalid result."""
|
|
|
|
|
|
class UnsupportedMetadataError(Error, NotImplementedError):
|
|
"""The storage doesn't support this type of metadata."""
|
|
|
|
|
|
class CollectionRequired(Error):
|
|
"""`collection = null` is not allowed."""
|