Skip to content
This repository was archived by the owner on Jan 20, 2020. It is now read-only.

Commit ac5e672

Browse files
committed
Merge branch 'staging'
2 parents 526e7cd + 8494e4e commit ac5e672

File tree

3 files changed

+17
-8
lines changed

3 files changed

+17
-8
lines changed

dockercloud/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from dockercloud.api.events import Events
2626
from dockercloud.api.nodeaz import AZ
2727

28-
__version__ = '1.0.4'
28+
__version__ = '1.0.5'
2929

3030
dockercloud_auth = os.environ.get('DOCKERCLOUD_AUTH')
3131
basic_auth = auth.load_from_file("~/.docker/config.json")

dockercloud/api/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ def _ws_init(self, url):
264264
header = {'User-Agent': user_agent}
265265
header.update(dockercloud.auth.get_auth_header())
266266
self.header = [": ".join([key, value]) for key, value in header.items()]
267-
logger.info("websocket: %s %s" % (self.url, self.header))
267+
logger.info("Websocket: %s %s" % (self.url, self.header))
268268
self.open_handler = None
269269
self.message_handler = None
270270
self.error_handler = None

dockercloud/api/events.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,48 @@
11
from __future__ import absolute_import
22

33
import json
4+
import logging
45

56
import websocket
67

78
import dockercloud
89
from .base import StreamingAPI
910
from .exceptions import AuthError
1011

12+
logger = logging.getLogger("python-dockercloud")
13+
1114

1215
class Events(StreamingAPI):
1316
def __init__(self):
1417
endpoint = "events"
1518
url = "/".join([dockercloud.stream_host.rstrip("/"), "api", "audit", self._api_version, endpoint.lstrip("/")])
19+
self.invaid_auth_headers = set()
20+
self.auth_error = ""
1621
super(self.__class__, self).__init__(url)
1722

1823
def _on_message(self, ws, message):
24+
logger.info("Websocket Message: %s" % message)
1925
try:
2026
event = json.loads(message)
2127
except ValueError:
2228
return
23-
24-
if event.get("type") == "error" and event.get("data", {}).get("errorMessage") == "UNAUTHORIZED":
25-
self.auth_error = True
26-
raise AuthError("Not authorized")
2729
if event.get("type") == "auth":
2830
return
2931

3032
if self.message_handler:
3133
self.message_handler(message)
3234

35+
def _on_error(self, ws, e):
36+
if isinstance(e, websocket._exceptions.WebSocketBadStatusException) and getattr(e, "status_code") == 401:
37+
self.auth_error = "Not Authorized"
38+
self.invaid_auth_headers.add(str(dockercloud.auth.get_auth_header()))
39+
40+
super(self.__class__, self)._on_error(ws, e)
41+
3342
def run_forever(self, *args, **kwargs):
3443
while True:
35-
if self.auth_error:
36-
raise AuthError("Not authorized")
44+
if str(dockercloud.auth.get_auth_header()) in self.invaid_auth_headers:
45+
raise AuthError(self.auth_error)
3746
ws = websocket.WebSocketApp(self.url, header=self.header,
3847
on_open=self._on_open,
3948
on_message=self._on_message,

0 commit comments

Comments
 (0)