def execute(*args, **kw): """ List mailboxes """ imap = IMAP() if not conf.connect_server == None: imap.connect(server=conf.connect_server) else: imap.connect() print imap.get_metadata("")
def test_005_user_folders_metadata_set(self): imap = IMAP() imap.connect() ac_folders = conf.get_raw('kolab', 'autocreate_folders') exec("ac_folders = %s" % (ac_folders)) folders = [] folders.extend(imap.lm('user/%(local)s@%(domain)s' % (self.user))) folders.extend(imap.lm('user/%(local)s/*@%(domain)s' % (self.user))) for folder in folders: metadata = imap.get_metadata(folder) print metadata folder_name = '/'.join(folder.split('/')[2:]).split('@')[0] if ac_folders.has_key(folder_name): if ac_folders[folder_name].has_key('annotations'): for _annotation in ac_folders[folder_name]['annotations'].keys(): if _annotation.startswith('/private'): continue _annotation_value = ac_folders[folder_name]['annotations'][_annotation] self.assertTrue(metadata[metadata.keys().pop()].has_key(_annotation)) self.assertEqual(_annotation_value, metadata[metadata.keys().pop()][_annotation])
def test_003_folders_metadata_set(self): imap = IMAP() imap.connect() exec("ac_folders = %s" % (conf.get_raw( conf.get('kolab', 'primary_domain'), 'autocreate_folders'))) folders = [] folders.extend(imap.lm('user/%(local)s@%(domain)s' % (self.user))) folders.extend(imap.lm('user/%(local)s/*@%(domain)s' % (self.user))) for folder in folders: metadata = imap.get_metadata(folder) folder_name = '/'.join(folder.split('/')[2:]).split('@')[0] if folder_name in ac_folders: if 'annotations' in ac_folders[folder_name]: for _annotation in ac_folders[folder_name]['annotations']: if _annotation.startswith('/private/'): continue _annotation_value = ac_folders[folder_name][ 'annotations'][_annotation] self.assertTrue( _annotation in metadata[metadata.keys().pop()]) self.assertEqual( _annotation_value, metadata[metadata.keys().pop()][_annotation])
class IMAPDataHandler(object): """ Collector handler to provide metadata from IMAP """ def __init__(self, *args, **kw): # load pykolab conf conf = pykolab.getConf() if not hasattr(conf, 'defaults'): conf.finalize_conf(fatal=False) self.imap = IMAP() def register(self, callback): interests = { 'GETMETADATA': { 'callback': self.get_imap_folder_metadata }, 'GETACL': { 'callback': self.get_imap_folder_acl } } callback(interests) def get_imap_folder_metadata(self, notification): notification = json.loads(notification) log.debug("GETMETADATA for %r" % (notification), level=9) # split the uri parameter into useful parts uri = parse_imap_uri(notification['uri']) folder_path = imap_folder_path(uri) # get metadata using pykolab's imap module metadata = {} try: self.imap.connect() metadata = self.imap.get_metadata(folder_path)[folder_path] self.imap.disconnect() except Exception, e: log.warning("Failed to get metadata for %r: %r", folder_path, e) notification['metadata'] = metadata return json.dumps(notification)
imap.connect(domain=domain, login=False) backend = conf.get(domain, 'imap_backend') if backend == None: backend = conf.get('kolab', 'imap_backend') admin_login = conf.get(backend, 'admin_login') admin_password = conf.get(backend, 'admin_password') imap.login_plain(admin_login, admin_password, conf.user) else: imap.connect(domain=domain) if not imap.has_folder(folder): print >> sys.stderr, _("No such folder %r") % (folder) else: metadata = [] folders = imap.list_folders(folder) for folder in folders: print "Folder", folder.encode('utf-8') metadata = imap.get_metadata(folder) if metadata.has_key(folder): for annotation in metadata[folder].keys(): print " %-49s %s" % ( annotation, metadata[folder][annotation] )