class SynchronousClient(object): """Synchronous client. This client should be used in long-polling mode. """ def __init__(self, server_url, parse_event_body=True, last_event_seen=None): self.server_url = server_url self.last_event_seen = last_event_seen self.deserializer = Deserializer() self.parse_event_body = parse_event_body self.stream_finished = False def receive_events(self): url = self.server_url if self.last_event_seen is not None: url += '?last-seen=' + self.last_event_seen connection = urllib2.urlopen(url) data = connection.read() evs = self.deserializer.deserialize(data, complete=True, parse_body=self.parse_event_body) connection.close() if len(evs) > 0: self.last_event_seen = evs[-1].event_id for event in evs: if (isinstance(event, Command) and event.command == 'Stream-Finished'): self.stream_finished = True break return [e for e in evs if not isinstance(e, Command)]
def count_events(filename): """Counts the number of events in a file and their total size. Returns a tuple (num_events, num_bytes). """ num_bytes = 0 num_events = 0 if filename.endswith('.gz'): file_ = gzip.GzipFile(filename, 'r') else: file_ = open(filename, 'r') deserializer = Deserializer() while True: data = file_.read(1024) if data == '': break evs = deserializer.deserialize(data, parse_body=False, complete=False) num_bytes += len(data) num_events += len(evs) file_.close() return num_events, num_bytes