def test_internal_message_list(self): msg = { "status": "queued", "messages": [] } response = Mock() response.status_code = 200 response.content = json.dumps(msg) self.mock_requests.request.return_value = response lbh = LogBookHandler('uuid') # The logbook starts off with no messages eq_(0, len(lbh.messages)) msg['messages'].append( { "asctime": "2012-02-08T11:15:04", "message": "message1", }) response.content = json.dumps(msg) self.mock_requests.request.return_value = response new_msg = lbh.fetch() # The logbook has one message now eq_(1, len(lbh.messages)) eq_(new_msg, lbh.messages) messages = [ { "asctime": "2012-02-08T11:15:05", "message": "message2", }, { "asctime": "2012-02-08T11:15:06", "message": "message3", }] msg['messages'].extend(messages) response.content = json.dumps(msg) self.mock_requests.request.return_value = response new_msg = lbh.fetch() # The logbook has one message now eq_(3, len(lbh.messages)) eq_(new_msg, messages)
def _poll_logbook(uuid): import time lbh = LogBookHandler(uuid) firstrun = True while True: messages = lbh.fetch() for msg in messages: sys.stdout.write(format_logbook_message(msg, firstrun)) firstrun = False if lbh.status in 'finished': sys.stdout.write('\n') break if lbh.status in 'error': break if not firstrun: sys.stdout.write(colorize(".", "green")) sys.stdout.flush() time.sleep(2)
def _poll_logbook(uuid): import time lbh = LogBookHandler(uuid) while True: messages = lbh.fetch() for msg in messages: if msg['loglevel'] == 1: sys.stdout.write(format_logbook_message(msg)) sys.stdout.write('\n') elif msg['loglevel'] == 3: sys.stderr.write(format_logbook_message(msg)) sys.stderr.write('\n') if lbh.status in 'finished': sys.stdout.write('\n') break if lbh.status in 'error': sys.stderr.write('\n') break time.sleep(5)
def test_logbook_status(self): msg = { "status": "queued", "messages": [] } response = Mock() response.status_code = 200 response.content = json.dumps(msg) self.mock_requests.request.return_value = response lbh = LogBookHandler('uuid') eq_('unknown', lbh.status) lbh.fetch() eq_('queued', lbh.status) self.mock_requests.request.assert_called_once_with( url=lbh.uri(), method='get', verify='/path/ssl/StartSSL_CA.pem', )
def do_logbook(self, args, global_args): """Poll the logbook for an action.""" env.username = global_args.username env.password = global_args.password lbh = LogBookHandler(args.uuid) try: messages = lbh.fetch() except HttpReturnError as e: #FIXME: push this into its own formatting method error = { "code": e.args[0], "message": e.args[1] } sys.stderr.write(json.dumps(error, indent=4)) sys.stderr.flush() sys.exit(1) if global_args.raw: sys.stdout.write(lbh.response.content) else: for msg in messages: sys.stdout.write(format_logbook_message(msg))
def test_uri_construction(self): lbh = LogBookHandler(uuid='uuid') expected = "https://api.30loops.net/0.9/30loops/logbook/uuid" eq_(expected, lbh.uri())