def list_contacts( pubkey_str, privkey_str, start_idx=None, length=None ): global STORAGE_DIR, CACHED_CONTACT_LIST cached_contacts = storage.get_cached_data( privkey_str, CACHED_CONTACT_LIST ) if cached_contacts == None: log.info("No cached contacts") else: return cached_contacts contact_dir = storage.volume_path( STORAGE_DIR ) dir_ents = storage.listdir( contact_dir ) dir_ents.sort() if start_idx == None: start_idx = 0 if length == None: length = len(dir_ents) if start_idx + length > len(dir_ents): length = len(dir_ents) - start_idx dir_ents = dir_ents[start_idx:start_idx + length] contact_emails = [] for contact_filename in dir_ents: contact_path = storage.path_join( contact_dir, contact_filename ) contact = read_contact_from_path( privkey_str, contact_path ) if contact == None: log.warning("Failed to read contact file %s" % contact_path) continue contact_emails.append( contact.addr ) storage.cache_data( pubkey_str, CACHED_CONTACT_LIST, contact_emails ) return contact_emails
log.warning("Failed to read message") continue metadata = SyndicateMessageMetadata( id=msg_data.id, sender_addr=msg_data.sender_addr, receiver_addrs=msg_data.receiver_addrs, cc_addrs=msg_data.cc_addrs, subject=msg_data.subject, timestamp=msg_data.timestamp, handle=message_handle( msg_data.timestamp, msg_data.id ), has_attachments=(len(msg_data.attachment_names) > 0), is_read=is_read ) ret.append( metadata ) storage.cache_data( pubkey_str, folder_cache_name( folder_name ), ret ) return ret def stddev( data ): x_avg = 0.0 for x in data: x_avg += x x_avg /= len(data) val = 0.0 for x in data: val += (x - x_avg) * (x - x_avg)