def get_message_headers(uid_list): name = state['name'] message_headers = {} for uid in uid_list: i = folders[name]['index'][uid] message_headers[uid] = folders[name]['headers'][i] return defer(message_headers)
def test_callback(self): cb = callback.defer('ok') self.assertTrue(isinstance(cb, callback.Callback)) self.assertEqual(cb.result, 'ok') self.assertEqual(self.calls, []) cb.add(self.call) self.assertEqual(self.calls, ['ok'])
def test_defer(): cb = defer('ok') assert isinstance(cb, Callback) assert cb.result == 'ok' calls = [] cb.add(calls.append) assert calls == ['ok']
def write(self, data): if isinstance(data, unicode): data = data.encode(self.write_encoding) self._check_closed() if data == "": # twisted won't ever tell us we flushed writing "" return defer(None) self.writing = True self._stack_conn.write(data) cb = self.flush() self._queue_timeout(cb) return cb
def copy_messages(src_uids, dst_folder_name): src_folder = folders[state['name']] dst_folder = folders[dst_folder_name] next_uid = max([0] + dst_folder['index'].keys()) + 1 next_index = max([0] + dst_folder['index'].values()) + 1 uid_map = {} for uid in src_uids: uid_map[uid] = next_uid i = src_folder['index'][uid] dst_folder['flags'][next_uid] = src_folder['flags'][uid] dst_folder['index'][next_uid] = next_index dst_folder['headers'][next_index] = src_folder['headers'][i] next_uid += 1; next_index += 1 return defer({'UIDVALIDITY': dst_folder['uidvalidity'], 'uid_map': uid_map})
def test_load_full_message(self): from tinymail.account import message_updated account = _account_for_test() mime_message = "Subject: hi\r\n\r\nHello world!" with mock_worker(fol1={6: None}) as worker: account.perform_update() message = account.get_folder('fol1')._messages[6] worker.get_message_body.return_value = defer(mime_message) worker.close_mailbox.reset_mock() with listen_for(message_updated) as caught_signals: message.load_full() self.assertEqual(message.raw_full, mime_message) self.assertEqual(caught_signals, [(message, {})]) worker.close_mailbox.assert_called_once_with()
def select_mailbox(name, readonly=True): state['name'] = name return defer({'MESSAGES': len(folders[name]['flags']), 'UIDVALIDITY': folders[name]['uidvalidity']})
def mock_worker(**imap_spec): from mock import Mock, patch from monocle.callback import defer from tinymail.imap_worker import ImapWorker worker = Mock(spec=ImapWorker) worker.done = Mock() # `done` is implemented by `AsyncWorkerProxy` state = {} folders = {} for name, mbox_spec in imap_spec.iteritems(): folder = folders[name] = {'flags': {}, 'headers': {}, 'index': {}} folder['uidvalidity'] = mbox_spec.pop('UIDVALIDITY', 123456) for i, (uid, msg_spec) in enumerate(mbox_spec.iteritems()): if msg_spec is None: msg_spec = (uid, set(), "PLACEHOLDER HEADER") folder['flags'][uid] = msg_spec[1] folder['index'][uid] = i folder['headers'][i] = msg_spec[2] worker.connect.return_value = defer(None) worker.get_mailbox_names.return_value = defer(list(folders)) def select_mailbox(name, readonly=True): state['name'] = name return defer({'MESSAGES': len(folders[name]['flags']), 'UIDVALIDITY': folders[name]['uidvalidity']}) worker.select_mailbox = select_mailbox worker.get_message_flags = lambda: defer(folders[state['name']]['flags']) def get_message_headers(uid_list): name = state['name'] message_headers = {} for uid in uid_list: i = folders[name]['index'][uid] message_headers[uid] = folders[name]['headers'][i] return defer(message_headers) worker.get_message_headers.side_effect = get_message_headers def copy_messages(src_uids, dst_folder_name): src_folder = folders[state['name']] dst_folder = folders[dst_folder_name] next_uid = max([0] + dst_folder['index'].keys()) + 1 next_index = max([0] + dst_folder['index'].values()) + 1 uid_map = {} for uid in src_uids: uid_map[uid] = next_uid i = src_folder['index'][uid] dst_folder['flags'][next_uid] = src_folder['flags'][uid] dst_folder['index'][next_uid] = next_index dst_folder['headers'][next_index] = src_folder['headers'][i] next_uid += 1; next_index += 1 return defer({'UIDVALIDITY': dst_folder['uidvalidity'], 'uid_map': uid_map}) worker.copy_messages.side_effect = copy_messages worker.change_flag.return_value = defer(None) worker.close_mailbox.return_value = defer(None) worker.disconnect.return_value = defer(None) worker.copy_messages.return_value = defer(None) with patch('tinymail.account._new_imap_worker', Mock(return_value=worker)): yield worker