18
18
import shlex
19
19
import struct
20
20
import warnings
21
+ from datetime import datetime
21
22
22
23
import requests
23
24
import requests .exceptions
30
31
from . import errors
31
32
from .tls import TLSConfig
32
33
34
+
33
35
if not six .PY3 :
34
36
import websocket
35
37
@@ -290,7 +292,7 @@ def _get_raw_response_socket(self, response):
290
292
291
293
return sock
292
294
293
- def _stream_helper (self , response ):
295
+ def _stream_helper (self , response , decode = False ):
294
296
"""Generator for data coming from a chunked-encoded HTTP response."""
295
297
if response .raw ._fp .chunked :
296
298
reader = response .raw
@@ -301,6 +303,8 @@ def _stream_helper(self, response):
301
303
break
302
304
if reader ._fp .chunk_left :
303
305
data += reader .read (reader ._fp .chunk_left )
306
+ if decode :
307
+ data = json .loads (data )
304
308
yield data
305
309
else :
306
310
# Response isn't chunked, meaning we probably
@@ -565,8 +569,25 @@ def diff(self, container):
565
569
return self ._result (self ._get (self ._url ("/containers/{0}/changes" .
566
570
format (container ))), True )
567
571
568
- def events (self ):
569
- return self ._stream_helper (self .get (self ._url ('/events' ), stream = True ))
572
+ def events (self , since = None , until = None , filters = None , decode = None ):
573
+ if isinstance (since , datetime ):
574
+ since = utils .datetime_to_timestamp (since )
575
+
576
+ if isinstance (until , datetime ):
577
+ until = utils .datetime_to_timestamp (until )
578
+
579
+ if filters :
580
+ filters = utils .convert_filters (filters )
581
+
582
+ params = {
583
+ 'since' : since ,
584
+ 'until' : until ,
585
+ 'filters' : filters
586
+ }
587
+
588
+ return self ._stream_helper (self .get (self ._url ('/events' ),
589
+ params = params , stream = True ),
590
+ decode = decode )
570
591
571
592
def execute (self , container , cmd , detach = False , stdout = True , stderr = True ,
572
593
stream = False , tty = False ):
0 commit comments