1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import logging
from collections import defaultdict
from caldav import __version__
try:
import os
## one of DEBUG_PDB, DEBUG, DEVELOPMENT, PRODUCTION
debugmode = os.environ["PYTHON_CALDAV_DEBUGMODE"]
except:
if "dev" in __version__:
debugmode = "DEVELOPMENT"
else:
debugmode = "PRODUCTION"
log = logging.getLogger("caldav")
if debugmode.startswith("DEBUG"):
log.setLevel(logging.DEBUG)
else:
log.setLevel(logging.WARNING)
def assert_(condition):
try:
assert condition
except AssertionError:
if debugmode == "PRODUCTION":
log.error(
"Deviation from expectations found. %s" % ERR_FRAGMENT, exc_info=True
)
elif debugmode == "DEBUG_PDB":
log.error("Deviation from expectations found. Dropping into debugger")
import pdb
pdb.set_trace()
else:
raise
ERR_FRAGMENT = "Please raise an issue at https://github.com/python-caldav/caldav/issues or reach out to t-caldav@tobixen.no, include this error and the traceback and tell what server you are using"
class DAVError(Exception):
url = None
reason = "no reason"
def __init__(self, url=None, reason=None):
if url:
self.url = url
if reason:
self.reason = reason
def __str__(self):
return "%s at '%s', reason %s" % (
self.__class__.__name__,
self.url,
self.reason,
)
class AuthorizationError(DAVError):
"""
The client encountered an HTTP 403 error and is passing it on
to the user. The url property will contain the url in question,
the reason property will contain the excuse the server sent.
"""
pass
class PropsetError(DAVError):
pass
class ProppatchError(DAVError):
pass
class PropfindError(DAVError):
pass
class ReportError(DAVError):
pass
class MkcolError(DAVError):
pass
class MkcalendarError(DAVError):
pass
class PutError(DAVError):
pass
class DeleteError(DAVError):
pass
class NotFoundError(DAVError):
pass
class ConsistencyError(DAVError):
pass
class ResponseError(DAVError):
pass
exception_by_method = defaultdict(lambda: DAVError)
for method in (
"delete",
"put",
"mkcalendar",
"mkcol",
"report",
"propset",
"propfind",
"proppatch",
):
exception_by_method[method] = locals()[method[0].upper() + method[1:] + "Error"]
|