Skip to content

Commit ebd7036

Browse files
committed
Merge pull request jplana#147 from jplana/rewrite_auth
Rewrite auth
2 parents 4d8231a + c8f9a15 commit ebd7036

7 files changed

Lines changed: 495 additions & 608 deletions

File tree

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,4 @@ tmp
1212
build
1313
dist
1414
docs
15-
etcd
1615
.coverage

src/etcd/__init__.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,13 @@ def __init__(self, message=None, payload=None, cause=None):
200200
self.cause = cause
201201

202202

203+
class EtcdInsufficientPermissions(EtcdException):
204+
"""
205+
Request failed because of insufficient permissions.
206+
"""
207+
pass
208+
209+
203210
class EtcdWatchTimedOut(EtcdConnectionFailed):
204211
"""
205212
A watch timed out without returning a result.
@@ -253,6 +260,7 @@ class EtcdError(object):
253260
107: EtcdRootReadOnly,
254261
108: EtcdDirNotEmpty,
255262
# 109: Non-public: existing peer addr.
263+
110: EtcdInsufficientPermissions,
256264

257265
200: EtcdValueError,
258266
201: EtcdValueError,
@@ -284,6 +292,13 @@ def handle(cls, payload):
284292
message = payload.get("message")
285293
cause = payload.get("cause")
286294
msg = '{} : {}'.format(message, cause)
295+
status = payload.get("status")
296+
# Some general status handling, as
297+
# not all endpoints return coherent error messages
298+
if status == 404:
299+
error_code = 100
300+
elif status == 401:
301+
error_code = 110
287302
exc = cls.error_exceptions.get(error_code, EtcdException)
288303
if issubclass(exc, EtcdException):
289304
raise exc(msg, payload)

0 commit comments

Comments
 (0)